第一章 操作系统基础

考研考点
image-20260504130047990


一、操作系统的基本概念

1. 操作系统的概念

操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • ① 操作系统是系统资源(软件和硬件)的管理者。
  • ② 操作系统向上层(用户和其它软件)提供方便易用的服务。
  • ③ 操作系统是最接近硬件的一层软件。

【图示】打开 Windows 操作系统的“任务管理器”
image-20260504130121596

2. 操作系统的功能

2.1 作为系统资源的管理者

image-20260504130153940
注意:执行一个程序前需要将该程序放到内存中,才能被CPU处理。

【示例】用QQ和朋友视频聊天的过程

  • Step 1:在各个文件夹中找到 QQ 安装的位置(如 D:/Tencent/QQ/Bin)-----> 逐层打开文件夹,找到QQ.exe这个程序(可执行文件)的存放位置。
  • Step 2:双击打开 QQ.exe -----> 需要把该程序相关数据放入内存
  • Step 3:QQ 程序正常运行 -----> 对应的进程被处理机(CPU)处理
  • Step 4:开始和朋友视频聊天 -----> 需要将摄像头设备分配给进程
2.2 向上层提供方便易用的服务

(1) 封装思想:操作系统把一些丑陋的硬件功能封装成简单易用的服务,使用户能更方便地使用计算机,用户无需关心底层硬件的原理,只需要对操作系统发出命令即可。
image-20260504130235523

(2) 常用的系统调用
① open():打开文件,并获取文件描述符。
② read():读取文件。
③ write():向文件中写入内容。
④ close():关闭对文件描述符的引用。
⑤ exit():立即终止一个进程

【示例】一个C语言程序代码

#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
	char *buf = malloc(sizeof(char)*1024);
	ssize_t bytes_read; // long int
	//打开文件
	int fd = open("io.txt",O_RDONLY);
	if(fd == -1)
	{
		printf("open");
		exit(EXIT_FAILURE);  //非0都是表示错误  EXIT_FAIURE 1
	}
	while((bytes_read = read(fd,buf,sizeof(buf)) )> 0)
	{
		//STDOUT_FILENO : 文件描述符类型的标准输出 
		//stdin : 0   stdout : 1 stderr : 2
		write(STDOUT_FILENO,buf,bytes_read); 
	}

	if(bytes_read == -1)
	{
		perror("read");
		close(fd);
		exit(1);
	}
	close(fd);
	
	return 0;
}
2.3 操作系统是最接近硬件的一层软件

操作系统可以实现对硬件机器的拓展。
通常把覆盖了软件的机器称为扩充机器,又称之为虚拟机

3. 操作系统的特征

  • 并发
  • 共享
  • 虚拟
  • 异步

其中并发和共享是最基本的两个特征,二者互为存在条件。

3.1 并发
  • 概念:指两个或多个事件在同一时间间隔内发生。这些事情在宏观上是同时发生的,但在微观上是交替发生的。
  • 重点:
    • 与并行易混淆,并行指两个或多个事件在同一时刻同时发生。
    • 单核CPU同一时刻只能执行一个程序,各个程序只能并发地执行。
    • 多核CPU同一时刻可以同时执行多个程序,多个程序可以并行地执行。

注意:多核CPU是指在一个处理器(芯片)中集成了两个或更多个独立的处理核心(core)。每个核心都能够独立执行指令和处理数据,这种设计使得多核CPU能够同时处理多个任务或线程,从而提高了计算效率和整体性能。

3.2 共享

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

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

【示例】
互斥共享方式:使用QQ和微信视频。同一时间段内摄像头只能分配给其中一个进程。
同时共享方式:使用QQ发送文件A,同时使用微信发送文件B。宏观上看,两边都在同时读取并发送文件,说明两个进程都在访问硬盘资源,从中读取数据。微观上看,两个进程是交替着访问硬盘的。

3.3 虚拟

虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的。

  • 空分复用技术(虚拟存储器技术)
  • 时分复用技术(虚拟处理器技术)

显然,如果失去了并发性,则一个时间段内系统中只需运行一道程序,那么就失去了实现虚拟性的意义了。因此,没有并发性,就谈不上虚拟性。

3.4 异步
  • 异步指在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
  • 如果失去了并发性,即系统只能串行地运行各个程序,那么每个程序的执行会一贯到底。只有系统拥有并发性,才有可能导致异步性。

二、操作系统的发展

  • 手工操作阶段:利用纸带机打孔写代码传给计算机进行输入输出

  • 批处理阶段:

    • 单道批处理系统:引入脱机输入/输出技术(外围机+磁带完成),并由监督程序负责控制作业的输入,输出。
      • 优:缓解人机速度矛盾。
      • 缺:资源利用率依然很低。
    • 多道批处理系统操作系统正式诞生,用于支持多道程序并发执行。
      • 优:
        • 多道程序并发执行,资源利用率高,故具有并发的特点。
        • 中断技术使得多道批处理系统的I/O设备可与CPU并行工作,故具有并行的特点。
      • 缺:不提供人机交互功能
  • 分时操作系统:计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互

    • 优:
      • 提供人机交互功能。
      • 比较快速响应用户(分时系统追求的目标),因为分时系统采用了时间片轮转法来调度进程,可以使得每个任务在较短的时间内得到响应,提高用户的满意度。
    • 缺:不能优先处理紧急任务。
  • 实时操作系统:

    • 硬实时系统:必须在绝对严格的规定时间内完成处理。如:导弹控制系统、自动驾驶系统。
    • 软实时系统:能接受偶尔违反时间规定。如:12306火车订票系统。
    • 优:能优先处理紧急任务,具有及时性和可靠性。
  • 网络操作系统:实现各台计算机之间数据的相互传送

  • 分布式操作系统:若干计算机相互协同完成同一任务

  • 个人计算机操作系统:广泛应用于文字处理、电子表格、游戏中,常见的有Windows、Linux和MacOS等。

三、程序运行环境

1. CPU运行模式

1.1 基本概念

(1) 内核程序和应用程序

  • 普通程序员写的程序就是“应用程序”,例如:QQ,微信。
  • 实现操作系统的程序员写的就是”内核程序“,由众多内核程序组成”操作系统的内核“。

重点:内核就是操作系统最重要最核心的部分,也是最接近硬件的部分。

(2) 特权指令和非特权指令

  • 应用程序只能执行非特权指令。如:加法指令、减法指令等。
  • 特权指令只允许由内核来使用。如:内存清零指令。

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

(3) 内核态和用户态
CPU有两种状态:内核态和用户态

  • 处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令,内核态又叫核心态、管态。
    • 只能运行在内核态的指令:置时钟指令、系统调用命令等。
  • 处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令,用户态又叫目态。
    • 所有汇编指令都可以运行在用户态。如:取数指令、寄存器清零、读时钟指令等。
  • 区分CPU处于哪种状态:CPU中有一个寄存器叫程序状态寄存器(PSW),其中有个二进制位,1表示内核态,0表示用户态

注意:指令的调用和执行可能在不同的CPU状态。例如系统调用可能发生在用户态,但系统调用的执行一定在内核态。

(4) 内核态和用户态的切换

  • 内核态—>用户态:执行一条特权指令-----修改PSW的标志位为用户态,这个操作意味着操作系统主动让出CPU使用权。
  • 用户态—>内核态:由中断引发硬件自动完成状态转变过程,触发中断信号意味着操作系统将强行夺回CPU使用权。

注意:系统调用的底层也是中断(内中断)。在系统进行调用时,触发int 0x80中断处理。

1.2 操作系统的内核

内核是计算机上配置的底层软件,是操作系统最基本、最核心的部分。实现操作系统内核功能的那些程序就是内核程序
image-20260504130310498

(1) 时钟管理
在计算机的各种部件中,时钟是关键设备。功能如下:

① 一是计时,操作系统需要通过时钟管理,向用户提供标准的系统时间;
② 另外,通过时钟中断的管理,可以实现进程的切换。例如,在分时操作系统中采用时间片轮转调度,在实时系统中按截止时间控制运行,在批处理系统中通过时钟管理来衡量一个作业的运行程度等。因此,系统管理的方方面面无不依赖于时钟。

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

(3) 原语
按层次结构设计的操作系统,底层必然是一些可被调用的公用小程序,它们各自完成一个规定的操作,通常将具有这些特点的程序称为原语(Atomic Operation)。它们的特点如下:

  • 处于操作系统的底层,是最接近硬件的部分。
  • 这些程序的运行具有原子性,其操作只能一气呵成(出于系统安全性和便于管理考虑)。
  • 这些程序的运行时间都较短,而且调用频繁。

定义原语的直接方法是关中断,让其所有动作不可分割地完成后再打开中断。系统中的设备驱动、CPU切换、进程通信等功能中的部分操作都可定义为原语,使它们成为内核的组成部分。

(4) 对系统资源进行管理的功能
系统中用来登记状态信息的数据结构很多,如作业控制块、进程控制块(PCB)一设备控制块、各类链表、消息队列、缓冲区、空闲区登记表、内存分配表等。为了实现有效的管理,系统需要一些基本的操作,常见的操作有以下3种:
① 进程管理。进程状态管理、进程调度和分派、创建与撤销进程控制块等。
② 存储器管理。存储器的空间分配和回收、内存信息保护程序、代码对换程序等。
③ 设备管理。缓冲区管理、设备分配和回收等。

注意:有的操作系统不把这部分功能归为“内核功能”。也就是说,不同的操作系统,对内核功能的划分可能并不一样。

2. 中断和异常

2.1 中断的作用
  • 中断是让操作系统内核夺回CPU使用权的唯一途径(使CPU从用户态转变为内核态)。
  • 如果没有中断机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序,因此没有中断就没有并发
2.2 中断的类型
  • 内中断(也称异常)
    • 软件中断:
      • 故障:指令执行引发的异常,如非法代码、缺页故障、除数为0、运算溢出等。
      • 陷入(trap):是一种事先安排的“异常”事件,用于在用户态下调用操作系统内核程序,如条件陷阱指令系统调用指令等。
    • 硬件中断:
      • 终止
  • 外中断(又称中断)
    • 可屏蔽中断(Maskable Interrupt)
      • 可屏蔽中断是由外部设备(如硬盘、网卡等)产生的中断信号,通过CPU的INTR(Interrupt Request)引脚进入CPU。
      • 这类中断可以通过软件设置来屏蔽,即当外部设备有中断请求时,CPU可以根据标志寄存器(如eflags寄存器的IF位)中的设置决定是否响应这些中断请求。
      • 如果IF位为0,CPU将禁止响应任何外设的中断请求;如果IF位为1,CPU则允许响应这些请求。
    • 不可屏蔽中断(Non-Maskable Interrupt,NMI)
      • 不可屏蔽中断是一种特殊的中断类型,它通过CPU的NMI引脚进入CPU。
      • 这类中断不能被软件屏蔽,即一旦有不可屏蔽中断请求发生,CPU必须立即响应并处理该中断。
      • 不可屏蔽中断通常用于处理那些对系统安全或稳定性至关重要的紧急情况,如电源故障、硬件错误等。

外中断有时钟中断I/O中断请求等。

【示例】trap指令
有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令——陷入指令,该指令会引发一个内部中断信号。
执行“陷入指令”,意味着应用程序主动地将CPU控制权还给操作系统内核。“系统调用”就是通过陷入指令完成的。

2.3 中断机制的基本实现原理

① 检查中断信号

  • 内中断:CPU在执行指令时会检查是否有异常发生
  • 外中断:每个指令周期末尾,CPU都会检查是否有外中断信号需要处理

② 找到相应的中断处理程序

  • 不同的中断信号,需要用不同的中断处理程序来处理。当CPU检测到中断信号后,会根据中断信号的类型去查询“中断向量表(以数组的形式存放)”,以此来找到相应的中断处理程序在内存中的存放位置。
    image-20260504130325786

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

  • 在执行中断处理程序时,操作系统负责

    • 初始化中断向量表;
    • 保存中断屏蔽字;
    • 保存各通用寄存器的值,不包括程序计数器PC,PC的值是由中断隐指令自动保存的;
    • 提供中断服务。
2.4 中断处理和子程序调用的比较

中断处理程序被中断的当前程序相互独立的;子程序主程序属于主从关系
中断通常是随机产生的;而子程序调用是通过调用指令(CALL)引起的,是由程序设计者实现安排的。
调用子程序的过程完全属于
软件处理
过程;而中断处理的过程还需要专门的硬件电路才能实现。
中断处理程序的入口地址可有硬件向量法产生向量地址,再由向量地址找到入口地址子程序的入口地址是由CALL指令的地址码给出的。
调用中断处理程序子程序都需要保护 程序计数器(PC) 的内容,前者由中断隐指令完成,后者由CALL指令完成(执行CALL指令时,处理器先将当前的PC值压入栈,再将PC设置为被调用子程序的入口地址)。

3. 系统调用

3.1 基本概念
  • 概念:系统调用是操作系统提供给应用程序使用的接口,可以理解为一种可供应用程序调用的特殊函数。故系统调用是由用户进程发起的,请求操作系统的服务
  • 作用:应用程序可以通过系统调用来请求获得操作系统内核的服务。如打开文件创建新进程等。
  • 在执行系统调用时,操作系统需要完成(与中断处理类似):
    • 保存通用寄存器的内容;
    • 执行系统调用服务例程。
3.2 系统调用与库函数的区别

image-20260504130338518

  • 有的库函数不涉及系统调用,如“取绝对值”的函数。
  • 有的库函数涉及系统调用(对系统调用进一步封装),如“创建一个新文件”的函数。
  • 库函数运行在用户态,系统调用运行在内核态。
3.3 什么功能要用到系统调用

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

  • 设备管理:完成设备的请求/释放/启动等功能
  • 文件管理:完成文件的读/写/创建/删除等功能
  • 进程控制:完成进程的创建/撤销/阻塞/唤醒等功能
  • 进程通信:完成进程之间的消息传递/信号传递等功能
  • 内存管理:完成内存的分配/回收等功能

【示例】打印
去学校打印店打印论文,你按下了WPS的“打印”选项,打印机开始工作。
你的论文打印到一半时,另一位同学按下了Word的“打印”按钮,开始打印他自己的论文。

两个进程并发运行,打印机设备交替地收到WPS和Word两个进程发来的打印请求,结果两篇论文的内容混杂在一起了…
解决方法:由操作系统内核对共享资源进行统一的管理,并向上提供“系统调用”,用户进程想要使用打印机这种共享资源,只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理。

3.4 系统调用的过程

①传递系统调用参数–>②执行陷入(trap、访管)指令(用户态)–>③执行相应的请求内核程序处理系统调用(核心态)–>④返回应用程序
image-20260504130355485

注意:

  • 陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,使CPU进入核心态
  • 发出系统调用请求是在用户态,而对系统调用的相应处理核心态下进行。
  • ⭐系统调用的过程中(对应计组的I/O中断):
    • 由硬件完成的操作有:① 由中断隐指令保存断点和程序状态字;② 由CPU将CPU模式改为内核态。
    • 由操作系统完成的操作有:① 保存通用寄存器的内容;② 执行系统调用服务例程(程序)。

四、操作系统的体系结构

1. 传统操作系统模式

1.1 分层结构

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

  • 分层法的优点:
    ① 便于系统的调试和验证,简化了系统的设计和实现。第1层可先调试而无
    须考虑系统的其他部分,因为它只使用了基本硬件。第1层调试完且验证正确之后,就可以调试第2层,如此向上。若在调试某层时发现错误,则错误应在这一层上,这是因为它的低层都调试好了。
    ② 易扩充和易维护。在系统中增加、修改或替换一层中的模块或整层时,只要不改变相应层间的接口,就不会影响其他层。

  • 分层法的问题:
    ① 合理定义各层比较困难。因为依赖关系固定后,往往就显得不够灵活。
    ② 效率较差。操作系统每执行一个功能,通常要自上而下地穿越多层,各层之间都有相应的层间通信机制,这无疑增加了额外的开销,导致系统效率降低。

1.2 模块化

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

  • 模块的划分:高内聚低耦合

  • 模块化的优点:
    ① 提高了操作系统设计的正确性、可理解性和可维护性;
    ② 增强了操作系统的可适应性;
    ③ 加速了操作系统的开发过程。

  • 模块化的缺点:
    ① 模块间的接口规定很难满足对接口的实际需求。
    ② 各模块设计者齐头并进,每个决定无法建立在上一个已验证的正确决定的基础上,因此无法找到一个可靠的决定顺序。

1.3 宏(大)内核

image-20260504130437301
从操作系统的发展来看,宏内核获得了绝对的胜利,目前主流的操作系统,如Windows、Android、iOS、macOS、Linux等,都是基于宏内核的构架。但也应注意到,微内核和宏内核一直是同步发展的,目前主流的操作系统早已不是当年纯粹的宏内核构架了,而是广泛吸取微内核构架的优点而后揉合而成的混合内核。

2. 微内核

image-20260504130448923

微内核特征:
① 内核足够小
微内核OS的核心思想是将操作系统的核心功能精简到最小,只保留最基本的、必要的系统服务,如进程(线程)管理低级存储器管理中断和异常处理等。

② 基于客户/服务器模型
在微内核OS中,操作系统被划分为多个相对独立的模块,这些模块之间通过客户/服务器(C/S)模型进行交互。内核作为服务器,提供基本的服务接口;而用户程序和其他系统服务则作为客户端,通过系统调用或消息传递机制向内核请求服务。这种模型使得系统各模块之间的耦合度降低,提高了系统的模块化和可扩展性。同时,由于客户/服务器模型支持分布式处理,也使得微内核OS更加适合构建分布式系统

③ 应用“机制与策略分离”原理
机制”指的是实现某一功能的具体执行机构或方法,它决定了“如何做”(how);而“策略”则是在机制的基础上,通过某些参数和算法来实现功能的优化或达到不同的功能目标,它决定了“做什么”(what)。在微内核OS中,通常将机制放在内核中,而策略则放在用户空间中,通过服务进程或线程来实现。这种设计使得系统更加灵活,因为用户可以根据需要轻松地更换或调整策略,而无需修改内核代码。同时,由于策略与机制的分离,也使得系统的安全性得到提高,因为内核只负责提供基本的机制支持,而具体的策略实现则可以在用户空间中进行严格的权限控制和审计。

④ 采用面向对象技术

3. 外核(exokernel)

  • 不同于虚拟机克隆真实机器,另一种策略是对资源进行划分,为每个用户分配整个资源的个子集。例如,某虚拟机可能得到磁盘的01023盘块,而另一虚拟机得到磁盘的10242047盘块等。在底层,种称为外核(exokernel)的程序在内核态中运行。它的任务是为虚拟机分配资源,并检查这些资源使用的安全性,以确保没有机器会使用他人的资源。每个用户的虚拟机可以运行自己的操作系统,但限制只能使用已经申请并且获得分配的那部分资源。
  • 外核机制的优点是减少了资源的“映射层”。在其他设计中,每个虚拟机系统都认为它拥有完整的磁盘(或其他资源),这样虚拟机监控程序就必须维护一张表格以重映像磁盘地址,有了外核,这个重映射处理就不需要了。外核只需要记录已分配给各个虚拟机的有关资源即可。
  • 这种方法还有一个优点,它将多道程序(在外核内)与用户操作系统代码(在用户空间内)加以分离,而且相应的负载并不重,因为外核所做的只是保持多个虚拟机彼此不发生冲突。

4. 各结构的优缺点

结构 特征、思想 优点 缺点
分层结构 内核分多层,每层可单向调用更低一层提供的接口。 ① 便于调试和验证,自底向上逐层调试验证;② 易扩充和易维护,各层之间调用接口清晰固定。 ① 仅可调用相邻低层;② 难以合理定义各层的边界,设计困难(主要);③ 效率低,不可跨层调用,系统调用执行时间长。
模块化 将内核划分为多个模块,各模块之间相互协作;内核 = 主模块+可加载内核模块;主模块:只负责核心功能,如进程调度、内存管理;可加载内核模块:可以动态加载新模块到内核,而无需重新编译整个内核。 ① 模块间逻辑清晰易于维护,确定模块间接口后即可多模块同时开发;② 支持动态加载新的内核模块(如:安装设备驱动程序、安装新的文件系统模块到内核),增强OS适应性;③ 任何模块都可以直接调用其他模块,无需采用息传递进行通信,效率高。 ① 模块间的接口定义未必合理、实用;② 模块间相互依赖,更难调试和验证。
宏内核(大内核) 所有的系统功能都放在内核里(大内核结构的OS通常也采用了"模块化“的设计思想)。 性能高,内核内部各种功能都可以直接相互调用。 ① 内核庞大功能复杂,难以维护;② 大内核中某个功能模块出错,就可能导致整个系统崩溃。
微内核 只把中断、原语、进程管理等最核心的功能放入内核。文件管理、设备管理等功能以用户进程的形式运行在用户态。 ① 内核小功能少、易于维护,内核可靠性高;② 内核外的某个功能模块出错不会导致整个系统崩溃。 ① 性能低,需要频繁的切换用户态/核心态。用户态下的各功能模块不可以直接相互调用,只能通过内核的"消息传递“来间接通信;② 用户态下的各功能模块不可以直接相互调用,只能通过内核的"消息传递“来间接通信。
外核(exokernel) 内核负责进程调度进程通信等功能,外核负责为用户进程分配未经抽象的硬件资源,且由外核负责保证资源使用安全。 ① 外核可直接给用户进程分配“不虚拟、不抽象"的硬件资源,使用户进程可以更灵活的使用硬件资源;② 减少了虚拟硬件资源的"映射层”,提升效率。 ① 降低了系统的一致性;② 使系统变得更复杂。

五、操作系统引导

在开机时如何让操作系统运行起来,这就是操作系统引导做的事情。

1. 磁盘

image-20260504130505356

  • 主引导记录MBR:告诉CPU去硬盘的哪个主分区找操作系统
    • 磁盘引导程序:在系统启动时,初始化硬件设备、加载系统文件和执行必要的初始化操作,最终将控制权交给操作系统。
    • 分区表:一种数据结构,存储了该磁盘当中每一个盘每一个分区占用多少空间以及每个分区的地址范围,以及以特定的标识符区分活动分区和非活动分区
  • 分区引导记录PBR:寻找并激活分区根目录下用于引导操作系统的程序(启动管理器)。
  • C盘安装了操作系统并且用C盘来启动操作系统,这种情况下称C盘为这个磁盘的活动分区

注意:操作系统要启动,操作系统的数据都要放到主存里面,但常驻内存的只是操作系统内核,其他部分仅在需要的时候调用。

2. 操作系统的引导过程

操作系统的引导过程是指从计算机开机操作系统完全加载并开始运行的一系列步骤。
image-20260504130514034
常见操作系统的引导过程如下:
激活CPU。激活的CPU读取ROM中的引导(boot)程序,将指令寄存器置为BIOS(基本输入/输出系统)的第一条指令,即开始执行BIOS的指令。

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

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

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

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

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

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

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

六、虚拟机

使用虚拟化技术,将一台物理机器虚拟化为多台虚拟机器,每个虚拟机器都可以独立运行一个操作系统。

1. 第一类VMM

直接运行在硬件上。
image-20260504130607612

2. 第二类VMM

运行在宿主操作系统上,我们较为常用的,例如:VirtualBox,VMware。
image-20260504130617867

3. 两类虚拟机管理程序对比

比较方面 第一类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运行在最高特权级(Ring0),可以执行最高特权的指令。 第二类VMM部分运行在用户态、部分运行在内核态。Guest OS 发出的系统调用会被 VMM 截获,并转化为 VMM 对 Host OS 的系统调用

4. 拓展

4.1 云计算与虚拟化技术
  • 定义:云计算是通过网络将庞大的计算处理资源共享给多用户使用的一种计算方式,其最大的特点是“按需服务”和“弹性扩展”。而虚拟化技术则是一种能够将物理资源抽象、转换后再呈现给用户的技术,通过这种技术可以模拟出一台或者多台虚拟的计算机。
  • 关系:虚拟化技术是云计算的基础技术能力之一,云计算的实现离不开虚拟化技术的支持。可以说,云计算包含虚拟化,虚拟化是云计算的重要组成部分。
4.2 云主机(云服务器)与虚拟化技术

云服务器,简称云主机,是一种基于云计算的虚拟服务器。它通过云计算平台提供远程计算资源,使用户能够在互联网上按需使用计算资源。云服务器的基本工作原理是通过虚拟化技术将物理服务器分割成多个虚拟服务器,每个虚拟服务器都拥有独立的操作系统和资源。这种虚拟化技术使得云服务器可以在同一物理服务器上运行多个应用,提高了资源利用率。

七、本章疑难点

1. 并行性与并发性的区别和联系

并行性和并发性是既相似又有区别的两个概念。

  • 并行性是指两个或多个事件在同一时刻发生并发性是指两个或多个事件在同一时间间隔内发生
  • 在多道程序环境下,并发性是指在一段时间内,宏观上有多个程序同时运行,但在单处理器系统中每个时刻却仅能有一道程序执行,因此微观上这些程序只能分时地交替执行。若在计算机系统中有多个处理器,则这些可以并发执行的程序便被分配到多个处理器上,实现并行执行,即利用每个处理器来处理一个可并发执行的程序。

2. 特权指令与非特权指令

特权指令是指有特殊权限的指令,由于这类指令的权限最大,使用不当将导致整个系统崩溃,如清内存、置时钟、分配系统资源、修改虚存的段表或页表、修改用户的访问权限等。若所有程序都能使用这些指令,则系统一天死机n次就不足为奇。为保证系统安全,这类指令不能直接提供给用户使用,因此特权指令必须在内核态执行。实际上,CPU在内核态下可以执行指令系统的全集。形象地说,特权指令是那些儿童不宜的东西,而非特权指令是老少皆宜的东西。
为了防止用户程序中使用特权指令,用户态下只能使用非特权指令,内核态下可以使用全部指令。在用户态下使用特权指令时,将产生中断以阻止用户使用特权指令。所以将用户程序放在用户态下运行,而操作系统中必须使用特权指令的那部分程序在内核态下运行,从而保证了系统的安全性和可靠性。从用户态转换为内核态的唯一途径是中断或异常。

3. 访管指令与访管中断

访管指令(trap指令)是一条在用户态下执行的指令。在用户程序中,因要求操作系统提供服务而有意识地使用访管指令,从而产生一个中断事件(自愿中断),将操作系统转换为内核态,称为访管中断。访管中断由访管指令产生,程序员使用访管指令向操作系统请求服务。

为什么要在程序中引入访管指令呢?
这是因为用户程序只能在用户态下运行。若用户程序想要完成在用户态下无法完成的工作,该怎么办?解决这个问题要靠访管指令。访管指令本身不是特权指令,其基本功能是让程序拥有“自愿进管”的手段,从而引起访管中断。

4. 定义微内核结构OS的四个方面

① 足够小的内核。
② 基于客户/服务器模式。
③ 应用“机制与策略分离”原理。机制是指实现某一功能的具体执行机构。策略则是在机制的基础上借助于某些参数和算法来实现该功能的优化,或达到不同的功能目标。在传统的OS中,将机制放在OS内核的较低层中,将策略放在内核的较高层中。而在微内核OS中,通常将机制放在OS的微内核中。正因如此,才可以将内核做得很小。
④ 采用面向对象技术。基于面向对象技术中的“抽象”和“隐蔽”原则能控制系统的复杂性,进一步利用“对象”“封装”和“继承”等概念还能确保操作系统的正确性、可靠性、易扩展性等。正因如此,面向对象技术被广泛应用于现代操作系统的设计之中。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐