一张思维导图理清【操作系统】

进程管理

  • 进程、线程、协程的区别
    • 进程:拥有独立内存空间和系统资源,是资源分配的基本单位(如虚拟内存、文件句柄、信号量等),进程异常(如崩溃)不会影响其他进程,具有稳定性和隔离性。
    • 线程:共享内存空间,是任务调度和执行的基本单位。
    • 协程:由用户控制的轻量级 "线程",切换开销极小。
  • 进程切换和线程切换的区别
    • 进程切换:需切换地址空间、全局变量、文件描述符、内核栈、寄存器等资源;涉及进程五种状态(新建、就绪、运行、阻塞、终止)的切换;进程上下文包含 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 服务器发送静态资源)。
      • 优缺点
        • 优点:完全的零拷贝(数据不经过用户态),性能极高;流程简单,适合流式传输大文件。
        • 缺点:不支持随机访问,只能顺序传输;无法对数据进行用户态的修改(如加密、压缩)。
      • 优缺点
        • 优点:减少数据拷贝,提升读写效率;支持随机访问。
        • 缺点:文件修改后同步到磁盘由操作系统异步处理,存在一致性风险;内存映射大文件时可能导致虚拟内存不足。
相关推荐
2501_916766541 小时前
【Springboot】主配置文件
java·spring boot·后端
太阳风暴1 小时前
Linux CPU频率文件详解:cpuinfo__freq 与 scaling_cur_freq
linux·服务器·cpu
u***09641 小时前
后端服务熔断降级策略,错误率阈值 什么是服务熔断降级
java·开发语言
烤麻辣烫1 小时前
23种设计模式(新手)-3接口隔离原则
java·开发语言·学习·设计模式·intellij-idea
程序猿_极客1 小时前
【2025最新】 Java 入门到实战:数组 + 抽象类 + 接口 + 异常(含案例 + 语法全解析+巩固练习题)
java·开发语言·后端·java基础·java入门到实战
v***43172 小时前
spring.profiles.active和spring.profiles.include的使用及区别说明
java·后端·spring
Yxrrr__2 小时前
Linux系统常用命令
linux·运维·服务器
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [kernel]signal
linux·笔记·学习
栈低来信2 小时前
Linux I2C子系统
linux