🚥操作系统 系列文章导航🚥

  1. 操作系统 第一章 计算机系统概述
  2. 操作系统 第二章 进程与线程

一、操作系统的基本概念

1.操作系统的概念

操作系统(Operating System,OS) 是指控制和管理整个计算机系统的硬件和软件资源,合理地组织、调度计算机的工作与资源的分配,进而为用户和其他软件提供方便接口与环境的程序集合,是计算机系统中最基本的系统软件。

即,①操作系统是系统资源的管理者;②向上层提供方便易用的服务;③是最接近硬件的一层软件。

image-20250324140458243

2.操作系统的功能和目标

(1)作为系统资源的管理者

提供的功能:

  • 处理机管理

  • 存储器管理

  • 文件管理

  • 设备管理

(2)向上层提供方便易用的服务

①给用户使用的:

图形用户接口(GUI,Graphical User Interface):即图形接口,用户使用形象的图形界面进行操作,不需要记忆复杂的指令和参数。

命令接口(CLI,Command Line Interface):包括以下两种

  • 联机命令接口:也叫交互式命令接口,用户输入一条命令,系统就执行一条,强调交互性(如 cmd 命令框)。

  • 脱机命令接口:也叫批处理命令接口,一次提出一堆的命令,然后交由系统执行,脱机用户不行直接干预作业的运行(如一个包含多条命令的文件)。

②给程序员使用的:

程序接口(API,Application Programming Interface):由一组系统调用(也叫广义指令)组成。用户在程序中使用这些系统调用来请求操作系统为其提供各种服务。

注意:命令接口和程序接口统称为用户接口,即狭义的用户接口不包括 GUI。

(3)作为最接近硬件的层次

需要实现对硬件机器的拓展。没有任何软件支持的计算机称为裸机,通常把覆盖了软件的机器称为扩充机器,又称之为虚拟机

3.操作系统的特征

操作系统的基本特征包括:并发、共享、虚拟、异步。其中,并发和共享是两个最基本的特征,两者互为存在条件。

(1)并发

并发:指两个或多个事件在同一时间间隔内发生。

宏观上是同时发生的,微观上是交替发生的。应与并行(两个或多个事件在同一时刻同时发生)区分。

  • 单核 CPU 同一时刻只能执行一个程序,各个程序只能并发地执行。

  • 多核 CPU 同一时刻可以同时执行多个程序,多个程序可以并行地执行。

在操作系统中,引入进程的目的是使程序能并发执行。

(2)共享

共享:即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。

资源共享主要分为以下两种:

  • 互斥共享方式:系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源。

  • 同时共享方式:系统中的某些资源,允许一个时间段内由多个进程 “同时” 对它们进行访问。

这里的同时通常是宏观上的,在微观上,这些进程可能是交替地对该资源进行访问(即分时共享)。

并发和共享的关系

  • 资源共享是以程序的并发为条件的,若系统不允许程序并发执行,则自然不存在资源共享问题。
  • 若系统不能对资源共享实施有效的管理,则必将影响到程序的并发执行,甚至根本无法并发执行。

(3)虚拟

虚拟是指将一个物理上的实体变为若干逻辑上的对应物。用于实现虚拟的技术称为虚拟技术

操作系统的虚拟技术可归纳为:时分复用技术(如虚拟处理器)和空分复用技术(如虚拟存储器)。

(4)异步

异步:在多道程序环境下,允许多个程序并发执行,但是由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是程序的异步性。

只有系统拥有并发性,才有可能导致异步性。

二、操作系统发展历程

1.手工操作阶段(此阶段无操作系统)

用户在计算机上算题的所有工作都要人工干预,如程序的装入、运行、结果的输出等。

缺点:①用户独占全机,虽然不会出现因资源已被其他用户占用而等待的现象,但资源利用率低。②CPU 等待手工操作,CPU 利用不充分。

2.批处理阶段(出现操作系统)

为解决人机矛盾及 CPU 和 I/O 设备之间速度不匹配的矛盾,出现了批处理系统。按照发展历程又分为单道批处理系统、多道批处理系统。

(1)单道批处理系统

引入脱机输入/输出技术,并由监督程序(操作系统的雏形)负责控制作业的输入、输出。

主要特征:

  • 自动性。在顺利的情况下,磁带上的一批作业能够自动地逐个运行,而无须人工干预。

  • 顺序性。磁带上的各道作业顺序地进入内存,先调入内存的作业先完成。

  • 单道性。内存中仅有一道程序运行,即监督程序每次从磁带上只调入一道程序进入内存运行,当该程序完成或发生异常情况时,才换入其后继程序进入内存运行。

缺点:内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU 有大量的时间是在空闲等待 I/O 完成。资源利用率依然很低。

(2)多道批处理系统

用户所提交的作业都先存放在外存上并排成一个队列,作业调度程序按一定的算法从后备队列中选择若干作业调入内存,它们在管理程序的控制下相互穿插运行,共享系统中的各种硬/软件资源。操作系统正式诞生。

image-20250325141846211

主要特征:多道、宏观上并行、微观上串行。

优点:资源利用率高,多道程序共享计算机资源,从而使各种资源得到充分利用;系统吞吐量大,CPU 和其他资源保持忙碌状态。

缺点:用户响应的时间较长;不提供人机交互能力(用户既不能了解自己程序的运行情况,也不能控制计算机)。

3.分时操作系统

计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。

主要特征

  • 同时性。也称多路性,指允许多个终端用户同时使用一台计算机。

  • 交互性。用户通过终端采用人机对话的方式直接控制程序运行,与同程序进行交互。

  • 独立性。系统重多个用户可以彼此独立地进行操作,互不干扰,单个用户感觉不到别人也在使用这台计算机,好像只有自己单独使用这台计算机一样。

  • 及时性。用户请求能够在很短时间内获得相应。

缺点:不能优先处理一些紧急任务。操作系统对各个用户/作业都是完全公平的,循环地为每个服务一个时间片,不区分任务的紧急性。

4.实时操作系统

在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。实时操作系统的主要特点是及时性和可靠性。

优点:能够优先响应一些紧急任务,某些紧急任务不需时间片排队。

实时操作系统分为两种:

  • 硬实时系统:必须在绝对严格的规定时间内完成处理。

  • 软实时系统:能接受偶尔违反时间规定。

其他几种操作系统

网络操作系统:是伴随着计算机网络的发展而诞生的,能把网络中各个计算机有机地结合起来,实现数据传送等功能,实现网络中各种资源的共享(如文件共享)和各台计算机之间的通信。

分布式操作系统:主要特点是分布性和并行性。系统中各台计算机地位相同,任何工作都可以分布在这些计算机上,由它们并行、协同完成这个任务。

个人计算机操作系统:如 Windows XP、MacOS,方便个人使用。

三、操作系统的运行环境

1.处理器运行模式

计算机系统中有两种程序,内核程序应用程序(用户自编程序)。

很多内核程序组成了操作系统内核,或简称内核(Kernel)。内核是操作系统最重要最核心的部分,也是最接近硬件的部分。

大多数操作系统的内核包括四个方面的内容:

  • 时钟管理:用于计时、进程切换等。

  • 中断机制:中断机制中,只有一小部分属于内核,它们负责保护和恢复中断现场的信息,转移控制权到相关的处理程序。这样可以减少中断的处理时间,提高系统的并行能力。

  • 原语:定义原语的直接方式是关中断。

  • 系统控制的数据结构及处理:常见的操作有进程管理存储器管理设备管理

注意:操作系统的功能未必都在内核中,如 GUI。

  • 操作系统内核作为管理者,有时会让 CPU 执行一些特权指令,如内存清零指令。这些指令影响重大,只允许管理者,即操作系统内核使用。

  • 应用程序只能使用非特权指令,它不能直接访问系统中的软硬件资源,仅限于访问用户的地址空间,防止应用程序对系统造成破坏。

在 CPU 设计和生成的时候就划分了特权指令和非特权指令,因此 CPU 执行一条指令前就能判断出其类型。

CPU 有两种状态,内核态(目态)用户态(也称管态、核心态)

  • 处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令。

  • 处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令。

内核态用户态的切换:PSW 中有一个二进制位,1 表示内核态,0 表示用户态。

  • 内核态 -> 用户态:执行一条特权指令——修改 PSW 的标志位为用户态,这个动作意味着操作系统将主动让出 CPU 使用权。

  • 用户态 -> 内核态:由中断引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回 CPU 的使用权。

2.中断和异常

在合适的情况下,操作系统会把 CPU 的使用权主动让给应用程序,中断或异常是让操作系统夺回 CPU 使用权的唯一途径(使 CPU 从用户态变为内核态)。

(1)中断的类型

中断(Interruption) 也称外中断,指来自 CPU 执行指令外部的事件,通常用于信息输入/输出。

中断分为可屏蔽中断 INTR不可屏蔽中断 NMI

异常(Exception) 也称内中断,指来自 CPU 执行指令内部的事件。异常不能被屏蔽,一旦出现,就应立即处理。

异常分为故障、自陷和终止:

  • 故障(Fault):指由指令执行引起的异常,如非法操作码、缺页故障、除数为 0、运算溢出等。

  • 自陷(Trap):也称陷入,是一种事先安排的异常事件,用于在用户态下调用操作系统内核程序,如条件陷阱指令、系统调用执行等。

  • 终止(Abort):指出现了使得 CPU 无法继续执行的硬件故障,如控制器出错、存储器校验错等。

故障异常和自陷异常属于软件中断(程序性异常),终止异常和外部中断属于硬件中断

(2)中断机制的基本原理

不同的中断信号,需要用不同的中断处理程序来处理。当 CPU 检测到中断信号后,会根据中断信号的类型去查询中断向量表,以此来找到相应的中断处理程序在内存中的存放位置。

中断处理程序一定是内核程序,需要运行在内核态

中断处理和子程序的区别

  1. 中断处理程序与被中断的当前程序是相互独立的,它们之间没有确定的关系;子程序与主程序是同一应用程序的两部分,它们属于主从关系。
  2. 通常中断的产生都是随机的;而子程序调用时通过调用指令(CALL)引起的,是由程序设计者事先安排的。
  3. 调用子程序的处理过程完全属于软件处理过程;而中断处理的过程还需要有专门的硬件电路才能实现。
  4. 中断处理程序的入口地址可由硬件向量法产生向量地址,再由向量地址找到入口地址;子程序的入口地址是由 CALL 指令中的地址码给出的。
  5. 调用中断处理程序和子程序都需要保护程序计数器(PC)的内容,前者由中断隐指令完成,后者由 CALL 指令完成(执行 CALL 指令时,处理器先将当前的 PC 值压入栈,再将 PC 设置为被调用子程序的入口地址)。
  6. 响应中断时,需对同时检测到的多个中断请求进行裁决,而调用子程序时没有这种操作。

3.系统调用

系统调用是操作系统提供给应用程序(程序员)使用的接口,可视为一种供应用程序调用的特殊公共子程序。

用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作(如存储分配、I/O 操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。

系统调用按照功能可以分为以下五种:

  • 设备管理:完成设备的请求或释放,以及设备启动等功能。

  • 文件管理:完成文件的读、写、创建及删除等功能。

  • 进程控制:完成进程的创建、撤销、阻塞及唤醒功能。

  • 进程通信:完成进程之间的消息传递或信号传递等功能。

  • 内存管理:完成内存的分配、回收以及获取作业占用内存区大小和起始地址等功能。

系统调用与函数调用的区别

image-20250326144048992

系统调用的过程

image-20250325162534980

注意

  • 陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,使 CPU 进入核心态。
  • 发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行。
  • 陷入指令也叫 trap 指令或访管指令。

四、操作系统结构

1.分层结构

分层法是将操作系统分为若干层,底层(层 0)为硬件,顶层(层 N)为用户接口。只有层 1 才能调用层 0 的硬件,每一层只能调用紧邻它的低层的功能和服务(单向依赖)。

image-20250326154136510

优点:①便于调试和验证,自底向上逐层调试验证。②易扩充和易维护,各层之间调用接口清晰固定。

缺点:①仅可调用相邻低层,难以合理定义各层的边界。②效率低,不可跨层调用,系统调用执行时间长。

2.模块化

模块化是将操作系统按功能划分为若干个具有一定独立性的模块。每个模块具有某方法的管理功能,并规定好各模块间的接口,使各模块之间能通过接口进行通信。还可以进一步将各模块细分为若干个具有一定功能的字模块,同样也规定好各个子模块之间的接口。这种设计方法被称为模块 - 接口法

image-20250326154553662

划分模块时要充分考虑模块的独立性问题,因为模块独立性越高,各模块间的交互就越少,系统的结构就越清晰。独立性主要有两个衡量标准:

  • 内聚性:模块内部各部分间联系的紧密程度。内聚性越高,模块独立性越好。

  • 耦合性:模块间相互联系和相互影响的程序。耦合性越低,模块独立性越好。

优点:①模块间逻辑清晰易于维护,确定模块间接口后即可多模块同时开发。②支持动态加载新的内核模块,增强 OS 适应行。③任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高。

缺点:①模块间的接口定义未必合理、实用。②模块间相互依赖,更难调试和验证。

3.宏内核与微内核

从操作系统的内核架构来划分,可以分为宏内核和微内核:

宏内核:也称单内核或大内核,是指将系统的主要功能模块都作为一个紧密联系的整体运行在内核态,从而为用户程序提供高性能的系统服务。

微内核:将内核中最基本的功能保留在内核,而将那些不需要再内核态执行的功能移到用户态执行,从而降低内核的设计复杂性。

image-20250326151617848

以一个同时涉及到进程管理、存储管理、设备管理三种操作系统服务的程序为例,在大内核架构下,CPU 只需要完成两次状态转换,而在微内核架构下则需要完成六次状态转换。频繁地状态转换会降低系统的性能。

在微内核架构下,操作系统的绝大部分功能都放在微内核外的一组服务器(进程)中实现,如用于提供对进程(线程)进行管理的进程(线程)服务器、提供虚拟存储器管理功能的存储器服务器等,它们都是作为进程来实现的,运行在用户态,客户与服务器之间是借助微内核提供的消息传递机制来实现的,如下图(水印走开啊啊啊啊):

image-20250326195345563

微内核的基本功能:采用机制与策略分离的原理

  • 进程(线程)管理:进程(线程)之间的通信功能是微内核 OS 最基本的功能,此外还有进程的切换、进程的调度、以及多处理机之间的同步等功能。为了实现进程调度功能,需要在进程管理中设置一个或多个优先级队列,这部分属于调度功能的机制部分,放入微内核;而对用户进程如何分类,以及优先级的确认方式,则属于策略部分,放入微内核外的进程管理服务程序中。

  • 低级存储器管理:微内核中只配置最基本的低级存储器管理机制,如用于实现将逻辑地址变为物理地址等的页表机制和地址变换机制,这一部分是依赖于硬件的,因此放入微内核;而实现虚拟存储器管理的策略,如采用何种页面置换算法、何种内存分配与回收的策略,这部分应放在微内核外的存储器管理服务中。

  • 中断和陷入处理:微内核需要捕获所发生的中断和陷入事件,并进行中断响应处理,在识别中断或陷入的事件后,再发送给相关的用户态服务器来处理。

微内核的优点

  • 扩展性和灵活性:许多功能从内核分离出来,当需要修改或新增某些功能时,只需在相应的服务器中修改或新增功能,或再增加一个专用的服务器,而无需改动内核代码。

  • 可靠性和安全性:只有微内核运行在内核态,其余模块都运行在用户态,一个模块中的错误只会使这个模块崩溃,而不会使整个系统崩溃。

  • 可移植性:与 CPU 和 I/O 硬件有关的代码均放在内核中,而其他各种服务器均与硬件平台无关,因而将操作系统已知道另一个平台上所需做的修改是比较小的。

  • 分布式计算:客户和服务器之间、服务器和服务器之间的通信采用消息传递机制,使得微内核系统能够很好地支持分布式系统和网络系统。

微内核系统的主要问题是性能问题,因此目前主流的操作系统,如 Windows、Android、iOS、macOS、Linux 等都是基于宏内核的架构,但微内核因其高度的可靠性,在实时、工业、航空及军事应用中广泛流行。

4.外核

一种称为外核(exokernel)的程序在内核态中运行,能够给用户进程直接分配 “不虚拟、不抽象” 的硬件(如非虚拟的地址空间),并限制进程只能使用已经申请并且获得分配的那部分资源、保证这些硬件资源使用的安全性(资源隔离和保护)。

优点:①减少了传统内核中频繁的上下文切换和系统调用开销,应用程序可以直接操作硬件。②减少了虚拟硬件资源的映射层,提升效率。③能够将多道程序(在外核内)与用户程序(在用户空间内)加以分离,并且相应的负载并不重,因为外核所做的只是保持多个虚拟机彼此不发生冲突。

缺点:①降低了系统的一致性。②使系统变得更复杂。

五、操作系统引导

操作系统引导是指计算机利用 CPU 运行特定程序,通过程序识别硬盘,识别硬盘分区,识别硬盘分区上的操作系统,最后通过程序启动操作系统,一环扣一环地完成上述过程。

image-20250326202654151

常见操作系统的引导过程:

  1. 激活 CPU。激活的 CPU 读取 ROM 中的 boot 程序,将指令寄存器置为 BIOS(基本输入/输出系统)的第一条指令,即开始执行 BIOS 的指令。

  2. 硬件自检。BIOS 程序在内存最开始的空间中构建中断向量表,接下来的 POST(通电自检)过程要用到中断功能。然后进行通电自检,检查硬件是否出现故障。如有故障,主板会发出不同含义的蜂鸣,启动终止;如无故障,屏幕会显示 CPU、内存、硬盘等信息。

  3. 加载带有操作系统的硬盘。通电自检后,BIOS 开始读取 Boot Sequence(通过 CMOS 里保存的启动顺序,或者通过与用户交互的方式),将控制权交给启动顺序排在第一位的存储设备,然后 CPU 将该存储设备引导至扇区的内容加载到内存中。

  4. 加载主引导记录(MBR)。硬盘以特定的标识符区分引导硬盘和非引导硬盘。若发现一个存储设备不是可引导盘,就检查下一个存储设备。如无其他启动设备,就会死机。主引导记录 MBR 的作用是告诉 CPU 去硬盘的哪个分区去找操作系统。

  5. 扫描硬盘分区表,并加载硬盘活动分区。MBR 包含硬盘分区,硬盘分区表以特定的标识符区分活动分区和非活动分区。主引导记录扫描硬盘分区表,进而识别含有操作系统的硬盘分区(活动分区)。找到硬盘活动分区后,开始加载硬盘活动分区,将控制权交给活动分区。

  6. 加载分区引导记录(PBR)。读取活动分区的第一个扇区,这个扇区称为分区引导记录(PBR),其作用是寻找并激活分区根目录下用于引导操作系统的程序(启动管理器)。

  7. 加载启动管理器。分区引导记录搜索活动分区中的启动管理器,加载启动管理器。

  8. 加载操作系统。将操作系统的初始化程序加载到内存中执行。

六、虚拟机

虚拟机是指利用虚拟化技术,将一台物理机器虚拟化为多台虚拟机器(Virtual Machine,VM),通过隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算机环境。

而想要实现这个虚拟过程就要使用到虚拟机管理程序(Virtual Machine Monitor,VMM),也叫虚拟机监控程序(Virtual Machine Hypervisor)

第一类 VMM,直接运行在硬件上

只有 VMM 运行在内核态,可以使用特权指令。而上层的操作系统和应用程序实际上是运行在用户态的。然而虚拟机上的操作系统认为自己运行在内核态(实际上不是),称为虚拟内核态。当虚拟机操作系统执行了一条 CPU 处于内核态才允许执行的命令时,会陷入 VMM。在支持虚拟化的 CPU 上,VMM 检查这条指令是由虚拟机中的操作系统执行的还是由用户执行的。若是前者,则 VMM 将安排这条指令功能的正确执行。否则,VMM 将模拟真实硬件面对用户态执行敏感指令时的行为(重拳出击)。

对于不支持虚拟化的 CPU,真实硬件不会直接执行虚拟机中的敏感指令,这些敏感指令被转为对 VMM 的调用,由 VMM 模拟这些指令的功能。

image-20250327150703139

第二类 VMM,运行在宿主操作系统上

第二类 VMM 是一个依赖于 WIndows、Linux 等操作系统分配和调度资源程序,很像一个普通的进程。

常用的第二类 VMM 有:VirtualBox、VMware Workstation,其中 VMware Workstation 是首个 x86 平台上的第二类 VMM。

image-20250327150725645

运行在两类 VMM 上的操作系统都称为客户操作系统,对于第二类 VMM,运行在底层硬件上的操作系统称为宿主操作系统

有的教程将第一类虚拟化技术称为裸金属架构,第二种虚拟化技术称为寄居架构

两类 VMM 的对比

第一类 VMM 第二类 VMM
对物理资源的控制权 直接运行在硬件上,能直接控制和分配物理资源 运行在 Host OS 之上,依赖于 Host OS 为其分配物理资源
资源分配方式 在安装 Guest OS 时,VMM 要在原本的硬盘上自行分配存储空间,类似于外核的分配方式,分配未经抽象的物理硬件 Guest OS 拥有自己的虚拟磁盘,该盘实际上是 Host OS 文件系统中的一个大文件。Guest OS 分配到的内存是虚拟内存
性能 性能更好 性能更差,需要 Host OS 作为中介
可支持的虚拟机数量 更多,不需要和 Host OS 竞争资源,相同的硬件资源可以支持更多的虚拟机 更少,Host OS 本身需要使用物理资源,Host OS 上运行的其他进程也需要物理资源
虚拟机的可迁移性 更差 更好,只需导出虚拟机镜像文件即可迁移到;另一台 Host OS 上,商业化应用更广泛。
运行模式 第一类 VMM 运行在最高特权级(Ring 0),可以执行最高特权的指令 第二类 VMM 部分运行在用户态、部分运行在内核态。Guest OS 发出的系统调用会被 VMM 截获,并转化为 VMM 对 Host OS 的系统调用

注意:支持虚拟化的 CPU 通常分更多指令等级。这样 VMM 就不用检查每一条特权指令的执行,只需要检查某一些敏感指令的执行即可。

image-20250327145235872