
进程管理
- 进程、线程、协程的区别
- 进程:拥有独立内存空间和系统资源,是资源分配的基本单位(如虚拟内存、文件句柄、信号量等),进程异常(如崩溃)不会影响其他进程,具有稳定性和隔离性。
- 线程:共享内存空间,是任务调度和执行的基本单位。
- 协程:由用户控制的轻量级 "线程",切换开销极小。
- 进程切换和线程切换的区别
- 进程切换:需切换地址空间、全局变量、文件描述符、内核栈、寄存器等资源;涉及进程五种状态(新建、就绪、运行、阻塞、终止)的切换;进程上下文包含 CPU 上下文(CPU 寄存器、程序计数器)。
- 线程切换:切换线程栈、寄存器、程序计数器;上下文保存在线程的控制块 TCB(含寄存器状态、程序计数器、堆栈指针),切换时先保存到调度器 Scheduler,再恢复并切换到新线程。
- 进程 / 线程间通信方式
- 进程间:管道(匿名管道、命名管道,数据先进先出且缓存在内核中)、信号量、消息队列、socket、共享内存、信号。
- 线程间:互斥锁、条件变量、信号量、自旋锁、读写锁。
- 进程调度方法:(思维导图未展开具体算法,常见的有先来先服务、短作业优先、优先级调度、轮转调度等)
锁
- 预防死锁:破坏死锁的四个必要条件(不可剥夺条件、请求和保持条件、循环等待条件)。
- 避免死锁:银行家算法(通过预先判断资源分配是否会导致系统进入不安全状态,从而避免死锁)。
内存管理
- 操作系统内存管理:涉及虚拟内存与物理内存(虚拟地址通过页表转换为物理地址)、页表 / 段表(用于地址映射)、缺页中断处理(当访问的页不在内存时触发,进行页面置换)、内存管理单元 MMU(硬件单元,负责虚拟地址到物理地址的转换)。
- 程序的内存布局 (自下而上):
- 代码段:存储二进制可执行代码。
- 数据段:存储已初始化的静态变量和全局变量。
- BSS 段:存储未初始化的静态变量和全局变量。
- 堆:动态分配内存的区域,由程序员手动申请和释放(或由 GC 自动管理)。
- 文件映射:用于动态库、共享内存等场景。
- 栈:存储局部变量、函数调用栈帧等,由系统自动管理。
- 栈顶空间:栈的顶端区域。
- fork () 复制内容:初始时复制主进程的页表(只读),父子进程对内存操作时采用写时复制(写保护中断时复制物理内存,重新设置映射关系)。
- malloc () 内存分配:分配内存小于 128kb 时通过 brk ()(堆顶上移),大于 128kb 时通过 mmap ()(私有匿名映射,在文件映射区分配内存)。
- 操作系统内存不足时的行为 :
- 后台内存回收(异步)、直接内存回收(同步)、OOMKiller(内存不足时杀死进程释放内存)。
- 两类可回收内存:文件页(内核缓存的磁盘数据 Buffer、文件数据 Cache;干净页直接释放,脏页先写入磁盘再释放)、匿名页。
- 页面置换算法:LRU 算法(维护 active_list 和 inactive_list 两个双向链表,管理页面的活跃状态)。
中断
- 中断分类 :
- 外部中断:不可屏蔽中断、可屏蔽中断。
- 内部终端:陷阱、故障、终止。
- 中断流程:外部设备发送中断信号→处理器接收中断信号,保存执行现场,根据中断向量表找到程序入口→执行中断处理。
网络 IO
-
IO 模型:阻塞 IO、非阻塞 IO、IO 复用、信号驱动 IO 模型、异步 IO。
-
服务器处理并发的方式:单线程 web 服务器、多进程 / 线程 web 服务器、IO 多路复用、多路复用多线程。
-
IO 多路复用 :
- select:两次遍历两次拷贝(将已连接的 Socket 集合放到文件描述符集合,拷贝到内核;遍历集合检查事件,再拷贝回用户态处理)。
- poll:两次遍历两次拷贝(与 select 类似,改进了文件描述符存储方式)。
- epoll:
- 流程:把需要监控的 socket 放入内核中的红黑树;事件驱动,当 socket 事件发生,通过回调函数将其加入就绪事件列表。
- 事件触发:边缘触发、水平触发。
-
高性能组件的底层支撑:redis、nginx、netty 等依赖 Reactor 模式(事件驱动的并发模型,高效处理 IO 事件)实现高性能。
-
零拷贝 :
零拷贝是一种减少数据在用户态和内核态之间拷贝次数的技术,核心是让数据直接在内核空间内流转,避免用户态与内核态之间的多次复制,从而提升 IO 性能。
-
mmap(内存映射)
- 原理:将磁盘文件的一段区域直接映射到进程的虚拟内存中,进程可像操作内存一样操作文件(读 / 写)。数据在用户态和内核态之间无需拷贝,修改内存后由操作系统负责同步到磁盘。
- 适用场景:大文件读写、进程间共享内存(如多进程共享配置文件)
-
sendfile
- 原理:让数据直接在内核的读缓冲区(如磁盘文件的内核缓存)和网络发送缓冲区之间传递,无需经过用户态。例如,Web 服务器发送静态文件时,数据从磁盘文件的内核缓存直接拷贝到网卡的发送缓冲区,避免了用户态的参与。
- 适用场景:大文件的网络传输(如 Web 服务器发送静态资源)。
- 优缺点 :
- 优点:完全的零拷贝(数据不经过用户态),性能极高;流程简单,适合流式传输大文件。
- 缺点:不支持随机访问,只能顺序传输;无法对数据进行用户态的修改(如加密、压缩)。
- 优缺点 :
- 优点:减少数据拷贝,提升读写效率;支持随机访问。
- 缺点:文件修改后同步到磁盘由操作系统异步处理,存在一致性风险;内存映射大文件时可能导致虚拟内存不足。
-