操作系统复习(八)
2026/7/5 5:27:56 网站建设 项目流程

操作系统复习(八)

存贮管理的方式

操作系统的存储管理(内存管理)方法,核心目的是高效、安全地分配内存,并解决“多道程序如何共存”的问题。其演进主要分为连续分配非连续分配虚拟存储三大类别。

以下是各类方法的详细梳理:

一、连续分配方式(物理地址必须连续)

这是早期的分配方式,要求进程在内存中占据一片连续的空间。

  • 单一连续分配:内存仅分给用户区(一个程序)和系统区。极简,无碎片,但内存利用率极低,仅适用于单任务系统。
  • 固定分区分配:将用户内存划分为若干个固定大小的分区,每个分区装入一个程序。实现简单、开销小,但存在内部碎片(分区内未被用完的空间),且分区数量固定,并发度受限。
  • 动态分区分配(可变分区):根据进程实际需求动态划分内存。无内部碎片,但会产生外部碎片(内存中无法利用的小空闲区)。为了解决碎片,需引入紧凑(拼接)技术,但会消耗大量CPU时间。常用分配算法有:首次适应(FF)、最佳适应(BF,会产生很多微小碎片)、最坏适应(WF)和邻近适应(NF)。

二、非连续分配方式(物理地址可以不连续)

允许进程的各个部分分散装入内存中不相邻的物理块,大幅提高内存利用率,是现代OS的基础。

  • 分页存储管理
    • 核心:将进程逻辑空间和物理内存都划分为等大的页(Page)页框(Frame)。通过页表将逻辑页号映射到物理块号。
    • 特点无外部碎片,仅有少量内部碎片(最后一页未满),地址转换依赖MMU(内存管理单元)。但页表本身可能占用较大内存(需用多级页表或快表TLB加速)。
  • 分段存储管理
    • 核心:按照程序的自然逻辑结构(如代码段、数据段、堆栈段)划分,每段长度可变。地址由段号 + 段内地址组成,通过段表映射。
    • 特点方便共享和保护(按段设置权限),符合编程视角。但物理空间仍是连续的,会产生外部碎片,且段表查找开销较大。
  • 段页式存储管理
    • 核心:结合分段和分页。用户程序先按逻辑分段,每段内部再分页。地址需经过“段表 (\rightarrow) 页表 (\rightarrow) 物理地址”的两次查找。
    • 特点:兼具分段的逻辑性和分页的物理离散性(无外部碎片),但硬件支持复杂,查表开销最大。

三、虚拟存储管理(基于非连续 + 交换技术)

它打破了“程序必须全部装入内存才能运行”的限制,利用局部性原理,仅将当前需要的部分装入内存,实现了“小内存运行大程序”。

  • 请求分页/分段管理:在基本分页/分段基础上增加了缺页/缺段中断功能和页面置换机制。
  • 核心工作流程:当访问的页面不在内存时,系统产生缺页中断,从磁盘调入;若内存已满,则调用页面置换算法换出旧页。
  • 关键算法
    • 最佳置换(OPT):理想标杆,无法实现。
    • 先进先出(FIFO):简单但性能差,存在Belady异常(分配页框多反而缺页多)。
    • 最近最久未使用(LRU):硬件支持,性能较好,但实现开销大。
    • 时钟置换(CLOCK/NRU):折中方案,用访问位和修改位循环扫描,被广泛使用。

总结对比

管理方式地址连续性碎片问题是否支持虚拟主要缺点
连续分配物理连续有内/外部碎片利用率低,紧凑开销大
纯分页物理离散仅有内部碎片否(需全装入)页表大,缺乏逻辑保护
纯分段物理连续(段内)有外部碎片否(需全装入)碎片问题仍存在
段页式物理离散仅有内部碎片否(需全装入)硬件开销最大,两次查表
请求分页/分段物理离散仅有内部碎片是(核心)需处理缺页中断和置换开销

当前主流的通用操作系统(如 Linux、Windows)在底层物理内存管理上采用请求分页,而用户视角的模块管理借鉴分段思想(即段页式逻辑),配合复杂的页面置换算法来达到最佳性能。

RADI

RAID(Redundant 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 10
(1+0)
先镜像(RAID 1),再条带(RAID 0)兼具高性能与高冗余,同时拥有RAID 0的速度和RAID 1的容错成本最高,容量利用率仅50%,盘数必须为偶数4块顶级应用(金融交易、高并发数据库、核心企业级业务)

3. 关键专业术语补充

  • 写惩罚(Write Penalty):RAID 5/6 在写入小数据时,必须先读出旧数据、旧校验,再计算新校验,最后再写入数据+校验。这个过程涉及4次磁盘读写(读旧数据、旧校验、写新数据、新校验),导致写入速度严重下降。
  • 重建风险(Rebuild Risk):RAID 5坏一块盘后,系统需用剩余盘全盘扫描计算并重建。此过程磁盘压力极大,若恰好在重建时另一块盘也坏了(或遇到不可恢复的静默错误),将直接导致整个阵列崩溃。

4. 现状:软件RAID vs 硬件RAID

  • 硬件RAID:独立RAID卡+专用缓存,不占用CPU,性能稳定,带电池保护,是企业服务器标配。
  • 软件RAID:操作系统层面实现(如Linux的mdadm、Windows存储空间)。成本低、灵活,但消耗CPU资源。如今随着CPU性能过剩,软件RAID在云原生和普通服务器中越来越普及。

重要误区纠正

很多人误以为做了RAID就等于“备份”,这是错的。RAID只防“物理坏盘”,不防“逻辑灾难”(如误删文件、病毒加密、软件Bug覆盖数据)。因此,RAID + 定期离线备份才是数据安全的黄金法则。

SPOOLing系统

一、什么是SPOOLing系统?只是打印机的吗?

SPOOLingSimultaneous Peripheral Operation On Line(联机外围设备同时操作)的缩写,通常译为“假脱机”。

它不仅仅是用于打印机的,但打印机是它最经典、最广为人知的应用场景。

  • 核心思想:利用高速磁盘作为中间缓冲池(称为“输入井/输出井”),将一台独占设备(如打印机、读卡器)改造为逻辑上的共享设备。多个进程可以同时“使用”打印机,但实际上它们只是飞速地把数据写入磁盘的“输出井”,然后由系统后台进程(守护进程)按顺序慢慢从磁盘读取并送往打印机。
  • 广泛应用:除了打印假脱机(Print Spooler),还包括电子邮件队列网络数据包缓冲,以及大型机上的输入数据预读取等。

二、哪些程序执行时要访问“缓输出表”?

在SPOOLing系统中,“缓输出表”是一张核心管理表,专门用来记录输出井中各作业的状态、位置和属性(如作业ID、数据在磁盘上的存放地址、输出状态等)。

访问这张表的主要是两类程序

1. 用户进程(或“输出请求生成模块”)
  • 何时访问:当应用程序(如Word、记事本)执行打印操作时。
  • 做什么:进程在系统调用的驱动下,先将打印数据高速写入磁盘的输出井。写入完成后,它需要访问“缓输出表”,在该表中登记或新增一条记录,注明“我的数据在磁盘的X位置,当前状态为‘待输出’”。
  • 作用:完成逻辑上的“输出”动作,释放CPU,进程不再被阻塞。
2. 缓输出程序(即“输出守护进程 / Spooling输出进程”)
  • 何时访问:系统后台周期性运行,或在CPU空闲时触发。
  • 做什么:它定时扫描或查询“缓输出表”,查找表中状态为“待输出”的记录。
  • 后续动作:找到待输出的作业后,它根据表中记录的磁盘地址,从输出井读取数据,并实际发送给物理打印机。打印完成后,它会再次访问缓输出表,将该条目的状态更新为“已完成”,或将该记录从表中删除,释放磁盘空间。

总结
访问“缓输出表”的是发出打印请求的用户进程(用来写表登记作业)和负责物理打印的后台守护进程(用来查表调度作业并更新状态)。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询