第一章 计算机系统概述
1.1 操作系统的基本概念
1.1.1 操作系统的概念
操作系统的定义 :操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口和环境的程序集合;它是计算机系统中最基本的系统软件
1.1.2 操作系统的功能和目标

- 系统调用的目的是请求系统服务
- 系统调用是操作系统提供给编程人员的接口
1.1.3 操作系统的的特征
- 并发:指两个或多个事件在同一时间间隔内发生
- 共享:指系统中的资源可供内存中多个并发执行的进程共同使用
- 互斥共享方式:同一时间内只能有一个进程访问该资源。如打印机
- 同时共享方式:允许多个进程访问同一资源,但在微观上,某一时刻只能有一个进程访问。如磁盘
- 虚拟:指将一个物理上的实体变为若干个逻辑上的对应物
- 异步:多道程序环境允许多个程序并发执行,但由于资源有限,进程的执行并不是一贯到底的,而是走走停停的,它以不可预知的速度向前推进
- 并发 和共享是操作系统最基本的特征,二者互为存在条件
1.2 操作系统的发展历程
-
单道批处理系统
缺点:CPU长时间处于空闲,利用率低
单道批处理系统的缺点是占用大量内存空间 ❌
-
多道批处理系统
特点:
- 多道
- 宏观上并行
- 微观上串行
当某道程序因为I/O操作暂停运行时,CPU便立刻转去运行另一道程序。这是通过中断机制实现的
优点:CPU利用率高;系统吞吐量大
缺点:无交互能力;用户相应的时间长
-
分时系统
优点:能实现人机交互
缺点:不能及时处理紧急问题
-
实时系统
- 硬实时系统:如导弹发射系统
- 软实时系统:如购票网站
优点:能够优先处理紧急的、优先级高的事务
1.3 操作系统的运行机制
1.3.1 处理机的运行模式
- 内核程序与应用程序
- 内核程序是操作系统的
- 应用程序是用户自编的
- 特权指令与非特权指令
- 特权指令只能运行在内核程序上。如内存清零指令、I/O指令、关中断指令
- 应用程序只能使用非特权指令。如加法指令、减法指令
- 在CPU设计和生产时就划分了特权指令和非特权指令
- 内核态(管态)与用户态(目态)
- 内核态运行内核程序,可以执行特权指令
- 用户态运行应用程序,只能执行非特权指令
- CPU的程序状态字(PSW)寄存器用二进制位表示当前处于"用户态"/"内核态"
- 内核态、用户态的切换
- 内核态--->用户态:执行一条特权指令,修改PSW的标志位为"用户态"。这个动作意味着操作系统主动让出CPU使用权
- 用户态--->内核态:由"中断"引发,硬件自动完成状态切换过程。触发中断信号意味着操作系统重新夺回CPU的使用权
常见特权指令:
- 直接管理系统资源的指令:如设置时钟、启动/关闭硬件设备、切换进程/进程调度、设置中断、输入/输出指令等
- 系统状态修改指令:如修改中断向量表、切换CPU的运行模式
- 系统控制指令:如停机指令、重启指令等
常见非特权指令:
- 普通的数据处理指令:如加法指令、存数指令、寄存器清零指令
- 流程控制指令:转移指令
- 读操作指令
- 陷入指令/访管指令/trap指令
1.3.2 中断和异常
中断处理是操作系统必须提供的功能
- 中断的作用
- 中断是操作系统重新夺回CPU的唯一途径
- 中断会使CPU从用户态转换为内核态
- 没用中断机制,应用程序将永远霸占CPU
- 中断的类型
- 内中断(异常)
- 与当前执行的指令有关,中断信号来源于CPU内部
- 常见如程序的除数为0(终止)、地址越界(终止)、运算溢出(终止)、虚存系统的缺页(故障)及专门的陷入指令等
- 程序需要操作系统的服务时,会主动触发陷入指令(trap)。系统调用就是通过陷入指令实现的
- 外中断(中断)
- 与当前执行的指令无关,中断信号来源于CPU外部
- 如I/O中断、时钟中断
- 内中断(异常)
CPU每执行完一条指令都需要检查外部是否有中断信号,如果有,则去处理中断
处理外部中断时,操作系统需要保存通用寄存器的内容
中断向量表是数组
中断处理需要保存程序状态字寄存器PSW
1.3.3 系统调用
- 什么是系统调用?
系统调用是操作系统提供给应用程序(程序员)使用的接口。
所有与共享资源有关的操作,必须通过系统调用向操作系统提出服务请求,由操作系统代为执行,并将处理结果返还应用程序 - 系统调用与库函数的区别
库函数是对系统调用的进一步封装;有的库函数没用使用系统调用 - 系统调用的功能
- 设备管理
- 文件管理
- 进程控制
- 进程通信
- 内存管理
- 系统调用的过程
- 传参
- 执行陷入指令/trap指令/访管指令
- 由操作系统内核程序处理系统调用请求
- 返回应用程序
注意:
- 陷入指令是在用户态执行的,属于非特权指令;执行后立即引发一个内中断,使CPU进入内核态
- 发出系统调用请求是在用户态,对系统调用的响应处理是在内核态下进行的
1.4 操作系统的体系结构
-
大内核与微内核
-
大内核:又叫宏内核、单内核。将操作系统的的主要功能模块都作为系统内核,运行在核心态
- 优点:性能高
- 缺点:内核代码庞大,结构混乱,难以维护
- Linux、UNIX
-
微内核:只把最基本、与硬件关系最密切的功能保存在内核中
-
基本功能:
- 进程管理
- 低级存储器管理
- 中断和陷入处理:捕获所发送的中断和陷入事件,并进行中断响应处理
-
优点:
- 拓展性与灵活性:许多功能从内核中分离出来,需要拓展时,只需在相应的服务器中修改或新增功能,无需修改内核代码
- 可靠性和安全性
- 可移植性
- 分布式计算
-
缺点:需要频繁的在用户态与内核态之间切换,性能低
-
Windows NT
-
-
-
分层结构
-
将操作系统分为若干层,底层为硬件,顶层为用户接口,每层只能调用紧邻它的低一层的功能和服务
-
优点:
- 便于系统调试和验证,从第1层开始自底向上的调试;
- 易于扩充和维护
-
缺点:
- 合理定义各层比较困难,不够灵活
- 效率较差,操作系统每执行一个功能,需要自上而下的调用多层
-
-
模块化
- 将操作系统按功能划分为多个模块,各模块之间相互协作。内核=主模块+可加载内核模块
- 优点:
- 提高了操作系统设计的正确性、可理解性和可维护性
- 增强了操作系统的可适应性
- 加速了开发过程
- 缺点:
- 模块之间的接口规定很难满足对接口的实际需求
- 各模块相互依赖,难以调试和验证
- 衡量模块独立性好坏:高内聚、低耦合
-
外核
- 操作系统由内核、外核两部分组成。内核负责进程调度、进程通信等功能;外核负责为用户进程分配未经抽象的硬件资源,由外核负责保证资源使用安全
- 未经抽象的硬件资源:未经虚拟映射的、直接的硬件物理资源,如内存、外存
- 优点:
- 减少了虚拟硬件资源的"映射层",提升效率
- 直接给用户进程分配"不虚拟、不抽象"的硬件资源,使用户进程可以更灵活的使用硬件资源
- 缺点:
- 降低了系统的一致性
- 使系统更加复杂
1.5 操作系统的引导
引导过程:
- 激活CPU,读取ROM中的root指令,将指令寄存器置为BIOS的第一条指令,即开始执行BIOS
- 硬件自检。BIOS在内存最开始的空间中创建中断向量表,以实现通电自检(POST)
- 加载带有操作系统的磁盘。
- 加载主引导记录(MBR)。主引导记录告诉CPU去硬盘的哪个主分区寻找操作系统
- 扫描硬盘分区,加载硬盘活动分区。MBR包含硬盘分区表,硬盘分区表以特定标识符区分活动分区和非活动分区
- 加载分区引导记录(PBR)。读取活动分区的第一个扇区,这个扇区称为分区引导记录(PBR),其作用是寻找并激活硬盘根目录下用于引导操作系统的程序,即启动管理器
- 加载启动管理器
- 加载操作系统
1.6 虚拟机
两类虚拟机管理程序 VMM:
- 第一类VMM直接运行在硬件之上,管理硬件资源。只有VMM运行在内核态,虚拟操作系统运行在用户态,当其需要执行特权指令时,由VMM截获该行为,并作出相应处理
- 第二类VMM运行在宿主操作系统上,由宿主操作系统分配并管理硬件资源,常见如VMWare
| 第一类VMM | 第二类VMM | |
|---|---|---|
| 对物理资源的控制权 | 直接运行在硬件之上,能直接控制和分配物理资源 | 运行在Host OS上,依赖于Host OS为其分配物理资源 |
| 资源分配方式 | 在安装Guest OS时,VMM要在原本的硬盘上自行分配存储空间,分配未经抽象的物理硬件 | Guest OS拥有自己的虚拟硬盘,实际上是Host OS文件系统内的一个大文件,Guest OS分配到的是虚拟内存 |
| 性能 | 性能更好 | 性能更差,需要Host OS作为"中介" |
| 可支持的虚拟机数量 | 更多,不需要和Host OS竞争资源 | 更少,Host OS本身也需要使用物理资源 |
| 虚拟机的可迁移性 | 更差 | 更好 |
| 运行模式 | 运行在最高特权级,可以执行最高特权的指令 | 部分运行在用户态、部分运行在内核态。Guest OS发出的系统调用会被VMM截获,并转换为VMM对Host OS的系统调用 |