简答题
1.为什么分页技术不能实现共享,而分段技术可以?
答案: 分页技术对程序员透明且按物理固定大小切分,极易截断逻辑上完整的代码或数据,导致难以安全隔离和共享;而分段技术按程序的逻辑结构(如函数、数组)划分,具有完整的逻辑意义,因此非常适合实现共享。
详细解析:
- Concept Check (概念核对): 分页(Paging)是将内存和程序划分为固定大小的“页”,以消除外部碎片;分段(Segmentation)则是根据程序的逻辑结构(如代码段、数据段、堆栈段)将程序划分为大小不一的“段”。
- The 'Why' (原理解析): 根据操作系统的内存管理理论,分页是面向物理系统、对程序员透明的。一个页面可能前半部分属于函数A的代码,后半部分属于函数B的数据。如果另一个进程想要共享函数A,操作系统如果把这整个页共享出去,就会被迫把不该共享的函数B的数据也暴露给对方,这在安全和逻辑上是不可行的。 相反,分段是面向程序员可见的逻辑组织。一个段可能是一个完整的数学库函数,或者一个共享数组。因为段拥有完整的逻辑意义和独立的保护属性,操作系统只需在两个进程的段表中,将某个段表项指向同一个物理内存基址,就能干净利落地实现代码或数据的共享。
- Common Pitfalls (易错点): 很多学生误以为分页“绝对不能”物理共享。实际上,分页底层是可以物理共享页面的(例如写时复制机制),但这题探讨的是逻辑实体的共享能力。分段在原生设计上就是为了支持逻辑共享和保护而生的。
2.引入缓冲的目的。
答案: 引入缓冲的主要目的是为了缓和CPU与I/O设备之间速度极度不匹配的矛盾,从而提高CPU和I/O设备的并行工作程度(利用率)。
详细解析:
- Concept Check (概念核对): 缓冲(Buffering)是在内存中开辟的一块临时存储区,用于在数据到达最终目的地之前暂存数据。
- The 'Why' (原理解析): 计算机系统中,CPU的运算速度通常比外部I/O设备(如磁盘、打印机)快好几个数量级。如果没有缓冲,CPU在发起I/O请求后,要么必须“停机”苦苦等待慢速设备完成传输,要么就是设备跟不上CPU吐出数据的速度。 引入缓冲后(例如双重缓冲 Double Buffering),设备可以将数据先慢吞吞地填入缓冲区,填满后CPU可以瞬间将其取走处理;或者CPU将数据瞬间抛入缓冲区后继续做其他事情,设备在后台慢慢读取。这极大地掩盖了速度差异,减少了CPU的中断次数,并实现了CPU计算与I/O传输的高度重叠(并行)。
- Common Pitfalls (易错点): 容易将“缓冲(Buffering)”和“缓存(Caching)”混淆。缓冲是为了平滑速度差异、吸收突发数据流;缓存是为了保留热点数据以加速未来的重复访问。
3.什么是文件的物理结构?有哪几种组织方式?
答案: 文件的物理结构(也称物理组织形式)是指文件数据在物理存储介质(如磁盘)上的实际排列和分配方式。主要有三种组织方式:连续分配(顺序结构)、链接分配(链接结构)和索引分配(索引结构)。
详细解析:
- Concept Check (概念核对): 物理结构决定了操作系统的文件系统如何将逻辑上的文件字节流映射到磁盘上大小固定的“物理块”中。
- The 'Why' (原理解析):
- 连续分配 (Contiguous Allocation): 文件在磁盘上占据一整块连续的物理块。优点是读取极快(磁头只需移动一次),缺点是容易产生严重的外部碎片,且文件难以动态扩容。
- 链接分配 (Chained/Linked Allocation): 文件按块存储,每一块包含一个指向下一块的指针。优点是彻底消除了外部碎片,便于扩容;缺点是只能顺序访问,不支持高效的随机查找,且指针占用一定空间。
- 索引分配 (Indexed Allocation): 系统为每个文件分配一个特殊的“索引块”,里面存放了该文件所有数据块的物理地址指针。这种方式既支持高效的随机访问,又允许文件动态增长,是现代操作系统(如UNIX的inode)采用的主流结构。
- Common Pitfalls (易错点): 极易将“物理结构”与“逻辑结构”搞混。物理结构是磁盘视角的分配策略(连续、链接、索引);逻辑结构是用户视角的格式(流式、记录式)。
4.分析操作系统特征。
答案: 现代操作系统具有四个基本特征:并发(Concurrency)、共享(Sharing)、虚拟(Virtualization)和异步性(Asynchrony)。其中并发和共享是最基础的两个特征,且互为存在条件。
详细解析:
- Concept Check (概念核对): 操作系统特征描绘了多道程序系统在宏观运行时的根本表现。
- The 'Why' (原理解析):
- 并发: 指两个或多个事件在同一时间间隔内发生。操作系统通过CPU调度,让多个程序在内存中“走走停停”交替执行,宏观上给用户“同时运行”的假象。
- 共享: 系统中的软硬件资源可供内存中多个并发执行的进程共同使用。分为“互斥共享”(如打印机)和“同时访问”(如可重入代码)。并发和共享互为条件,无并发则无共享的必要,无共享机制则并发会崩溃。
- 虚拟: 将物理实体(如单核CPU、有限内存)通过时分复用或空分复用技术,映射为多个逻辑上的对应物(如虚拟处理器、虚拟内存)。
- 异步性: 由于资源竞争和进程同步,并发进程的执行速度和暂停时机是不可预知的,具有走走停停的异步特征。
- Common Pitfalls (易错点): 在理解时,常把“并发(Concurrency)”和“并行(Parallelism)”等同。并发是单核上的“时分复用”幻觉,并行是多核上的“物理同时”执行。
5.试述临界区访问遵循的原则。
答案: 临界区访问必须遵循四大原则:空闲让进、忙则等待(互斥)、有限等待(防止死锁和饥饿)、让权等待。
详细解析:
- Concept Check (概念核对): 临界区(Critical Section)是指进程代码中访问临界资源(排他性共享资源)的那段代码。
- The 'Why' (原理解析): 为了保证多进程环境下的数据一致性与系统活跃度,必须满足:
- 空闲让进: 如果临界区没有任何进程在执行,应允许一个请求进入的进程立即进入。
- 忙则等待 (Mutual Exclusion): 如果已经有进程在临界区内,其他试图进入的进程必须阻塞等待,保证互斥。
- 有限等待: 任何请求进入临界区的进程,必须能在有限的时间内获得许可,绝对不能出现无限期的延迟(即防止死锁和饥饿现象)。
- 让权等待: (硬件实现有时无法保证,但在OS高级原语中要求)如果进程因为“忙则等待”无法进入临界区,它应当立即释放CPU(放弃处理器调度权),而不是在CPU上进行毫无意义的“忙等待(Busy Waiting)”。
- Common Pitfalls (易错点): 学生常把“临界资源”和“临界区”混淆。临界区是代码段,不是硬件或变量本身。访问原则是用来约束这些代码段执行逻辑的。
6.什么是文件的逻辑结构?有哪几种组织方式?
答案: 文件的逻辑结构是指从用户和应用程序的角度所观察到的文件的内部组织形式。主要分为两大类:无结构文件(流式文件)和有结构文件(记录式文件),其中有结构文件又包含顺序文件、索引顺序文件、索引文件和直接(哈希)文件。
详细解析:
- Concept Check (概念核对): 逻辑结构完全不关心文件在磁盘上如何存放,它只关心数据在业务逻辑上是如何定界和关联的。
- The 'Why' (原理解析):
- 无结构文件(流式文件): 最基本的结构,操作系统将其视为一连串无格式的字符或字节流(Stream of bytes)。比如UNIX中的TXT文本文件、可执行文件。
- 有结构文件(记录式文件): 文件由一条条相关联的数据记录(Record)组成(类似于数据库的一张表)。
- 顺序文件 (Sequential File): 记录按某种顺序(如按到达时间或关键字)线性排列。
- 索引顺序文件 (Indexed Sequential File): 顺序排列的同时,加入了一个轻量级索引表,以加速定位。
- 索引文件 (Indexed File): 为文件中的记录建立完整的索引表,通过索引指针进行随机访问。
- 直接或哈希文件 (Direct/Hashed File): 通过哈希函数直接由关键字计算出记录的逻辑地址,查询速度极快。
- Common Pitfalls (易错点): 再次强调,此题与第3题是考点双子星,回答时切忌将逻辑结构的“索引文件”和物理结构的“索引分配”混为一谈。
7.试述设备管理的基本功能。
答案: 设备管理的基本功能是隐藏物理设备的复杂细节,为用户提供一个统一、简单、独立于设备的接口,并高效地分配和管理系统中的I/O设备。
详细解析:
- Concept Check (概念核对): 设备管理(I/O管理)是OS内核的一个核心子系统,负责介于CPU/内存和外设之间的数据传输。
- The 'Why' (原理解析): 根据操作系统的I/O管理目标(效率和通用性),其核心功能包括:
- 设备分配与回收: 根据设备类型(独占、共享或虚拟)和调度算法,公平且安全地将设备分配给请求的进程。
- 缓冲区管理 (Buffering): 管理内存中的I/O缓冲区,平滑CPU与外设的速度差,缓解总线瓶颈。
- 设备独立性 (Device Independence): 通过逻辑设备表(LUT),使得用户程序可以使用“逻辑设备名”请求I/O,操作系统将其映射为实际的物理设备驱动。
- 中断处理: 捕获并处理由设备发出的I/O完成或错误中断,唤醒相关的阻塞进程。
- Common Pitfalls (易错点): 容易忽略“设备独立性”。实际上,屏蔽硬件差异是OS设备管理最具价值的功能之一。
8.分区存储管理技术有哪些分配策略?
答案: 动态分区存储管理主要有四种放置(分配)策略算法:首次适应算法(First-fit)、下次适应算法(Next-fit)、最佳适应算法(Best-fit)和最坏适应算法(Worst-fit)。
详细解析:
- Concept Check (概念核对): 分区存储管理是指系统在进程调入时,从连续的空闲内存区域中切出一块合适大小的内存分配给它。
- The 'Why' (原理解析):
- 首次适应 (First-fit): 按地址递增扫描空闲链表,找到第一个足够大的空闲区即分配。速度快,保留了高地址大块,但低地址易产生碎片。
- 下次适应 (Next-fit): 从上次分配的位置继续向后扫描。分配均匀,但易破坏尾部的大空闲区。
- 最佳适应 (Best-fit): 扫描全表,找到满足要求且最小的空闲区。看似最节省,但每次切分后剩下的“细小碎片(外部碎片)”极多,极其难以再利用。
- 最坏适应 (Worst-fit): 扫描全表,选择最大的空闲区进行分配。切分后剩下的空间依然很大,碎片不易产生,但缺乏对大作业的预留能力。
- Common Pitfalls (易错点): 名字具有迷惑性。最佳适应(Best-fit)在实际运行中产生的外部碎片问题往往是“最糟”的;它反而不如简单的首次适应算法效率高。
9.什么是文件和文件系统?
答案:文件是操作系统提供的一种逻辑抽象,是由用户命名的、具有一定逻辑结构的相似记录或数据的集合;文件系统则是操作系统中负责管理、组织和存取文件的所有软件模块、数据结构及外存空间的统称。
详细解析:
- Concept Check (概念核对): 这是操作系统为外存(磁盘、磁带)提供的一层高级抽象模型。
- The 'Why' (原理解析): 裸磁盘是一大堆无序的磁道和扇区。 文件的出现,使得应用程序和人类用户可以通过直观的“名称”和逻辑边界来持久化保存数据,而不需要记忆数据存放在磁盘的哪一号柱面上。 文件系统 (File System) 不仅包含了存储在磁盘上的文件本身,更重要的是包含了维护“名称到物理地址映射”的目录结构,管理磁盘空闲块的分配表,以及提供打开、读写保护的软件驱动代码。
- Common Pitfalls (易错点): 认为文件系统就是磁盘上的数据。文件系统实际上是“软件+数据结构+数据实体”的三位一体。
10.为什么要采用虚拟存储器管理,实现虚拟存储器的条件是什么?
答案:原因: 为了突破物理内存大小的限制,允许执行比物理内存更大的程序;同时能够让更多的进程并发常驻内存,极大提高CPU的多道程序度与系统吞吐量。 实现条件: 硬件必须提供分页/分段机构、地址转换机制(MMU)和缺页中断机构;软件必须提供页/段置换算法和外存交换空间(Swap space)。
详细解析:
- Concept Check (概念核对): 虚拟存储器(Virtual Memory)允许程序仅将当前所需的极少部分页面装入内存即可运行,遇到不在内存的页面时再动态调入。
- The 'Why' (原理解析):为什么要用? 在没有虚拟内存时,程序必须“全量”装入内存才能运行。一旦程序比内存大,或者想跑多个大程序,系统就会崩溃。采用虚拟内存后,由于程序具有局部性原理 (Locality),OS只需装入当前正在用的几个页面,这就在逻辑上给用户提供了一个极其庞大的“虚拟空间”。 需要什么条件?
- 底层支持非连续分配的分页或分段硬件。
- 当CPU访问到不在内存的页面时,硬件必须能触发缺页中断 (Page Fault)。
- 操作系统必须包含负责换入换出的软件管理机制,以决定何时调入、淘汰谁(置换策略)。
- Common Pitfalls (易错点): 虚拟内存实际上会因为页面换入换出带来巨大的I/O开销,它并没有提升单体程序的“执行速度”,而是提升了资源利用率和系统并发能力。
11.内存利用率不高主要表现在哪些方面?可通过哪些途径来提高内存利用率?
答案:表现: 内存利用率不高主要表现在产生大量的“内部碎片(分配给进程但未被使用的空间)”和“外部碎片(散落在内存中太小而无法分配的空闲块)”。 途径: 可以采用内存紧凑(Compaction)技术、采用允许非连续分配的分页或分段技术、以及引入虚拟内存技术来大幅提高内存利用率。
详细解析:
- Concept Check (概念核对): 碎片(Fragmentation)是吃掉内存容量的最大元凶。
- The 'Why' (原理解析):
- 内部碎片: 固定分区或分页系统中,分配给作业的块比作业实际需要的大,多出来的那部分无法给别人用。
- 外部碎片: 动态分区系统中,作业频繁进出,留下许多不连续的小洞,加起来虽然很大,但无法分配给一个大作业。
- 提升途径:
- 对于动态分区,通过紧凑 (Compaction) 将作业向一端移动,把小洞拼成大洞。
- 彻底放弃连续分配,改用分页系统。将程序打散存放到物理帧中,从根本上消灭外部碎片。
- 引入虚拟内存技术。没用到的代码连内存都不进,直接呆在磁盘上,实现内存的极致利用。
- Common Pitfalls (易错点): “紧凑”技术虽然能拼合碎片,但因为要大量移动数据,消耗极高的CPU时间,在现代OS中已被硬件支持的分页技术彻底取代。
12.什么是高级调度、中级调度和低级调度?
答案: 这是操作系统针对不同层级资源进行分配的三级调度模型:
- 高级调度(长程调度): 决定将哪些外存后备队列中的作业调入内存,并为它们创建进程。
- 中级调度(中程调度): 决定将哪些内存中暂时不能运行的进程挂起(换出)到磁盘,或将磁盘上具备运行条件的就绪挂起进程换入内存,以调节系统并发度和内存压力。
- 低级调度(短程/进程调度): 决定将CPU实际分配给内存就绪队列中的哪一个进程。
详细解析:
- Concept Check (概念核对): 调度(Scheduling)本质上是决定“谁排队、谁获得资源”的策略器。
- The 'Why' (原理解析):
- 高级 (Long-term): 发生频率最低。它的任务是控制系统的“多道程序度”,即内存里到底装多少个作业合适。装少了CPU吃不饱,装多了内存要爆。
- 中级 (Medium-term): 相当于内存的“缓冲阀”。当内存吃紧时,它负责把一些处于阻塞态的进程“剥夺”内存并放到硬盘缓存区(挂起态/Suspend);等内存宽松了再接回来。
- 低级 (Short-term): 发生频率极高(毫秒级)。它直接操作CPU,从就绪队列挑选一个进程上CPU执行。
- Common Pitfalls (易错点): 容易混淆中级调度和高级调度。高级调度管的是作业的“生与死”(创建进程),中级调度管的是进程在内存的“进与出”(Swap in/out)。
13.什么是设备独立性,它是如何实现的?
答案: 设备独立性(Device Independence)是指应用程序应独立于具体使用的物理设备。即用户程序可以使用统一的“逻辑设备名”来请求I/O操作,而无需关心底层实际连接的物理设备型号或控制细节。它是通过操作系统中的逻辑设备表(LUT)和分层的设备驱动程序来实现的。
详细解析:
- Concept Check (概念核对): 设备独立性使得你的代码不需要因为换了一台新牌子的打印机就要重新编译。
- The 'Why' (原理解析): 在没有设备独立性的时代,程序需要针对具体的硬件接口编写控制逻辑。引入该机制后: 用户在程序中只声明要使用“打印机1(逻辑设备名)”并调用标准的
write()命令。 操作系统收到系统调用后,查找逻辑设备表 (LUT, Logical Unit Table)。LUT中记录了“打印机1”当前映射到的“USB接口惠普打印机(物理设备名)”以及对应设备驱动程序的入口地址。 系统再调用该特定驱动程序将标准命令转化为具体的硬件电信号。 - Common Pitfalls (易错点): 设备独立性并不意味着不需要驱动程序。相反,它正是依靠底层“设备驱动层”对上屏蔽了差异,才为应用层提供了统一的独立接口。
14.进程的基本状态有哪些?这些状态之间是如何转换的?
答案: 进程的基本状态有五种:新建态(New)、就绪态(Ready)、运行态(Running)、阻塞/等待态(Blocked/Waiting)和退出态(Exit)。 主要转换关系为:
- 就绪 -> 运行: 进程被调度程序选中分配了CPU。
- 运行 -> 就绪: 进程时间片用完,或被高优先级抢占。
- 运行 -> 阻塞: 进程请求I/O或等待某事件发生。
- 阻塞 -> 就绪: 进程等待的I/O完成或事件已发生。
详细解析:
- Concept Check (概念核对): 状态模型描述了进程从出生到死亡的生命周期。
- The 'Why' (原理解析): 操作系统之所以要维护这些状态,是因为CPU只有一个(或少数几个),而进程有很多。 当程序刚被调入时处于新建态。准备好资源后进入就绪态排队。当低级调度器分配CPU时,进程转入运行态。 如果进程在运行中需要读取磁盘文件,因为磁盘极慢,进程必须交出CPU,转入阻塞态去睡觉。此时OS会从就绪队列挑另一个进程去运行。等磁盘读完发出中断,OS再把睡着的进程叫醒,放回就绪态(注意,绝不能直接回到运行态,必须重新排队)。完成所有任务后转入退出态清理资源。
- Common Pitfalls (易错点): 绝不存在“阻塞态 -> 运行态”的直接转换。进程被唤醒后只能先回到就绪队列排队等待下一次调度。
15.SPOOLing的含义是什么?试述SPOOLing系统的特点、功能以及控制过程。
答案:含义: SPOOLing(Simultaneous Peripheral Operations On-Line)即假脱机技术,它利用多道程序设计和高速磁盘缓存,使CPU计算与慢速外设的I/O操作同时在线进行。 特点与功能: 提高了I/O速度,将独占设备(如打印机)改造成了多个进程可以同时请求的“虚拟共享设备”。 控制过程: 当用户进程请求打印时,SPOOLing系统并不会直接将其接入物理打印机,而是在磁盘上的“输出井”中为其分配一块空间暂存打印数据,并在队列中添加一个请求表项。后台的“打印守护进程”会依照队列顺序,将磁盘井中的数据慢慢输出到物理打印机。
详细解析:
- Concept Check (概念核对): SPOOLing是用软件在磁盘上模拟硬件排队机制的经典设计。
- The 'Why' (原理解析): 如果没有SPOOLing,进程A请求独占打印机时,进程B如果也想打印,就会被死死阻塞,甚至发生死锁。 SPOOLing利用了磁盘极大的容量,划分了输入井和输出井。进程A和进程B可以“瞬间”把数据丢入磁盘上的输出井,系统告诉它们“打印完成了”,于是A和B继续高速执行计算任务(这就极大地提升了系统效率)。实际上,数据被操作系统悄悄排队了,由一个不知疲倦的后台进程逐个发往物理设备完成真实输出。
- Common Pitfalls (易错点): SPOOLing不是在主存(RAM)中做缓冲,它的“输入井/输出井”必须开辟在大容量的**辅助存储器(磁盘)**上。
16.简述进程的几种状态和引起状态转换的典型原因,以及相关的操作原语。
答案:(注:状态与转换原因同第14题,此处重点补充操作原语)
- 就绪 -> 运行: 原因是被调度器选中。原语:
调度 (Dispatch)。 - 运行 -> 就绪: 原因是时间片耗尽或被抢占。原语:
时间片到期 (Timeout/Yield)。 - 运行 -> 阻塞: 原因是进程需要等待I/O或某信号量。原语:
阻塞 (Block / wait / P操作)。 - 阻塞 -> 就绪: 原因是等待的I/O操作完成,中断发生。原语:
唤醒 (Wakeup / signal / V操作)。 - 新建 -> 就绪: 系统接纳新作业。原语:
创建 (Create)。 - 运行 -> 退出: 进程执行结束或异常。原语:
终止 (Destroy/Exit)。
详细解析:
- Concept Check (概念核对): 原语(Primitive)是操作系统内核中不可中断的一段执行代码,用于安全地改变进程控制块(PCB)的状态和链表归属。
- The 'Why' (原理解析): 操作系统的进程转换不是瞬间完成的。比如
Block原语:系统需要先把进程保护现场(保存寄存器),将其PCB中的状态位改为Blocked,将其PCB插入到相应的等待队列,最后调用调度器选一个新进程运行。因为涉及修改关键数据结构,这个过程必须用原子性的“原语”来保证不被中断打断。 - Common Pitfalls (易错点): 引起状态转换的是“事件(如中断)”,而执行转换的具体代码实现则是“原语”。
17.设备管理中的数据传送控制方式有哪几种?分别简述如何实现的。
答案: 主要有三种:程序直接控制方式(Programmed I/O)、中断驱动控制方式(Interrupt-driven I/O)、直接存储器访问方式(DMA)。
详细解析:
- Concept Check (概念核对): 这体现了计算机架构中为了解放CPU而进行的I/O演进。
- The 'Why' (原理解析):
- 程序直接控制方式 (Programmed I/O): CPU发出I/O指令后,陷入“轮询(Busy Waiting)”状态,不断循环读取状态寄存器,直到外设准备好数据,CPU再将其读入。极其浪费CPU。
- 中断驱动方式 (Interrupt-driven I/O): CPU发出I/O命令后直接去执行其他进程。当外设准备好数据时,向CPU发一个硬件中断信号,CPU再暂停当前工作,把这一个字节/字的数据读入内存。解放了等待时间,但数据仍需CPU以字为单位搬运。
- DMA (直接存储器访问): 硬件中增加了一个DMA控制器。CPU告诉DMA“把磁盘X扇区的N个字节搬到内存Y地址”,然后去干别的。DMA控制器接管总线,直接将一块数据在磁盘和内存间搬运,全部搬完后才向CPU发一次中断。彻底将CPU从繁重的数据搬运中解放出来。
- Common Pitfalls (易错点): 认为DMA完全不需要CPU。实际上,DMA的启动指令和完成后的收尾工作依然需要CPU介入响应中断,它只是省去了中间循环搬运的开销。
18.什么是快表?它在地址转换中起什么作用?
答案: 快表(TLB, Translation Lookaside Buffer)是集成在CPU内部(MMU中)的一块极高速的相联存储器缓存,专门用于存储最近被频繁访问的“页表项”(即虚拟页号到物理页框号的映射记录)。 它的作用是大幅加速虚拟地址到物理地址的转换过程,避免每次寻址都去访问主存中的慢速页表。
详细解析:
- Concept Check (概念核对): TLB是虚拟内存系统性能不崩盘的核心救命稻草。
- The 'Why' (原理解析): 在虚拟分页系统中,页表是存放在主存(RAM)中的。如果没有快表,CPU执行一条指令需要访问两次主存:第一次去主存查页表算物理地址,第二次再去主存取真实数据。这会让机器速度直接降低一半。 由于程序具有局部性原理,CPU在短时间内往往会频繁访问同一个页。TLB作为硬件缓存,记住了最近的页表映射。CPU进行地址转换时,硬件会同时在TLB中并行比对虚拟页号:如果“命中(TLB hit)”,则直接拿到物理地址去读数据(只需1次内存访问);如果“未命中(TLB miss)”,再去主存查页表,并将结果更新进TLB。
- Common Pitfalls (易错点): 快表(TLB)缓存的是页表项(地址映射表),而不是程序的实际数据或代码!缓存实际数据的是通常意义上的CPU L1/L2 Cache。
19.什么是死锁?产生死锁的四个必要条件是什么?
答案:死锁是指两个或两个以上的进程在执行过程中,由于相互竞争系统资源或通信而导致的一种永久阻塞的僵局;若无外力作用,它们都将永远无法向前推进。 四个必要条件: 互斥条件、请求和保持条件、不剥夺(非抢占)条件、循环等待条件。
详细解析:
- Concept Check (概念核对): 死锁是并发编程中最具毁灭性的软件灾难。
- The 'Why' (原理解析): 产生死锁必须同时满足以下四条:
- 互斥 (Mutual exclusion): 至少有一个资源必须是排他性使用的。如果是可同时读取的共享资源,就不会引发阻塞。
- 请求和保持 (Hold and wait): 进程手里已经死死攥着至少一个资源,同时又去申请别人占用的新资源,并且在等待期间绝不放下自己手里的东西。
- 不剥夺 (No preemption): 进程所获得的资源在未使用完毕之前,操作系统不能强行把它抢走,只能由进程自愿释放。
- 循环等待 (Circular wait): 在系统中必然存在一条由两个或以上进程组成的闭合等待链。例如,P1等P2的资源,P2等P3的资源,P3又转回头等P1的资源。
- Common Pitfalls (易错点): 这四个条件是死锁的必要条件(死锁发生了,这四条一定成立),但不是充分条件(即便这四条成立,只要还有额外的资源可供打破循环,死锁也不一定真的发生)。
20.在哲学家算法中,是否能防止或解除死锁?为什么?
答案: 能。可以通过破坏死锁的四个必要条件之一来预防死锁,或者利用算法机制避免死锁。这是因为死锁的产生必须严格依赖四个条件的共同成立,只要用程序逻辑打破“循环等待”或“请求和保持”,死锁就不会发生。
详细解析:
- Concept Check (概念核对): 哲学家就餐问题是Dijkstra提出的经典同步问题。5个哲学家围坐,每两人中间有1根筷子(共5根)。需要同时拿到左右两根才能吃饭。
- The 'Why' (原理解析): 如果所有哲学家同时拿起左边的筷子,此时5根筷子全被占用。接着他们同时去拿右边的筷子,就会陷入无限期互相等待,满足了“循环等待”条件,发生死锁。 防止死锁的常用解决策略包括:
- 破坏循环等待条件: 规定奇数号哲学家先拿左筷子再拿右筷子,偶数号哲学家先拿右筷子再拿左筷子(不对称策略)。这样总有两个人竞争同一根筷子,必有一人能拿到两根,从而打破僵局。
- 破坏请求和保持条件: 要求哲学家必须同时抓起两根筷子(使用AND型信号量或用互斥锁保护抓筷子的过程),如果不能同时拿到,就一根也不拿。
- 资源预留: 限制最多只允许4名哲学家同时入座。这样至少有1名哲学家能拿到两根筷子。
- Common Pitfalls (易错点): 死锁虽然可以解决,但如果在解决时设计不当(例如大家都发现没筷子,同时放下左手,过一秒又同时拿起左手),会导致**活锁(Livelock)或饥饿(Starvation)**现象,即进程虽然状态在变,但依然永远吃不到饭。这是更深层次的并发问题。
你好!我是你的专属操作系统辅导老师。接下来,我将继续运用“概念核对 (Concept Check)”、“原理解析 (The 'Why')”以及“易错点 (Common Pitfalls)”的结构,为你深入浅出地详细讲解第21至35题。
请注意:对于部分在给定参考资料中提及较简略的经典概念(如分时系统的四大特征总结、软硬链接对比),我会在解析中辅以操作系统的标准理论(External Knowledge)来确保你能全面掌握。
21. 在单处理机环境下,进程间有哪几种通信方式,是如何实现的?
答案与详细解析: 在单处理机环境下,UNIX等操作系统通常提供以下几种进程间通信(IPC)机制:管道(Pipes)、消息传递(Messages)、共享内存(Shared memory)、信号量(Semaphores)和信号(Signals)。
- 概念核对 (Concept Check): 进程间通信(IPC)是指操作系统提供的机制,使得独立的进程能够交换数据或同步动作。
- 原理解析 (The 'Why'):
- 管道 (Pipes): 是一个环形缓冲区,允许两个进程以“生产者-消费者”模型进行通信(先进先出)。一个进程写,另一个进程读。
- 消息传递 (Messages): 进程通过系统调用(如UNIX中的
msgsnd和msgrcv)发送和接收带有类型的字节块。通常结合“信箱(Mailbox)”或消息队列来实现。 - 共享内存 (Shared memory): 最快的通信方式。操作系统将同一块物理内存映射到多个进程的虚拟地址空间中,进程像读写自身内存一样读写这块区域。
- 信号量 (Semaphores) / 信号 (Signals): 不主要用于传输海量数据,而是用于进程间的动作触发和状态同步。
- 易错点 (Common Pitfalls): 容易把“同步机制”(如信号量)和“数据传输机制”(如共享内存)混为一谈。共享内存虽然快,但它本身不提供互斥约束,必须结合信号量来防止数据读写冲突。、
22. 在段页式虚拟存储系统中,不同进程之间是如何实现程序共享的?
答案与详细解析: 通过让多个进程的段表(Segment tables)中的某个表项指向同一个共享的物理内存区域(或同一个页表)来实现。
- 概念核对 (Concept Check): 分段与分页结合的系统中,分段面向用户逻辑,分页面向物理内存管理。共享通常在“段”这一层级进行。
- 原理解析 (The 'Why'): 为什么用段来共享而不是页?因为“分页”是按照固定大小生硬切分的,一个页里可能同时包含不可共享的私人数据和可共享的代码;而“分段”是按照程序的逻辑结构(如某个数学函数库、某个全局数组)划分的,具有完整的逻辑意义。因此,当两个进程需要共享某个函数库时,操作系统只需将这两个进程各自的段表中代表该函数库的表项,指向主存中同一块物理基址即可。
- 易错点 (Common Pitfalls): 误以为单纯的页式管理也很容易实现共享。实际上,由于页会切断逻辑边界,单纯的页式系统很难安全、干净地实现共享。
23. 在生产者—消费者问题中,能否将生产者进程的wait(empty)和wait(mutex)语句互换,为什么?
答案与详细解析:绝对不能互换,因为这会导致死锁(Deadlock)。
- 概念核对 (Concept Check):
wait操作(也称P操作)用于申请资源。empty用于同步(检查缓冲区是否有空位),mutex用于互斥(锁定缓冲区)。 - 原理解析 (The 'Why'): 如果将生产者的操作互换,即先执行
wait(mutex)再执行wait(empty):假设此时缓冲区已满(empty = 0),生产者进程首先成功拿到了互斥锁(mutex),然后它去申请空位(wait(empty)),因为没有空位,生产者抱着互斥锁进入阻塞睡眠状态。 此时,消费者进程想要取走数据以腾出空位,但它在执行wait(mutex)时,发现锁被生产者死死抱着不放,于是消费者也被阻塞。双方互相等待,形成死锁。 - 易错点 (Common Pitfalls): 记住一个黄金法则:P操作(wait)的顺序生死攸关,必须“先同步,后互斥”。而 V操作(signal)的顺序通常不会引起死锁。
24. 目前操作系统采用的目录结构是什么?它具有什么优点?
答案与详细解析: 目前主流操作系统采用的是树形目录结构(Tree-structured directory)。
- 概念核对 (Concept Check): 树形结构是一种多级目录体系,所有目录和文件构成一棵倒置的树,通过“路径名(Pathname)”来唯一定位文件。
- 原理解析 (The 'Why'): 早期的单级目录把所有文件混在一起,极易重名。树形结构允许用户自由创建子文件夹,这种设计极大地提高了灵活性。它的主要优点是:能够基于所有者或应用项目对文件进行清晰的分类和隔离,从而提高了安全性、数据完整性(便于备份),并且彻底避免了不同分支下的文件名冲突(Name clashes)问题。
- 易错点 (Common Pitfalls): 很多学生忽略了树形结构中“唯一标识符不再是文件名,而是绝对路径名”这一关键事实。
25. 文件目录有何作用?
答案与详细解析: 文件目录的主要作用是维护“逻辑文件名”到“物理存储地址”的映射,并记录文件的各种控制属性。
- 概念核对 (Concept Check): 目录是文件系统用于组织和检索文件的一种特殊数据结构。
- 原理解析 (The 'Why'): 人类只记得住“文件名”(如
report.docx),但磁盘只认得“物理块号”。文件目录充当了翻译官,它提供了关于文件是否存在、在辅助存储器(磁盘)上的具体物理位置、当前状态、访问权限(读写执行)、创建者等关键信息。 - 易错点 (Common Pitfalls): 误以为目录只是一层“可视化文件夹”。在操作系统底层,目录本身也是一种文件,其内容就是一张“文件名与文件控制块(FCB/inode)对应关系”的映射表。
26. 什么是文件的逻辑结构和物理结构?
答案与详细解析:
逻辑结构: 是从用户和应用程序视角看到的文件组织形式(如无结构的流式文件,或有结构的记录式文件)。
物理结构: 是从操作系统和磁盘视角看到的文件数据在物理存储介质上的实际排列和分配方式(如连续分配、链接分配、索引分配)。
概念核对 (Concept Check): 逻辑结构关乎“怎么用”,物理结构关乎“怎么存”。
原理解析 (The 'Why'): 用户写代码时,只关心数据是像水流一样连续读取(流式/Stream file),还是像数据库那样按关键字查找一条条记录(记录式/Record file)。 但操作系统必须面对现实:磁盘是分块的。OS必须决定是把文件连续存放在一起(读取快,但有外部碎片),还是用链表串起来(无碎片,但不支持随机访问),或者是建立索引块(支持随机访问,是现代OS的首选)。
易错点 (Common Pitfalls): 极其容易混淆这两个概念。比如“索引顺序文件”属于逻辑结构;而“索引分配”属于物理结构。
27. 在操作系统中为什么要引入进程概念?它与程序的差别和关系是怎样的?
答案与详细解析:引入原因: 在多道程序设计中,多程序并发执行会导致资源竞争、执行速度不可预测。为了系统化地监控、控制并协调这些并发实体的推进,操作系统引入了“进程”作为资源分配和独立调度的基本单位。 差别与关系:
差别: 程序是静态的二进制代码(存放在磁盘上);进程是动态的、处于执行状态的实体(存在于内存中)。
关系: 进程是程序的一次执行过程。一个进程包含了可执行的程序代码、相关的数据集,以及用于记录执行上下文的进程控制块(PCB)。一个程序可以被多次启动,从而产生多个不同的进程。
易错点 (Common Pitfalls): 把进程和程序等同。记住口诀:“程序是菜谱,进程是正在炒菜的过程”。
28. 什么是进程的互斥与同步?
答案与详细解析:
互斥(Mutual Exclusion): 确保在任何时刻,只允许一个进程访问某个临界资源(即排他性资源的代码段)。
同步(Synchronization): 协调多个并发进程的执行顺序,确保它们按照特定的逻辑先后顺序推进(例如,必须先生产数据,才能消费数据)。
原理解析 (The 'Why'): 因为并发进程的执行速度是“异步”的(走走停停,不可预知)。如果不加互斥,两个进程同时修改一个全局变量就会导致数据损坏(Race condition);如果不加同步,依赖别人计算结果的进程可能会在数据还没准备好时就提前执行,导致逻辑错误。
易错点 (Common Pitfalls): 互斥是“排他”(你进我就不能进,防止冲突);同步是“协作”(我等你做完我再做,保证顺序)。
29. 简述分时系统的四个基本特征?
答案与详细解析:(注:结合参考资料与标准OS理论补充) 分时系统(Time-sharing system)的核心目标是最大化响应时间,让多个用户能够直接与计算机交互。其基本特征通常总结为四点:
- 多路性 / 同时性: 多个用户通过各自的终端同时连接并使用同一台主机。
- 独立性: 每个用户感觉自己独占了整个计算机,彼此之间互不干扰。
- 及时性 / 响应快: 系统通过时间片轮转(Round-robin/Time-slicing)调度进程,保证在用户能接受的短暂时间内给出响应。
- 交互性: 用户可以通过终端直接向系统发出指令并立刻获得结果,这是它区别于批处理系统的最大特征。
- 易错点 (Common Pitfalls): 不要把分时系统和“实时系统(Real-time system)”混淆。分时系统追求的是“人类感觉够快即可”,实时系统追求的是“必须在严格的毫秒级截止时间内完成”。
30. 文件的逻辑结构分为几种形式?文件的磁盘布局分为几种形式?
答案与详细解析:
逻辑结构形式: 根据参考资料,主要分为两大类:无结构文件(流式文件)和 有结构文件(记录式文件)。其中记录式文件进一步细分为:堆型文件(Pile)、顺序文件(Sequential)、索引顺序文件(Indexed sequential)、索引文件(Indexed)和直接/哈希文件(Direct/Hashed)。
磁盘布局(物理结构/分配策略)形式: 连续分配(Contiguous allocation)、链式分配(Chained allocation)和索引分配(Indexed allocation)。
原理解析 (The 'Why'): 见第26题。这一题是对第26题的具体分类列举。
易错点 (Common Pitfalls): 在答题时如果被问到“逻辑结构”,很多学生会漏掉最简单的“流式文件(Stream file)”,这是UNIX/Linux最喜欢用的形式(把一切看作字节流)。
31. 什么是计算机操作系统?
答案与详细解析: 操作系统(Operating System, OS)是计算机系统中最基本的系统软件。它利用并控制一个或多个处理器的硬件资源,负责控制应用程序的执行,并充当应用程序/用户与计算机硬件之间的接口。
- 原理解析 (The 'Why'): 操作系统的两大核心身份:
- 资源管理者 (Resource Manager): 公平、高效地管理CPU、内存、I/O设备,防止多个程序打架。
- 扩展机器/虚拟机 (Virtual Machine/Interface): 硬件接口太难用了,OS为程序员提供了一套方便、丰富、安全且一致的接口(如系统调用),屏蔽了硬件的丑陋细节。
- 易错点 (Common Pitfalls): 认为OS只是提供用户界面的软件。UI(外壳)只是OS的表层,OS的真正核心是底层的内核(Kernel)。
32. 简述存储管理中移动技术(Compaction)的优缺点。
答案与详细解析: 移动技术(或称内存紧凑/压缩技术,Compaction)用于动态分区内存管理中。
优点: 能够彻底解决“外部碎片(External fragmentation)”问题。它通过将内存中所有的进程向一端移动,将原本散落在各处的微小空闲孔洞聚集成一个巨大的空闲内存块,从而可以容纳新的大作业。
缺点: 极其浪费处理器时间。因为需要在内存中搬运大量的数据字节,这使得CPU无法用于执行有用的计算任务,导致系统效率极度低下。
易错点 (Common Pitfalls): 现代操作系统基本上已经抛弃了这种耗时的移动技术,转而使用硬件支持的“分页(Paging)”技术,从根本上消灭了外部碎片。
33. 简述并发与并行之间的关系。
答案与详细解析:
并发 (Concurrency): 指多个进程在宏观时间段内看起来是同时推进的。在单核处理器上,这是通过进程的交替执行(时间片轮转)来实现的。
并行 (Parallelism): 指多个进程在微观的同一物理时刻,真正地同时执行。这必须依赖于多核或多处理器(Multiprocessor)硬件架构。
原理解析 (The 'Why'): 可以把“并发”想象成一个厨师同时处理三个锅(交替翻炒,同一瞬间只在一个锅前);而“并行”是三个厨师分别站在三个锅前同时炒菜。并行是并发的一个物理真子集。
易错点 (Common Pitfalls): 在日常用语中这两个词常混用,但在计算机科学中,并行代表硬件上的绝对同时,而并发是软件调度营造的“宏观同时”假象。
34. 页式和段式内存管理有什么区别?怎样才能实现共享和保护?
答案与详细解析:主要区别:
- 目的与可见性: 分页是为了消除外部碎片、提高内存利用率,由系统硬件自动完成,对程序员透明;分段是为了适应程序的逻辑结构(如模块化),方便数据和代码共享,由程序员划分,对程序员可见。
- 大小: 页面大小是固定的(由硬件决定);段的大小是可变的(由程序逻辑决定)。
实现共享和保护:
- 由于分段拥有完整的逻辑意义(例如整个段都是某个只读函数),因此共享和保护通常在“段”这一级别来实现最为理想。
- 实现方法是:操作系统通过在不同进程的**段表(Segment Tables)**中,设置表项指向主存中相同的物理基址(或同一套页表),从而让它们共享同一块逻辑代码或数据。同时,在段表中设置权限位(如只读、读写、执行)来实现安全保护。
35. 比较基于索引节点和基于符号链的文件共享方法。
答案与详细解析:(注:本题深入考察文件共享机制,辅以标准操作系统的软硬链接理论知识进行比对说明) 在类 UNIX 系统中,文件共享主要通过“硬链接(基于索引节点)”和“软链接/符号链接(基于符号链)”实现:
基于索引节点(Hard Link / 硬链接):
- 原理: 多个不同目录下的目录项(文件名)直接指向同一个物理文件的索引节点(inode)。inode内部维护一个引用计数(Reference count)。
- 优点: 访问速度快(直接通过inode找物理块);即使删除了原文件名,只要还有其他硬链接指向该inode,文件数据就不会丢失。
- 缺点: 不能跨越不同的文件系统创建硬链接;为防止形成循环环路,通常不允许对目录创建硬链接。
基于符号链(Symbolic Link / 软链接):
- 原理: 创建一个特殊类型的新文件(软链接文件),该文件的内容是目标文件的“绝对路径或相对路径”。
- 优点: 极其灵活,可以跨越不同的文件系统共享文件;甚至可以对目录建立链接。
- 缺点: 访问速度较慢,因为操作系统每次都要去解析并遍历该路径字符串;如果原文件被删除,符号链接就会变成指向虚无的“悬空指针(Dangling pointer)”。
易错点 (Common Pitfalls): 考试时常考的一点是:删除源文件后,哪种方式会出错?答案是符号链会出错(找不到文件),而基于索引节点的方式依然能通过剩余的硬链接正常访问文件。