Silberschatz 操作系统概念

2025 年 4 月 29 日 | 阅读 12 分钟

引言

Abraham Silberschatz、Peter B. Galvin 和 Gagne 所著的《操作系统概念》一书是介绍操作系统原理或特性的主要教材。它同样讨论了操作系统在控制计算机硬件和软件资产方面的中心功能,以及作为用户直接交互和应用程序执行的平台。

作者们侧重于讨论概念的实际应用,并提供了许多示例和案例研究来帮助说明理论概念。这种务实的方法有助于学生和在职专业人士理解操作系统在当今计算系统中的作用。此外,书中还包含大量的复习题、练习和插图,有助于更有效地学习并吸引学生。因此,对于希望从基础开始,深入了解操作系统的计算机科学学生、软件工程师和 IT 专业人士来说,它成为了重要的参考资料。

进程和线程

进程也被描述为程序在运行时的一个实例,包括程序代码、当前活动以及运行程序所需的资源,例如内存和文件控制单元。执行器提供了运行程序所需的环境,并为每个程序提供独立的空间和资源,使其能够独立运行;它们确保不同程序同时运行而不相互干扰。在进程生命周期的所有状态中,最广为人知的五种状态包括新创建、就绪、运行、等待和终止。当一个进程被创建时,它进入新创建状态,然后转移到就绪状态,等待 CPU 调度。

进程有三种状态:运行、就绪和阻塞,而操作系统的调度程序控制这些变化,决定在给定时间执行哪个进程。如果一个进程需要 I/O 操作或等待另一个条件,那么它就处于等待状态,而对于其他进程,CPU 可以利用就绪状态。另一方面,线程可以被视为可以由操作系统调度的最小处理单元。线程可以被描述为与父进程或应用程序共存的细粒度进程。因此,它使用相同的内存空间、ID 和资源,同时拥有自己的执行堆栈,

1. 程序计数器和变量

  • 使用线程的主要好处是其效率;与进程的启动和处理相比,线程的创建和管理通常在资源方面更具成本效益。线程允许在同一进程内并发执行。这意味着一个应用程序可以同时做许多事情,例如接受用户输入和处理数据。
  • 这种能力在需要瞬时输入的场景中尤其有益,例如 Web 服务器和基于 Web 的客户端系统。为确保读者充分理解线程模型的不同方面,Silberschatz 定义了用户级线程和内核级线程。
  • 用户级线程由不同的用户应用程序控制,因此这些线程之间的上下文切换所需时间更少。另一方面,内核级线程由操作系统监督;因此,它们与硬件组件有更好的接口,但成本更高。

2. 结构

  • 首先详细讨论的结构是单体结构,其中操作系统是一个庞大的程序,可以完成所有操作,例如进程调度、内存分配和设备管理。这种设计由于直接访问系统资源而非常有效,但往往是非模块化的,这意味着软件维护和更新可能是一场噩梦。
  • 操作系统的另一种结构是分层结构,其中操作系统被划分为多个层,每一层都服务于特定的层。每一层都有一个特定的操作,上层依赖于它。这种设计增加了模块化,并简化了整个系统以及其开发和后续的修改。然而,它可能会导致一些性能开销,因为它会导致层之间的更多方法调用。

进程调度

1. 调度准则

关于调度算法的效率,我们有 CPU 利用率、已完成任务的数量、每个进程花费的时间、进程等待轮到的时间以及总体响应时间等参数。高 CPU 利用率和吞吐量意味着系统按预期满负荷工作,而低等待时间和响应时间值表明系统上的任务在最短可能时间内完成。

2. 调度算法的种类

调度算法可分为两大类:抢占式和非抢占式。这两种调度类型是抢占式的,其中操作系统可以暂停当前进程然后稍后恢复它,或者至少提供双进程控制,其中进程运行直到完成或自愿释放 CPU 控制权。

3. 先来先服务 (FIFO)

FCFS 代表先来先服务,即最先到达的进程最先被服务。它易于实现,但可能导致长时间等待。例如,如果一个长进程后面跟着一个短进程,就会导致所谓的“队列效应”。

4. 最短作业优先 (SJN)

最短剩余时间 (SRT) 或最短作业优先 (SJF):该算法选择耗时最短的进程。它降低了平均等待时间,同时增加了准确预测进程时间的重要性,而这有时可能是一个问题。

5. 轮转 (RR) 调度

有趣的是,在 RR 调度中,每个进程都被分配一个时间量,然后 CPU 会循环遍历进程,让每个进程轮流使用 CPU。否则,如果一个进程在其时间片内未完成,它将被移到队列的末尾。该算法是公平的,并且经常用于分时系统。

6. 优先级调度

同样,优先级被附加到进程上,调度程序选择第一个排队执行的进程。虽然这是一个非常有效的调度过程,但如果其他低优先级进程总是被排除在外,它可能会导致饥饿。为了解决这个问题,采用了老化技术,逐渐提高等待轮到的进程的紧迫性。

7. 多级队列调度

该方法根据优先级或进程类型(如前台和后台)将就绪队列划分为多个子队列。因此,每个队列可能有自己的任务调度算法,以提高系统在不同类型功能上的性能。

8. 多级反馈队列调度

这是多级队列调度的一种形式,一种更精炼的形式,它允许进程根据其活动从一个队列迁移到另一个队列。例如,一个需要大量 CPU 周期的 CPU 密集型进程可能会被调度到一个低优先级类,以容纳一个偏好交互的快速进程。

内存管理

1. 内存架构和管理

操作系统控制着另一种类型的内存层次结构,从寄存器和缓存开始,然后是主内存或 RAM,以及二次存储(如硬盘)。内存管理在避免浪费受保护内存空间和减少数据和信息检索时间方面起着至关重要的作用。

2. 地址绑定

地址绑定是将程序产生的逻辑地址与内存空间中的物理地址相关联的过程。有三种类型的地址绑定:编译时、加载时和执行时。地址绑定对于内存管理至关重要,因为它允许在运行时绑定进程,因此在需要时可以重新定位。

3. 内存分配技术

内存分配技术根据其实现方式分为两类:连续和非连续技术。虽然连续分配为进程提供主存储器的一个连续链接部分,但许多基于段的非连续分配将主存储器划分为多个段。虽然连续分配易于实现,但会导致碎片。

4. 碎片

碎片意味着可用空间被分成不同大小的区域。它可以是两种类型:内部(内存块内的任何可用区域)和外部(内存块之间的可用空间)。操作系统使用一些方法来对抗碎片,包括内存紧缩。

5. 分页

分页是一种内存管理方案,其中总物理内存被划分为小的、大小相等的块,称为页。这些块在进程级别,每个进程被划分为可以更灵活地管理并独立于其他进程运行的页。相对而言,分页也使得分配更容易,因为任何页都可以被调入任何可用的帧。

6. 分段

与分页不同,分段将进程划分为可变大小的段,例如代码、数据和堆栈。所有这些都可以被划分到物理内存的不同部分。这种方法有助于以逻辑方式将属于相关对象的数据分组。因此,它可以提高内存访问效率,尽管它会导致外部碎片。

7. 虚拟内存

虚拟内存是一种机制,通过这种机制,可能不完全包含在主内存中的进程可以被执行。虚拟内存通过使用磁盘空间来扩展实际 RAM,从而使操作系统能够更有效地进行多任务处理和进程控制。

8. 按需分页

在虚拟内存中,按需分页是其中的一个组成部分,这意味着页仅在需要时才被加载到内存中。此机制还有助于最大限度地减少进程所需的物理内存量,并避免应用程序通过仅为活动进程使用物理内存来阻塞操作系统。

死锁

1. 死锁的定义

  • 死锁是一种条件,在这种条件下,多个进程处于非活动状态,因为每个进程都持有一个资源,并等待另一个进程持有的另一个资源。这种循环等待情况不允许任何一个进程继续进行,从而导致系统停滞。了解死锁和防范死锁对于确保系统的稳定性至关重要。

2. 死锁的必要条件

  • 互斥:一个资源一次只能被一个进程使用。
  • 持有并等待:还存在一种情况,持有资源的进程可能会申请更多资源。
  • 不可抢占:如同有形资源一样,某些东西不能从进程中剥夺。
  • 循环等待:存在一个进程的循环序列,使得每个进程都持有一些被序列中下一个进程所需的资源。

3. 死锁预防

  • 有四种主要的避免死锁的策略,它们通过阻止死锁的四个必要条件之一的存在来预防死锁。这些策略包括消除两个进程共享资源的要求,进程一次性请求所有资源,以及能够响应地抢占资源。这些方法相当不错,但可能导致其他问题,导致系统效率低下。

4. 死锁避免

  • 与预防不同,死锁避免涉及运行时决策,因此,系统被期望做出决策。这种著名的 Banker 算法被建立起来,用于在分配资源时解决死锁发生的情况。检查资源可用性,并在服务请求之前将系统置于安全状态。

5. 死锁检测

  • 另一方面,检测发生在识别死锁时。资源分配图用于确定进程可能发生的周期性循环等待。在识别出死锁后,可以使用克服死锁的方法,尽管这种方法会导致短期的系统阻塞。

6. 死锁恢复

  • 这意味着逃离死锁可能涉及“杀死”进程或阻止对资源的访问,以打破连续的循环。这些选项包括进程扰动,例如杀死一个或多个进程,甚至资源改造,使进程能够平稳地释放其持有的资源。这两种方法都有可能产生不准确或不完整的数据并阻碍系统性能。

7. 资源分配图

  • RAG 是一个精确的工具,用于映射进程和资源的使用或请求。当图表中出现循环时,可能会发生死锁。这种图形方法适用于检测和分析死锁是如何产生的,并且有助于识别相对较小系统中的死锁。

8. 实时系统管理策略

  • 死锁在实时系统中可能是严重的。优先级继承有助于避免低优先级任务保留高优先级任务所需资源的情况发生。通过暂时提高某些任务的优先级,系统可以避免长时间的阻塞。

9. 死锁的影响

  • 死锁会产生严重后果,例如系统速度减慢、吞吐量降低,在关键系统中甚至可能导致系统完全无法运行。每个瓶颈都必须迅速解决,因为对于高可用性和高性能系统(包括银行和电信系统)来说,这是常见问题。

分布式系统

1. 分布式系统类型

  • 分布式系统的不同类型包括客户端-服务器系统、点对点 (P2P) 系统和分布式数据库。客户端-服务器系统的系统资源需求是服务器致力于为多个客户端提供各种服务,而在 P2P 系统中,节点既是客户端也是服务器,它们直接为彼此提供多种服务。分布式数据库之所以有效,是因为数据可以被分割并存储在不同的部分,以便随时可以访问。

2. 分布式系统中的组间通信

  • 从一个节点到另一个节点的传输是分布式系统的基本特征。这可以通过消息传递或远程过程调用 (RPC) 来实现。消息传递允许节点相互传递信息,而 RPC 使进程能够在被认为是远程的服务器上运行,尽管它在同一网络中作为函数运行。

3. 分布式协调

  • 由于数据的分区结构,分布式系统需要实施复杂的策略来处理节点中的任务。这包括时钟同步、分布式互斥和选举算法等方法。有效的协调可确保一组功能以有序的方式执行,而不会发生太多冲突,并维护系统完整性。

4. 负载均衡

  • 根据可用性和可扩展性,分布式系统能够通过添加更多节点来处理增加的工作负载。负载均衡有效地分配系统中的进程负载,以免任何节点过载并减慢整个系统。最佳负载分布可提高网络性能和效率。

5. 分布式系统的安全性

  • 分布式系统中的主要担忧之一是安全性。数据免受未经授权访问和后续攻击的保护需要包括安全通信、数据加密、身份验证和授权。安全考虑需要严格,因为分布式系统与外部网络和风险相关联。

文件系统

1. 文件分配方法

  • 连续分配:此方法按顺序排列数据,每个文件占据连续的块,以便快速访问,但会造成碎片。
  • 链接分配:每个文件都是磁盘块的链表;磁盘空间不碎片化,但访问时间较慢。
  • 索引分配:此分配将指向文件所有块的指针保存在一个索引块中,提供对块的高速访问,并且相对灵活。

2. 文件访问方法

  • 顺序访问:数据是逐行构建的,从第一个元素或记录开始,到最后一个记录结束。
  • 直接(随机)访问:这意味着可以在文件的任何随机位置访问数据,这意味着对于数据库管理等来说速度更快。

3. 文件系统挂载

  • 挂载是分配文件系统并通过将其连接到目录的一个过程。要使用文件系统,必须运行一个名为“mount”的特定函数,以便用户可以处理其实际内容。挂载使得多个文件系统可以在标准目录结构下被访问。

4. 文件系统的安全及其权限

  • 文件系统通过文件权限和其他形式的使用控制来实现安全措施。权限定义了谁有权读取、写入或执行文件。ACL 提供了详细的功能,允许安全实施者确定用户和组对数据的访问级别。

5. 虚拟文件系统 (VFS)

  • 通过开发虚拟文件系统 (VFS) 的结构,操作系统能够支持多种文件系统。VFS 还提供了文件系统的标准视图,例如可以允许 NTFS、FAT、ext4 或 NFS。这种抽象层使得文件共享更容易,因为它利用了各种存储和设备格式。

结论

Silberschatz、Galvin 和 Gagne 的《操作系统概念》一书涵盖了广泛的操作系统概念,从进程开始到分布式系统结束。然而,像内存、文件系统和安全等对任何操作系统至关重要的概念都得到了优先考虑,因此,通过简单的语言和示例对这些概念的理解变得更容易。

通过这些原理,读者可以获得操作系统如何管理资源、获得稳定性以及支持众多应用程序的知识。它对 IT 人员、程序员和学习者都有益,因为它能培养开发、诊断和执行当今信息技术结构的理解和能力。


下一个主题什么是伙伴系统