1. 操作系统的基本概念
1.1 操作系统的基本概念
- 操作系统控制和管理整个计算机系统的软件和硬件资源,并合理进行工作调度和资源分配(操作系统是系统资源的管理者,即处理机管理、存储器管理、文件管理和设备管理)
- 操作系统提供给用户和其他软件方便的接口和环境(向上层提供服务,上层即用户和软件:操作系统屏蔽底层硬件细节,即用户在使用的时候无需关心底层如何实现)
- 操作系统是计算机系统中最基本的系统软件(操作系统是一种软件,最接近硬件的软件),操作系统需要实现对硬件机器的扩展(操作系统将CPU、内存等硬件合理组织,使得它们能实现更多功能)
接口
- 命令接口:联机(交互式),脱机(批处理)
- GUI图形用户接口
- 程序接口
1.2 操作系统的特征
-
并发:两个或者多个事件在同一时间间隔内发生(宏观上同时发生,微观上交替发生)(区别于并行:两个或者多个事件在同一时间内同时发生)
单核CPU同一时刻只能进行一个任务,程序只能并发运行 多核CPU同一时刻可以进行多个任务,程序可以并行运行
-
共享:即资源共享。系统中的资源可供多个并发执行的进程共同使用
①互斥共享:一个时间段内只允许一个进程访问该资源
②同时共享:一个时间段内允许多个进程“同时”访问该资源(宏观同时,微观交替)
-
虚拟:一个物理上的实体变为若干个逻辑上的对应物
①时分复用:虚拟处理器(处理机在各个微小的时间内交替为各个进程服务))
②空分复用:虚拟存储器
-
异步:在多道程序环境下,以不可预知的速度向前推进(原因:资源有限)
2. 操作系统的发展和分类
1. 批处理阶段
①单道批处理系统: 引入脱机输入/输出技术,并用监督程序(操作系统的雏形)负责控制作业的输入和输出
缺点:
内存中只能有一道程序运行(串行执行程序)
CPU需要大量时间等待I/O完成
②多道批处理系统: 内存中存入多个程序,并且支持它们并发运行(共享资源)
缺点:没有人机交互功能(无法调试/输入参数)
2. 分时操作系统
以时间片为单位轮流为用户/作业服务(可以进行人机交互) 用户感觉上独占计算机,实际共享计算机
缺点:完全公平(基于时间片)——不能优先处理紧急任务
3. 实时操作系统:可以优先处理紧急任务
①硬实时:必须绝对严格在特定时间内完成
②软实时:可以偶尔违反时间规定
3. 操作系统运行环境
3.1 操作系统运行环境
-
应用程序只能使用非特权指令
-
特权指令只能由操作系统内核使用
-
CPU可以判断当前指令为特权指令/非特权指令:通过PSW标志位标记当前CPU处于何种状态
内核态(管态):正在运行的是内核程序,可以执行特权指令
用户态(目态):正在执行的是应用程序,只能执行非特权指令
-
内核态→用户态:执行一条特权指令——修改PSW标志位为用户态(操作系统主动让出CPU使用权)
-
用户态→内核态:由中断引发,硬件自动完成变态过程,操作系统强行夺回CPU使用权(停止运行当前程序,转而运行处理中断信号的内核程序)
3.2.中断和异常
中断是操作系统内核夺回CPU使用权的唯一途径(用户态→内核态)
3.2.1 内中断(异常)
与当前执行的指令有关,中断信号来源于CPU内部
①终止(由致命错误引起,内核无法修复,并且不会交还CPU使用权,而是直接终止应用程序):用户态下执行特权指令、除法指令除数为0
②故障(错误条件引起,内核程序修复后CPU,使用权交还给应用程序):缺页
③陷入(程序故意引发):应用程序请求系统内核服务,执行陷入指令(陷入指令并非特权指令,且需要在用户态下执行,系统调用通过陷入指令完成)
3.2.2.外中断(中断)
与当前执行的指令无关,中断信号来源于CPU外部
每一条指令执行结束时,CPU都会检查是否有外中断信号(中断周期)
①时钟中断——由时钟部件发来的中断信号(两个应用程序可以通过时钟中断的方式并发运行)
②I/O中断请求(例:打印机打印完成后,会向CPU发送中断信号)
3.2.3.中断机制的基本原理
-
不同类型的中断信号,需要不同的中断处理程序。因此,CPU检测到中断信号后,会根据中断信号的类型查询中断向量表
-
中断处理程序需要在内核态下执行
3.3.系统调用
特权指令、访管指令、陷入指令、广义指令--操作系统 - 哔哩哔哩
-
应用程序可以通过系统调用请求获得操作系统内核的服务(程序接口由一组系统调用组成)
-
系统调用和库函数的区别:
-
系统调用的应用场景:与共享资源相关的场景下必须使用系统调用功能让操作系统的内核合理进行资源分配(例如:两个应用程序并发使用打印机,如果不能够进行合理分配,那么将会导致A打印一段B打印一段)
-
系统调用的分类:
-
系统调用的过程:
- 执行传参指令(用户态):在用户态下,通过若干传参指令将若干个参数分别传入寄存器中(参数的作用是指明应用程序需要系统调用的类型),操作系统根据参数提供对应的系统调用服务
- 传参指令执行结束后,执行陷入指令(用户态→内核态):陷入指令引发内中断,CPU暂停执行应用程序,转而执行中断服务程序(陷入指令对应的中断服务程序为系统调用的入口程序)
- 执行对应的系统调用服务程序(内核态):执行中断服务程序的过程中,根据寄存器中的参数执行对应的系统调用处理程序
- 系统调用执行完毕(内核态→用户态)
-
系统调用的注意点:
-
陷入指令并非特权指令,且需要在用户态下执行
-
陷入指令执行后将会发出一个内中断,随后CPU由用户态→内核态
-
用户态下发出系统调用请求,内核态下处理系统调用请求
-
陷入指令 = trap = 访管指令
4.操作系统体系结构
1.操作系统分为内核(接近硬件,下层)和非内核(接近软件,上层)
①非内核:GUI等
②内核:操作系统最核心的部分,由内核程序实现内核功能
2.大内核(宏内核)
既含有时钟管理、中断处理和原语等与硬件关联紧密的模块;也含有对数据结构进行操作的功能(进程管理、存储器管理和设备管理等)
特点
-
性能高:模块间可以直接相互调用(无需使用消息传递的方式)
-
结构混乱、难以维护:内核内的功能多
-
内核中某个功能出错,就可能导致整个系统崩溃:内核功能联系紧密,相互依赖
3. 微内核
仅含有时钟管理、中断处理和原语等与硬件关联紧密的模块
特点
- 效率低:各模块相互调用需要通过消息传递的方式;可能需要进行多次CPU状态的转换
- 扩展性和灵活性
- 可移植性和安全性
- 内核中某个功能出错,不会导致整个系统崩溃
4.分层结构
每层仅能调用比自己更低一层的功能(3调用2,2调用1),且不能跨层调用
缺点:
-
难以合理定义各层边界:低层在实际情况下可能会用到高层的功能
-
效率低:只能逐层进行调用(5→4→3→2→1→0)
优点:
-
便于调试和验证:由于每层仅能调用比自己更低一层的功能,因此,基于下一层已经过调试的条件下,仅需对本层进行调试
-
易扩充和易维护:层与层之间的接口已经确定,仅需对应上下层的接口进行设定即可完成扩展
5.模块化
内核被划分为多个模块,即内核 = 主模块(内存、进程等等) + 可加载内核模块(驱动等)
优点:
-
逻辑清晰、易于维护:每个模块的功能不同(内存、进程等)
-
可多模块同时进行开发:确定某个模块对外的接口后,其他模块可以使用该接口
-
支持动态加载新的内核模块:添加新模块功能无需对整个内核进行重新编译
-
效率高:无需消息传递就可以直接调用其他模块的功能(微内核需要使用消息传递的方式)
缺点:
-
模块间的接口定义未必合理:由于模块间可以相互调用,因此,在实际情况下,模块已定义的接口未必能满足其他接口调用的需要
-
难以调试和验证:调试过程中难以判断是自身出问题还是调用其他模块导致问题
6. 外核
内核负责进程调度和通信;外核负责给内核分配未经抽象(使得内核能够明确知道自己申请的空间在硬盘/内存中的实际位置)的资源(例硬盘和内存的存储空间)
-
用户进程可以灵活使用硬件资源
-
不需要对硬件资源进行映射
5.操作系统的引导
- 激活CPU。激活的CPU读取ROM中的boot程序,将指令寄存器置为BIOS(基本输入/输出系统)的第一条指令,即开始执行BIOS的指令。
- 硬件自检。启动BIOS程序后,先进行硬件自检,检查硬件是否出现故降。如有故障,主 板会发出不同含义的蜂鸣,启动中止;如无故障,屏幕会显示CPU、内存、硬盘等信息。
- 加载带有操作系统的硬盘。硬件自检后,BIOS开始读取Boot Sequence (通过CMOS里保 存的启动顺序,或者通过与用户交互的方式),把控制权交给启动顺序排在第一位的存储设备,然后CPU将该存储设备引导扇区的内容加载到内存中。
- 加载主引导记录MBR。硬盘以特定的标识符区分引导硬盘和非引导硬盘。如果发现一个存储设备不是可引导盘,就检查下一个存储设备。如无其他启动设备,就会死机。主引导记录MBR的作用是告诉CPU去硬盘的哪个主分区去找操作系统
- 扫描硬盘分区表,并加载硬盘活动分区。MBR包含硬盘分区表,硬盘分区表以特定的标识符区分活动分区和非活动分区。主引导记录扫描硬盘分区表,进而识别含有操作系统的硬盘分区(活动分区)。找到硬盘活动分区后,开始加载硬盘活动分区,将控制权交给活动分区。
- 加载分区引导记录PBR。读取活动分区的第一个扇区,这个扇区称为分区引导记录(PBR),其作用是寻找并激活分区根目录下用于引导操作系统的程序(启动管理器)。
- 加载启动管理器。分区引导记录搜索活动分区中的启动管理器,加载启动管理器。
- 加载操作系统。