操作系统复习八存贮管理的方式操作系统的存储管理内存管理方法核心目的是高效、安全地分配内存并解决“多道程序如何共存”的问题。其演进主要分为连续分配、非连续分配和虚拟存储三大类别。以下是各类方法的详细梳理一、连续分配方式物理地址必须连续这是早期的分配方式要求进程在内存中占据一片连续的空间。单一连续分配内存仅分给用户区一个程序和系统区。极简无碎片但内存利用率极低仅适用于单任务系统。固定分区分配将用户内存划分为若干个固定大小的分区每个分区装入一个程序。实现简单、开销小但存在内部碎片分区内未被用完的空间且分区数量固定并发度受限。动态分区分配可变分区根据进程实际需求动态划分内存。无内部碎片但会产生外部碎片内存中无法利用的小空闲区。为了解决碎片需引入紧凑拼接技术但会消耗大量CPU时间。常用分配算法有首次适应FF、最佳适应BF会产生很多微小碎片、最坏适应WF和邻近适应NF。二、非连续分配方式物理地址可以不连续允许进程的各个部分分散装入内存中不相邻的物理块大幅提高内存利用率是现代OS的基础。分页存储管理核心将进程逻辑空间和物理内存都划分为等大的页Page和页框Frame。通过页表将逻辑页号映射到物理块号。特点无外部碎片仅有少量内部碎片最后一页未满地址转换依赖MMU内存管理单元。但页表本身可能占用较大内存需用多级页表或快表TLB加速。分段存储管理核心按照程序的自然逻辑结构如代码段、数据段、堆栈段划分每段长度可变。地址由段号 段内地址组成通过段表映射。特点方便共享和保护按段设置权限符合编程视角。但物理空间仍是连续的会产生外部碎片且段表查找开销较大。段页式存储管理核心结合分段和分页。用户程序先按逻辑分段每段内部再分页。地址需经过“段表 (\rightarrow) 页表 (\rightarrow) 物理地址”的两次查找。特点兼具分段的逻辑性和分页的物理离散性无外部碎片但硬件支持复杂查表开销最大。三、虚拟存储管理基于非连续 交换技术它打破了“程序必须全部装入内存才能运行”的限制利用局部性原理仅将当前需要的部分装入内存实现了“小内存运行大程序”。请求分页/分段管理在基本分页/分段基础上增加了缺页/缺段中断功能和页面置换机制。核心工作流程当访问的页面不在内存时系统产生缺页中断从磁盘调入若内存已满则调用页面置换算法换出旧页。关键算法最佳置换OPT理想标杆无法实现。先进先出FIFO简单但性能差存在Belady异常分配页框多反而缺页多。最近最久未使用LRU硬件支持性能较好但实现开销大。时钟置换CLOCK/NRU折中方案用访问位和修改位循环扫描被广泛使用。总结对比管理方式地址连续性碎片问题是否支持虚拟主要缺点连续分配物理连续有内/外部碎片否利用率低紧凑开销大纯分页物理离散仅有内部碎片否需全装入页表大缺乏逻辑保护纯分段物理连续段内有外部碎片否需全装入碎片问题仍存在段页式物理离散仅有内部碎片否需全装入硬件开销最大两次查表请求分页/分段物理离散仅有内部碎片是核心需处理缺页中断和置换开销当前主流的通用操作系统如 Linux、Windows在底层物理内存管理上采用请求分页而用户视角的模块管理借鉴分段思想即段页式逻辑配合复杂的页面置换算法来达到最佳性能。RADIRAIDRedundant Array of Independent Disks独立磁盘冗余阵列的核心思想是将多个独立的物理磁盘组合成一个逻辑磁盘从而在性能、容量和可靠性三者之间取得不同的平衡。它的本质是用“空间换安全”或“数量换速度”。以下是核心级别解析1. 基础三要素条带化Striping将数据切割成小块分散写入多块磁盘。提升速度多盘并行读写但无冗余。镜像Mirroring数据在写入主盘的同时完整复制一份到备份盘。提升可靠性坏一块盘没事但容量利用率仅50%。校验Parity利用异或XOR算法将校验码写入专用盘或分散在各盘中。当某块盘损坏时可通过其他盘和校验码逆向计算恢复数据。兼顾容量和可靠性但写入速度较慢。2. 常用RAID级别详解级别实现方式优点缺点最低盘数核心用途RAID 0条带化数据均匀切分并同时读写读写速度最快理论提升N倍容量100%利用无任何容错坏一块盘数据全毁2块追求极致性能的非关键数据如游戏盘、视频剪辑缓存RAID 1镜像主盘和镜像盘完全一致读取速度提升容错性极强允许坏N-1块盘成本极高容量利用率仅50%写入速度无提升2块系统盘或对数据安全性要求极高的关键配置RAID 5条带化 分布式校验校验码轮流存储在各盘中兼顾读写性能、容量与安全。容量 (N-1)盘允许坏1块盘坏盘后重建时间极长大数据量下很危险写入有“写惩罚”3块最主流的通用业务存储如文件服务器、Web应用RAID 6条带化 双校验存储两份不同的校验码极高容错允许同时坏2块盘写入速度慢双校验计算量大空间利用率更低N-2盘4块对数据安全极其苛刻的场景如银行日志、数据库归档RAID 1010先镜像RAID 1再条带RAID 0兼具高性能与高冗余同时拥有RAID 0的速度和RAID 1的容错成本最高容量利用率仅50%盘数必须为偶数4块顶级应用金融交易、高并发数据库、核心企业级业务3. 关键专业术语补充写惩罚Write PenaltyRAID 5/6 在写入小数据时必须先读出旧数据、旧校验再计算新校验最后再写入数据校验。这个过程涉及4次磁盘读写读旧数据、旧校验、写新数据、新校验导致写入速度严重下降。重建风险Rebuild RiskRAID 5坏一块盘后系统需用剩余盘全盘扫描计算并重建。此过程磁盘压力极大若恰好在重建时另一块盘也坏了或遇到不可恢复的静默错误将直接导致整个阵列崩溃。4. 现状软件RAID vs 硬件RAID硬件RAID独立RAID卡专用缓存不占用CPU性能稳定带电池保护是企业服务器标配。软件RAID操作系统层面实现如Linux的mdadm、Windows存储空间。成本低、灵活但消耗CPU资源。如今随着CPU性能过剩软件RAID在云原生和普通服务器中越来越普及。重要误区纠正很多人误以为做了RAID就等于“备份”这是错的。RAID只防“物理坏盘”不防“逻辑灾难”如误删文件、病毒加密、软件Bug覆盖数据。因此RAID 定期离线备份才是数据安全的黄金法则。SPOOLing系统一、什么是SPOOLing系统只是打印机的吗SPOOLing是Simultaneous Peripheral Operation On Line联机外围设备同时操作的缩写通常译为“假脱机”。它不仅仅是用于打印机的但打印机是它最经典、最广为人知的应用场景。核心思想利用高速磁盘作为中间缓冲池称为“输入井/输出井”将一台独占设备如打印机、读卡器改造为逻辑上的共享设备。多个进程可以同时“使用”打印机但实际上它们只是飞速地把数据写入磁盘的“输出井”然后由系统后台进程守护进程按顺序慢慢从磁盘读取并送往打印机。广泛应用除了打印假脱机Print Spooler还包括电子邮件队列、网络数据包缓冲以及大型机上的输入数据预读取等。二、哪些程序执行时要访问“缓输出表”在SPOOLing系统中“缓输出表”是一张核心管理表专门用来记录输出井中各作业的状态、位置和属性如作业ID、数据在磁盘上的存放地址、输出状态等。访问这张表的主要是两类程序1. 用户进程或“输出请求生成模块”何时访问当应用程序如Word、记事本执行打印操作时。做什么进程在系统调用的驱动下先将打印数据高速写入磁盘的输出井。写入完成后它需要访问“缓输出表”在该表中登记或新增一条记录注明“我的数据在磁盘的X位置当前状态为‘待输出’”。作用完成逻辑上的“输出”动作释放CPU进程不再被阻塞。2. 缓输出程序即“输出守护进程 / Spooling输出进程”何时访问系统后台周期性运行或在CPU空闲时触发。做什么它定时扫描或查询“缓输出表”查找表中状态为“待输出”的记录。后续动作找到待输出的作业后它根据表中记录的磁盘地址从输出井读取数据并实际发送给物理打印机。打印完成后它会再次访问缓输出表将该条目的状态更新为“已完成”或将该记录从表中删除释放磁盘空间。总结访问“缓输出表”的是发出打印请求的用户进程用来写表登记作业和负责物理打印的后台守护进程用来查表调度作业并更新状态。