
第一部分引言——操作系统是什么1.1 操作系统的定义双重角色资源管理者Resource Manager作为底层硬件CPU、内存、磁盘、网卡与上层应用程序之间的中介。负责以合理、公平、高效的方式分配稀缺资源。虚拟机扩展Virtual Machine为用户提供了一种比底层硬件更容易编程的抽象接口。隐藏了中断、I/O端口、内存寻址等复杂细节。内核Kernel的概念操作系统内核是始终运行在计算机上的程序是操作系统的核心。区分用户态User Mode和内核态Kernel Mode的意义——保护指令特权指令只能在内核态执行。1.2 操作系统的演进史1940s无操作系统人工插线独占机器。1950s单道批处理系统Sequential Batch Processing。引入监控程序Monitor作业按顺序自动执行。问题CPU等待I/O时闲置资源利用率低。1960s多道批处理系统Multiprogramming。内存中同时驻留多道程序当一道程序等待I/O时CPU切换到另一道程序。这催生了中断技术和DMA直接内存访问的成熟。1970s分时系统Time-Sharing System。CTSSMultics。追求交互性Response Time。Unix的诞生C语言重写带来的可移植性。1980s个人计算机PC时代。MS-DOS单用户单任务Macintosh图形界面。1990s网络操作系统兴起。Linux的诞生开源运动的里程碑Windows NT现代Windows的微内核混合体基础。2000s至今移动操作系统iOS, Android虚拟化技术云计算以及面向AI/大数据的操作系统演进。第二部分操作系统核心——进程与线程管理这是操作系统的灵魂通常占篇幅的30%。2.1 进程Process定义进程是程序的一次执行实例。它是资源分配的基本单位。进程控制块PCB操作系统中最重要的数据结构。包含进程状态就绪、运行、阻塞、程序计数器PC、CPU寄存器、内存管理信息、记账信息等。进程状态转换图新建 - 就绪 (Ready)就绪 - 运行 (Running) [调度]运行 - 就绪 [时间片用完/优先级降低]运行 - 阻塞 (Waiting/Blocked) [请求I/O]阻塞 - 就绪 [I/O完成]运行 - 终止 (Terminated)2.2 线程Thread定义线程是CPU调度的基本单位。引入线程的目的是为了减少进程切换的开销实现真正的并行计算。对比进程拥有独立的地址空间和资源线程共享所属进程的地址空间和资源。进程切换开销大需要切换页表、刷新TLB线程切换开销小只需保存寄存器和栈。多线程模型用户级线程ULT由用户空间线程库管理如POSIX Pthreads早期模式内核无感知。优点切换快缺点一个线程阻塞会导致整个进程阻塞。内核级线程KLT由内核管理Windows, Linux原生。优点多核并行缺点切换开销相对较大。组合/混合模型将多个用户线程映射到较少的内核线程上如早期的Solaris。2.3 CPU调度Scheduling调度算法的目标吞吐量高、周转时间短、响应时间快、公平性。经典算法详解FCFS (先来先服务)非抢占利于长作业不利于短作业护航效应。SJF (短作业优先)理论上最优平均等待时间但难以预知下一个CPU区间长度。RR (时间片轮转)分时系统的核心。时间片的选择至关重要太长退化为FCFS太短导致上下文切换开销过大。优先级调度可能导致饥饿Starvation需配合老化Aging技术。多级反馈队列MLFQ现代操作系统如Linux CFS的前身的核心。规则将进程按照优先级分到不同队列高优先级队列时间片短低优先级队列时间片长根据行为动态调整优先级I/O密集型提升优先级CPU密集型降低优先级。第三部分并发与同步3.1 并发带来的问题竞争条件Race Condition多个进程并发访问和操作同一数据执行结果取决于访问的特定顺序。临界区Critical Section访问共享资源的代码片段。需满足互斥、前进、有限等待。3.2 经典同步机制互斥锁Mutex最简单的锁机制。信号量SemaphoreDijkstra提出。区分计数信号量与二进制信号量。深入讲解P操作荷兰语Proberen测试和V操作Verhogen增加。经典同步问题生产者-消费者问题有界缓冲区利用信号量解决空位、满位、互斥的关系。读者-写者问题强调读者优先、写者优先的公平性策略。哲学家就餐问题死锁的典型案例。管程Monitor高级同步原语。Javasynchronized关键字的底层原理。封装了共享变量和条件变量。3.3 死锁Deadlock四个必要条件互斥、持有并等待、非抢占、循环等待。死锁处理策略预防Prevention破坏四个必要条件之一例如一次性申请所有资源破坏“持有并等待”。避免Avoidance银行家算法Bankers Algorithm。核心是判断系统是否处于安全状态。检测与恢复Detection Recovery允许进入死锁利用资源分配图检测然后通过进程终止或资源抢占恢复。第四部分内存管理4.1 基础概念地址绑定编译时、加载时、执行时需要硬件支持即MMU。逻辑地址 vs. 物理地址内存管理单元MMU负责映射。4.2 连续内存分配固定分区内部碎片。动态分区外部碎片。压缩Compaction技术开销大。伙伴系统Buddy System介于固定与动态之间的折中方案Linux早期物理页分配。4.3 非连续内存分配分页Paging解决外部碎片。页表核心数据结构。多级页表减少页表占用的连续内存空间例如Linux的四级页表PGD, PUD, PMD, PTE。TLB快表/旁路转换缓冲硬件缓存CPU寻址的关键加速手段。理解TLB未命中Miss的开销。分段Segmentation从程序员视角出发将代码、数据、堆、栈分开。现代CPUx86-64通常采用“段页式”结合。4.4 虚拟内存Virtual Memory核心思想将主存视为磁盘交换分区的缓存。允许程序拥有超过物理内存大小的地址空间。请求分页Demand Paging只有在需要时才将页面加载到内存。页面置换算法FIFO简单但存在Belady异常分配物理块增多缺页率反而上升。LRU (最近最少使用)性能最好但硬件支持成本高通常用近似算法实现。Clock算法NRU最近未使用实际操作系统如Linux中广泛使用的近似LRU算法。利用访问位和修改位进行轮转扫描。颠簸Thrashing当物理内存严重不足时系统花费大量时间在页面换入换出上导致CPU利用率骤降。操作系统需通过工作集模型Working Set来防止颠簸。第五部分文件系统5.1 文件系统接口文件结构流式文件Unix/Linux与记录式文件大型机。目录结构单级、双级、树状结构、无环图结构硬链接与软链接的区别。5.2 文件系统实现文件分配方式连续分配顺序访问快但有外部碎片。链接分配解决碎片但随机访问性能差FAT文件系统。索引分配Unix的inode索引节点结构。inode中直接指针、间接指针、双重间接指针、三重间接指针的寻址机制详解。空闲空间管理位图BitmapLinux常用、链表、成组链接法。5.3 现代文件系统案例ext4 (Fourth Extended Filesystem)Linux主流。引入Extents区段替代块映射提升大文件性能延迟分配Delayed Allocation减少碎片。F2FS (Flash-Friendly File System)针对固态硬盘SSD设计考虑垃圾回收GC和磨损均衡Wear Leveling。日志Journaling防止系统崩溃导致元数据不一致。ext3/ext4的三种模式Journal全日志、Ordered顺序、Writeback回写。第六部分输入输出I/O管理6.1 I/O硬件原理轮询PollingCPU忙等待浪费资源。中断Interrupt硬件通知CPU。中断向量表中断处理程序ISR。但高频中断会导致CPU上下文切换开销大。DMA直接内存访问解放CPU让DMA控制器直接与内存交换数据仅在传输开始和结束时中断CPU。6.2 I/O软件层次用户层I/O库printf,scanf标准库缓冲。设备独立性软件执行所有设备通用的I/O功能如命名、保护、缓冲、分配。设备驱动程序Device Driver操作系统与硬件交互的唯一接口。负责将通用请求转换为设备特定的指令。中断处理程序在中断发生时进行上下文保存、调用中断服务例程。6.3 存储架构完整的数据路径CPU寄存器 - 高速缓存 (L1/L2/L3) - 主存 (DRAM) - 固态硬盘 (SSD) - 机械硬盘 (HDD) - 磁带/云存储。RAID技术独立磁盘冗余阵列数据可用性与性能的权衡。RAID 0条带性能高无冗余RAID 1镜像冗余高RAID 5奇偶校验性价比RAID 10条带镜像。第七部分操作系统的高级与前沿话题7.1 虚拟化VirtualizationType 1 与 Type 2 虚拟化VMM虚拟机监视器如KVM、VMware ESXi。硬件辅助虚拟化Intel VT-x 和 AMD-V。解决了敏感指令在虚拟机中执行的捕获问题。半虚拟化Para-virtualizationXen修改Guest OS内核通过Hypercall替代敏感指令提升性能。7.2 容器化Containerization操作系统级虚拟化如Docker, LXC。核心隔离技术Namespace实现资源隔离PID, Network, Mount, User等让进程以为自己是唯一在运行的。Cgroups实现资源限制CPU、内存、磁盘I/O配额。7.3 微内核Microkernel vs. 宏内核Monolithic宏内核Linux, Windows性能高但内核庞大驱动崩溃可能导致系统崩溃。微内核QNX, L4, seL4只将最核心的IPC、地址空间管理、调度放在内核态文件系统、驱动、网络协议栈在用户态。安全性极高用于自动驾驶、航天但IPC开销较大。7.4 实时操作系统RTOS硬实时 vs. 软实时必须满足截止时间。调度算法速率单调调度RMS、最早截止时间优先EDF。应用场景嵌入式、工业控制、医疗设备、汽车ECU。7.5 安全与可信计算缓冲区溢出攻击与防御NX位禁止执行、ASLR地址空间布局随机化、Stack Canary栈保护。可信执行环境TEEIntel SGX软件保护扩展ARM TrustZone。在硬件层面隔离敏感数据和代码。第八部分主流操作系统实例分析8.1 Linux设计哲学一切皆文件。开源协作。内核源码结构arch架构相关, mm内存管理, fs文件系统, kernel核心调度, drivers。CFS完全公平调度器基于红黑树不再依赖固定的时间片而是基于虚拟运行时vruntime。8.2 Windows NT 架构内核设计混合内核Hybrid Kernel。强调二进制兼容性Windows on Windows, WOW64。注册表集中配置数据库。对象管理器统一管理内核对象进程、文件、事件提供统一的引用计数和安全性检查。8.3 Android基于Linux内核但针对移动设备做了大量修改如低内存杀手LowMemoryKiller。Dalvik/ART 虚拟机应用运行在Java/Kotlin上通过Binder IPC进行进程间通信Android独特的跨进程通信机制。第九部分总结与展望操作系统的发展悖论随着硬件性能提升摩尔定律放缓操作系统的抽象层次越来越高从汇编到高级语言从物理机到容器。面向AI的操作系统未来的操作系统可能需要原生支持神经网络指令集NPU调度管理异构计算资源CPUGPUNPUDPU并利用AI进行自优化调度预测进程行为预取数据。云原生与Serverless操作系统正逐渐被“解构”应用不再直接感知传统OS而是通过微服务、Sidecar代理如Service Mesh在云基础设施上运行。