TCP

OSI 七层模型 1. 概念 OSI(Open Systems Interconnection)由 ISO 提出 目标:实现不同厂商设备互联 将网络通信划分为 7 层,每层负责特定功能 特点:分层、独立、协作、模块化 2. 七层模型逐层总结(自下而上) ① 物理层(Physical Layer) 核心职责:传输比特流(0/1) 定义电气特性、接口规范、信号电压、速率 不关心数据含义,只负责“电信号”传输 典型: 网线、光纤、RJ45、电压电流 ② 数据链路层(Data Link Layer) 核心职责:将比特流封装成帧,实现相邻节点可靠传输 差错检测(CRC) 流量控制、帧同步 典型: MAC 地址、以太网、ARP ③ 网络层(Network Layer) 核心职责:逻辑寻址 + 路由选择 决定数据包从源到目的的路径 跨网络转发 典型: IP 地址、IP 协议、路由协议 ④ 传输层(Transport Layer) 核心职责:端到端通信 数据分段、重组 提供可靠或不可靠传输 典型: TCP(可靠)、UDP(实时)、端口号 ⑤ 会话层(Session Layer) 核心职责:建立、管理、终止会话 会话状态控制 同步、恢复 典型: 会话管理、断点续传(概念) ⑥ 表示层(Presentation Layer) 核心职责:数据格式转换 编码、加密、解密、压缩 屏蔽不同系统的数据表示差异 典型: ASCII、UTF-8、压缩、SSL/TLS(概念上) ...

2026-04-06 · 10 min · 2035 words · Shearin

App

🧵 pthread_create() 创建线程的核心流程 1. 准备线程控制块(TCB) 内核分配线程控制块(Thread Control Block),保存线程的基本信息: 线程 ID 状态(就绪、运行、阻塞等) 寄存器上下文(PC、SP 等) 如果传入了 pthread_attr_t,则根据属性设置栈大小、调度策略等。 2. 分配线程栈空间 每个线程有独立的栈,用于函数调用和局部变量。 默认大小由系统决定,可通过 attr 修改。 3. 初始化线程上下文 设置程序计数器(PC)指向入口函数 start_routine。 初始化栈指针(SP)和寄存器。 将参数 arg 传递给入口函数。 4. 加入调度器 内核把新线程放入 可运行队列。 根据调度策略(如 SCHED_OTHER、SCHED_FIFO、SCHED_RR)等待 CPU 调度。 5. 返回线程 ID pthread_create() 返回 0 表示成功。 用户态获得线程 ID,可用于 pthread_join() 或 pthread_detach()。 6. 线程开始执行 CPU 调度器选择该线程运行。 执行入口函数 start_routine(arg)。 执行结束后调用 pthread_exit() 或隐式退出。 注意事项 共享地址空间:所有线程共享进程的堆、全局变量。 独立栈:每个线程有自己的栈和寄存器上下文。 资源释放:如果不调用 pthread_join() 或 pthread_detach(),线程退出后资源不会自动释放,可能导致内存泄漏。 总结口诀 TCB → 栈 → 上下文 → 调度器 → 返回 ID → 执行入口函数 ...

2026-04-05 · 4 min · 707 words · Shearin

IPC

下面我把你这两节内容 (死锁与活锁 + 中断上下文中能否使用互斥锁) 结合你当前页面中的知识,再加上操作系统并发控制的完整理解,整理成一份 结构清晰、适合八股文/面试的总结版。 我保持你要求的 Markdown 最大二级标题。

2026-04-04 · 1 min · 9 words · Shearin

Interupt

中断 中断上下文(Interrupt Context) 中断上下文是指 CPU 在处理中断(硬件中断或软件中断)时所处的特殊执行环境。 在这个环境中,CPU 会暂停当前进程/线程,转而执行中断服务例程(ISR)。 中断上下文是操作系统中 最高优先级、最敏感、最严格 的执行环境。 4.19.1 中断上下文的特点 1. 实时性强 中断必须 立即响应 外设事件(如网卡、定时器、中断控制器)。 ISR 必须 短小精悍,尽快退出,避免影响系统实时性。 2. 非阻塞(不能睡眠) 在中断上下文中 绝对不能阻塞,包括: 不能 sleep / msleep 不能等待锁(mutex、semaphore) 不能执行可能阻塞的 I/O 不能调用 schedule() 原因: 阻塞会导致中断无法结束,系统无法继续调度,严重影响稳定性。 3. 不允许调度 中断上下文中 调度被禁止。 ISR 不能主动让出 CPU,也不能被调度器切走。 4. 不可重入(一般情况) 一个中断处理程序执行期间,同类型中断不会再次进入。 某些系统支持中断嵌套(高优先级中断打断低优先级),但必须谨慎使用。 4.19.2 中断上下文的执行流程 1. 中断发生 硬件设备或软件触发 IRQ。 2. 保存当前进程状态 CPU 保存: PC(程序计数器) 寄存器 内核栈指针 这些信息用于中断返回后恢复执行。 3. 执行中断处理程序(ISR) ISR 负责: 读取设备寄存器 清除中断标志 将数据放入缓冲区 通知下半部(如软中断、tasklet、workqueue) 4. 恢复原任务 ISR 完成后: ...

2026-04-04 · 3 min · 546 words · Shearin

OS

多线程编程 多进程内存共享可能存在的问题及处理方法 1. 内存一致性问题(Memory Consistency) 多个进程可能缓存共享数据,导致: A 进程写入的数据,B 进程读不到(缓存未同步) 多核 CPU 上出现乱序执行导致读写顺序不一致 本质原因: 进程之间没有自动的缓存一致性保证,需要显式同步。 2. 并发访问问题(Race Condition) 多个进程同时读写共享变量时,会出现: 数据竞争(Data Race) 写覆盖写 读到中间状态的数据 例如两个进程同时执行 counter++,可能导致最终值错误。 3. 同步问题(Lack of Synchronization) 共享内存本身不带同步机制,进程之间必须自行协调: 谁先读? 谁先写? 写完是否通知其他进程? 如果没有同步,就会出现混乱。 4. 死锁问题(Deadlock) 如果多个进程使用锁不当,会出现: A 等 B 的锁 B 等 A 的锁 最终所有进程都卡住。 5. 内存泄漏与资源未释放 共享内存属于系统资源,如果: 创建后未 shmctl(..., IPC_RMID) POSIX shm_unlink() 未调用 Windows CloseHandle() 未调用 就会导致系统资源泄漏。 处理方法 1. 使用 IPC 同步机制(必备) 共享内存必须配合同步机制使用: 信号量(Semaphore):最常用的进程同步方式 互斥锁(Mutex):POSIX 支持 进程间互斥锁(需要放在共享内存中) 读写锁(RWLock):读多写少场景 条件变量(Condition Variable):用于事件通知 示例(POSIX 信号量): ...

2026-04-04 · 4 min · 720 words · Shearin

Leetcode

动态规划 [309]买卖股票的最佳时机含冷冻期 给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 hold(持有) keep hold 保持持有 selled 把持有的买了 price + hold selled(不持有,在冷静期) sell 出冷静期 sell(不持有,可以卖) keep sell 继续不持有 hold 买入 sell - price class Solution { public: int maxProfit(vector<int>& prices) { int hold = -prices[0]; int sell = 0; int selled = 0; for(vector<int>::iterator it = prices.begin()+1; it != prices.end(); ++it){ int tmp = hold + *it; hold = max(hold,sell-*it); sell = max(sell,selled); selled = tmp; } return max(sell,selled); } }; 回溯 17.电话号码的字母组合

2026-04-01 · 1 min · 85 words · Shearin

Yaku

🀄 日麻全部役种(从常用到偏僻) 下面按类别整理: 一番役(常用) 二番役(中级) 三番以上(高级) 役满(大役) 复合役满(双倍役满等) 特殊役(部分规则限定) 一、常用的一番役(最常见) 役名 番数 门清限制 说明 立直(リーチ) 1 必须门清 宣告立直 门前清自摸(门清ツモ) 1 必须门清 门清自摸 断幺九(タンヤオ) 1 无 无幺九无字牌 平和(ピンフ) 1 必须门清 全顺子+两面听 一发(イッパツ) 1 必须立直 一巡内和牌 场风/自风刻(役牌) 1 无 风刻子 三元牌(白发中) 1 无 白/发/中刻子 一杯口(イーペーコー) 1 必须门清 同顺两组 幺九牌 三元牌 二、二番役(中级常见) 役名 番数(门清/副露) 说明 七对子(チートイツ) 2(门清限定) 七个对子 对对和(トイトイ) 2 全刻子 三色同顺 2 / 1 三门同样顺子 一气通贯(イッツー) 2 / 1 123+456+789 混全带幺九(チャンタ) 2 / 1 每组含幺九或字 三暗刻 2 三个暗刻 小三元 2 两个三元刻+三元雀头 混老头 2 全幺九牌组成 三、三番以上(高级役) 役名 番数(门清/副露) 说明 混一色(ホンイツ) 3 / 2 一色+字牌 二杯口(リャンペーコー) 3(门清限定) 两个一杯口 清一色(チンイツ) 6 / 5 全一色 四、役满(大役) 这些都是 13 番以上,直接算役满,不加宝牌。 ...

2026-03-31 · 3 min · 541 words · Shearin

Cmemory

malloc、free 使用时可能出现的问题 1. 内存泄漏(Memory Leak) 现象 内存泄漏是指动态分配的内存未被释放,导致程序运行时内存无法被回收,随着时间推移,程序占用的内存会不断增大,最终可能导致内存耗尽或程序崩溃。 分配的内存没有被 free,导致程序占用的内存越来越多。 为什么会发生 malloc/calloc 分配的内存不会自动释放 忘记 free 提前 return 导致 free 没执行 指针被覆盖导致无法 free 解决 每个 malloc 都要有对应的 free 复杂函数中使用“统一出口”模式 工程中可使用内存检测工具(valgrind) 2. 双重释放(Double Free) 现象 同一块内存被 free 两次,导致未定义行为,可能直接崩溃。 为什么会发生 free 后指针仍然指向旧地址 程序逻辑重复释放同一指针 解决 free 后将指针置为 NULL 避免多个指针指向同一块动态内存 3. 悬挂指针(Dangling Pointer) 现象 指针指向的内存已经被释放,但指针仍然被使用。 为什么会发生 free 后继续使用该指针 指向栈上临时变量的指针在函数返回后继续使用 解决 free 后置 NULL 避免返回局部变量地址 4. 内存不足(Out of Memory) 现象 malloc 返回 NULL,但程序没有检查,继续使用该指针导致崩溃。 为什么会发生 系统内存不足 分配过大内存块 内存碎片化导致无法分配连续空间 解决 始终检查 malloc 返回值 对大内存使用 mmap 或内存池 5. 未初始化内存 现象 malloc 分配的内存内容是随机值,使用这些值会导致不可预测行为。 ...

2026-03-31 · 6 min · 1136 words · Shearin

Milkvduo256 Python Lib

添加文件结构 buildroot-2021.05 package python-numpy python-numpy.mk python-numpy.hash Config.in configs milkv-duo256m-sd_musl_riscv64_defconfig BR2_PACKAGE_PYTHON_NUMPY=y

2026-02-17 · 1 min · 10 words · Shearin

Pve Win11

PVE9.1安装windows25H2 材料 windows11 25H2 : windows 官网F12改为移动版,即可获得下载链接 virtio-win链接

2026-02-12 · 1 min · 8 words · Shearin