操作系统(二)
内存管理
(1)内存管理核心职责
内存管理是操作系统的核心功能,主要负责内存分配与回收(通过 malloc 申请、free 释放)、地址转换(虚拟地址转物理地址)、内存扩充(借助虚拟内存逻辑扩容)、内存映射(文件直接映射到进程空间)、内存优化(调整分配与回收策略)、内存安全(隔离进程内存访问),确保内存资源高效、安全使用。
(2)内存碎片
- 内部碎片:分配给进程的内存大于实际需求,未使用的部分(如分配 128 字节给仅需 65 字节的进程,剩余 63 字节),常见于固定大小分配机制。
- 外部碎片:未分配的连续内存过小,无法满足任何进程的内存需求,常见于分段机制,会降低内存利用率。
(3)内存管理方式
① 连续内存管理
为进程分配连续的内存空间,代表算法为伙伴系统(Linux 采用),将内存按 2 的幂次划分,分配时切分合适大小的块,释放时合并相邻块,可解决外部碎片,但存在内部碎片(分配大小需为 2 的幂次)。
② 非连续内存管理
允许进程内存离散分布,灵活性更高,分为三种方式:
- 段式管理:按逻辑意义(如代码段、数据段)划分大小不等的段,通过段表映射虚拟地址与物理地址,易产生外部碎片。
- 页式管理:将物理内存和虚拟地址空间划分为等长的页(如 4KB),通过页表映射,无外部碎片,仅可能有少量内部碎片,是现代操作系统主流方式。
- 段页式管理:结合段式与页式,先分段再分页,兼顾逻辑划分与内存利用率,但地址转换流程更复杂。
虚拟内存
(1)定义与核心作用
虚拟内存是逻辑存在的内存空间,并非真实物理内存,核心作用包括:隔离进程(进程拥有独立虚拟地址空间,互不干扰)、提升物理内存利用率(仅加载进程当前所需数据)、简化内存管理(程序员无需直接操作物理内存)、支持内存共享(动态库仅加载一份)、提高安全性(控制物理内存访问权限)、提供超大可用内存(物理内存不足时借用磁盘空间)。
(2)关键概念
- 虚拟地址:程序中使用的地址(如指针值),需转换为物理地址才能访问内存。
- 物理地址:物理内存的真实地址,存储在内存地址寄存器中。
- 地址转换:通过 CPU 中的 MMU(内存管理单元)将虚拟地址转为物理地址,核心机制为分段、分页、段页式。
- 虚拟地址空间:单个进程独占的虚拟地址集合;物理地址空间:物理内存的地址范围。
(3)地址转换机制
① 分段机制
虚拟地址由 "段号 + 段内偏移" 组成,通过段表映射段的物理起始地址,起始地址 + 段内偏移即为物理地址。段表存储段长、段类型等信息,易产生外部碎片。
② 分页机制
虚拟地址由 "页号 + 页内偏移" 组成,通过页表映射物理页号,物理页起始地址 + 页内偏移即为物理地址。为解决单级页表占用空间大的问题,引入多级页表(32 位系统二级、64 位系统四级),按需加载页表项,节省空间(时间换空间)。
③ TLB(转址旁路缓存)
为提高地址转换速度,MMU 内置高速缓存,存储虚拟页号与物理页号的映射关系。查询时优先访问 TLB,命中则直接获取物理页号,未命中则查询页表并更新 TLB,减少主存访问次数。
(4)换页机制与页缺失
- 换页机制:物理内存不足时,将部分物理页数据写入磁盘,需用时再读回物理内存,实现内存扩容,本质是时间换空间。
- 页缺失:程序访问的虚拟页未加载到物理内存或未建立映射,分为硬性页缺失(物理内存无对应页,需从磁盘读取)、软性页缺失(物理内存有页但未映射,建立映射即可)、无效页缺失(访问无效物理内存,触发错误)。
(5)页面置换算法
当物理内存无空闲页时,选择淘汰页的规则,核心目标是减少页缺失次数:
- OPT(最佳置换):淘汰未来最长时间不使用的页,理论最优但无法实现(无法预知未来访问)。
- FIFO(先进先出):淘汰最先进入内存的页,简单易实现,但存在 Belady 现象(内存页数增加但缺页率上升),性能较差。
- LRU(最近最久未使用):淘汰最近最久未访问的页,接近 OPT 性能,实际应用广泛(如 InnoDB 改进版 LRU)。
- LFU(最少使用):淘汰一段时间内访问次数最少的页,与 LRU 类似但侧重访问频率。
- Clock(时钟算法):淘汰最近未使用的页,是 LRU 的简化版,实现高效。
局部性原理
程序执行时的内存访问特性,是虚拟内存、缓存等技术的基础:
- 时间局部性:同一数据或指令在一段时间内被反复访问(如循环代码)。
- 空间局部性:访问某数据时,其相邻数据也大概率被访问(如数组遍历)。
- 应用:分页机制中通过缓存(TLB、页缓存)利用时间局部性,通过预取技术利用空间局部性,提升内存访问效率。
文件系统
(1)文件系统核心职责
负责管理存储设备上的文件与目录,核心功能包括存储管理(文件数据存储与空间分配)、文件管理(创建、删除、移动、加密等)、目录管理(创建、删除、重命名等)、访问控制(管理用户对文件的访问权限,保证安全性)。
(2)硬链接与软链接的区别
| 对比维度 | 硬链接 | 软链接(符号链接) |
|---|---|---|
| inode 节点号 | 与源文件相同 | 与源文件不同 |
| 本质 | 源文件的平等副本,共享数据 | 指向源文件路径的快捷方式 |
| 源文件删除影响 | 无影响(需删除所有硬链接才彻底删除文件) | 软链接失效(指向无效路径) |
| 适用对象 | 仅文件,不可跨文件系统 | 文件和目录,可跨文件系统 |
| 创建命令 | ln 源文件 链接文件 | ln -s 源文件 链接文件 |
(3)提升文件系统性能的方式
- 硬件优化:使用 SSD、NVMe 替代机械硬盘,采用 RAID 技术提升磁盘性能。
- 文件系统选型:根据场景选择合适的文件系统(如 ext4、XFS)。
- 缓存机制:利用缓存减少磁盘访问次数,提高缓存命中率。
- 避免磁盘满载:预留一定剩余空间,减少文件碎片。
- 合理分区:按用途分区,减少文件碎片,提升读写效率。
(4)常见磁盘调度算法
磁盘调度算法用于优化磁盘访问顺序,减少寻道时间和延迟时间:
- FCFS(先来先服务):按请求顺序处理,简单但平均寻道时间长,易出现饥饿。
- SSTF(最短寻道时间优先):优先处理距离当前磁头最近的请求,缩短寻道时间,但易饥饿。
- SCAN(电梯算法):磁头沿一个方向扫描,处理途经请求,到达边界后反向,无饥饿。
- C-SCAN(循环扫描):仅沿一个方向扫描,到达边界后返回起点循环,优化 SCAN 的无用移动。
- LOOK:SCAN 改进版,无请求时立即反向,减少无用移动。
- C-LOOK:C-SCAN 改进版,无请求时返回最近有请求的位置,进一步优化。