计算机系统
计算机系统由硬件和软件两部分组成。
- 硬件:包括 CPU、内存、外存及各种外部设备
- 软件:用于管理硬件资源并完成具体任务,主要包括:
- 系统软件:操作系统,编译汇编程序
- 支撑软件:数据库管理系统和开发工具。
- 应用软件:面向实际需求编制的程序,直接为用户完成特定应用功能。
操作系统概念
用户观点
从用户角度看,操作系统是用户与计算机硬件之间的接口。
- 命令接口:允许用户通过命令直接向计算机发出操作请求,如启动程序、管理文件等。
- 程序接口:为应用程序提供一组系统调用,使程序能够间接使用计算机硬件资源。
资源管理观点
从资源管理角度看,操作系统是计算机系统资源的管理者。
- 处理器资源:进行进程管理与调度,合理分配 CPU 使用时间。
- 存储器资源:进行内存管理,负责内存的分配、回收与保护。
- I/O设备资源:进行设备管理,协调和控制各类 I/O 设备的使用。
- 外存资源:进行文件管理,实现数据的存储、组织和访问。
虚拟机观点
从虚拟机观点看,操作系统在裸机硬件之上构造了一台功能更强、使用更方便的扩展机器(虚拟机)。
操作系统通过对硬件资源的封装与抽象,向用户和应用程序提供统一、简化的使用接口,使用户无需直接操作复杂的硬件细节即可使用计算机系统。
操作系统发展
初期阶段
手工操作阶段
用纸带卡片进行打孔输入输出
脱机I/O技术
减少主机CPU空闲时间,提高IO速度
单道批处理系统
- 作业的概念:作业=程序+数据+作业说明书
作业说明书用于向操作系统描述作业的控制信息,如所需资源、输入输出方式及执行要求。
- 基本原理
系统将多个作业预先输入到外存中,由监控程序按顺序自动将作业装入内存并依次执行。
- 单道批处理系统的性能分析
由于内存中始终只保留一个作业,CPU 在作业进行 I/O 操作时往往处于空闲状态,系统资源利用率较低。
操作系统的形成
多道批处理系统(提高系统吞吐量和资源利用率)
通过在内存中同时存放多个作业,使用例如I/O 与 CPU 计算的并行等,多种系统资源的重叠利用来实现作业之间的交替执行,从而提高 CPU 利用率和系统吞吐量。但CPU在一个时间只能操作一个作业,通过操作系统调度器自行决定。
- 缺点:用户只能事先提交作业,运行过程中无法与程序进行交互,出错往往要等整个作业结束后才能发现。
分时系统(提高用户交互性和响应速度)
时间片是一个终端用户作业能连续使用 CPU 的最长时间。
将 CPU 时间划分为若干时间片,轮流分配给多个用户或进程,使用户获得良好的交互体验。
用户体验上任务是连续的,实际上是CPU快速在多个任务之间跳转。
强调资源共享,用户交互
实时系统(满足时间约束和确定性响应)
以满足严格的时间约束为首要目标,要求系统对外部事件在规定时限内作出确定性的响应。例如火星车空间站
操作系统的成熟
微机操作系统
主要运行在个人计算机上,面向终端用户
- 单用户单任务:MS-DOS
- 单用户多任务:Windows,macOS(单用户使用场景下)
- 多用户多任务:Unix,Linux
网络操作系统
以网络为核心,为多台计算机提供资源共享与通信服务的操作系统。配置在网络中用于管理网络通信和共享资源,协调各计算机上任务的运行,并向用户提供统一的、有效方便的网络接口的程序集合。
多个独立计算机,无公共内存,具备消息通信机制
分布式系统
管理多个通过网络连接的计算机,使其在用户看来像一台统一的计算机系统。
用户感知的是一个整体系统,有一个分布式操作系统对资源进行全局和动态管理控制,系统和资源对用户是透明的。
可扩展性,增加性能,高可靠性
嵌入式操作系统
运行在嵌入式设备中,为特定功能服务的操作系统
Android,IOS,黑莓,pSOS,QNX,LynxOS
操作系统内核结构
整体式结构
将操作系统的主要功能模块(进程管理、存储管理、文件系统、设备驱动等)统一集成在一个内核空间中运行。每个过程都有接口定义,可以互相调用。接口简单效率高。
缺点:没有模块独立性,难以维护
实例:MS-DOS、Linux、传统 Unix
模块化结构
在整体式内核基础上,将内核划分为若干相对独立的模块,支持按需加载和卸载。模块之间可以任意调用。
缺点:模块关系复杂,OS结构不清晰
实例:Choices系统,Linux(Loadable Kernel Modules)
层次结构模型
将操作系统划分为若干层次,每一层只能调用其下一层提供的服务。每一层之间的模块只能单向调用。 缺点:系统开销增加导致效率降低
实例:THE 操作系统(Dijkstra 提出),Unix
微内核结构模型
将内核功能最小化,仅保留最基本机制,如:
- 进程/线程管理
- 地址空间管理(低级存储器管理)
- 中断和陷入处理
- 进程间通信(IPC)
其它核心:其余服务(文件系统、设备驱动等)运行在用户态
特点:内核精简,服务以用户进程形式存在,依赖消息传递进行通信
缺点:IPC开销大,性能低于整体式内核
例子:Mach,Minix,QNX,win NT,鸿蒙
中断
中断的基本概念
在程序运行过程中,当系统外部、系统内部或当前运行程序本身出现紧急事件时,处理器会暂停当前程序的执行,自动转入相应的中断服务程序(ISR)进行处理; 待事件处理完毕后,再返回被中断的程序继续执行。 这一完整过程称为中断处理。
采用中断系统的主要目的
现代计算机引入中断机制,主要是为了:
-
提高系统效率
协调 CPU 与外设之间速度不匹配的问题,避免处理器空等。
-
保证系统可靠运行
当发生越界访问、非法操作等异常时,及时中断并采取保护措施。
-
满足实时处理需求
在实时系统中,处理器可随时响应外部设备的随机中断请求。
-
提供故障处理与现场保护手段
一旦检测到硬件或系统错误,立即中断并记录现场,为后续处理提供依据。
中断与异常的基本分类
中断会改变 CPU 的指令执行顺序,通常与 CPU 内部或外部硬件信号有关。
从 产生方式和时序特性 看,可分为两大类:
-
中断(Interrupt):
一般是异步的,由外部事件触发,与当前执行指令无关。
-
异常(Exception):
一般是同步的,在执行特定指令或出现错误时由 CPU 产生。
中断的进一步分类
按是否可屏蔽分类
- 可屏蔽中断:可由程序控制是否响应,屏蔽时 CPU 忽略中断请求,I/O 设备中断通常属于可屏蔽中断
- 非屏蔽中断:不能被程序屏蔽,必须立即处理,数量少、紧急性高,例如:断电、电源故障等
按中断源分类
硬件中断
- 外部中断:由外部设备产生,如键盘中断、定时器中断、磁盘中断等,是异步的
- 内部中断:由硬件故障或运算异常引起,如除零、溢出、掉电等,是不可屏蔽的
软件中断
- 并非真正由硬件触发
- 由程序执行特定指令产生
- 常用于用户态向内核态切换,实现系统调用
3. 按中断的主动性分类
- 自愿性中断(访管中断):用户程序主动请求操作系统服务,如 I/O 操作、进程创建、内存分配等。
- 程序中断:程序执行过程中出现异常或紧急情况,CPU 被动中断当前程序并处理。例如非法指令,越界等问题
异常的分类(重点)
异常是由 CPU 在执行指令过程中检测到的同步事件。
处理器探测异常
根据异常发生时 EIP 保存的地址不同,分为三类:
故障(Fault)
- EIP 指向引发异常的指令
- 异常处理结束后,该指令可能重新执行
- 例:缺页异常
陷阱(Trap)
- EIP 指向下一条指令
- 不需要重新执行当前指令
- 常用于调试(断点、单步执行)
异常中止(Abort)
- 严重错误,无法确定出错指令位置
- 通常导致进程被强制终止
- 例:硬件故障、系统表损坏
编程异常(软中断)
- 由程序员显式触发
- 使用
int、int3、into、bound等指令 - CPU 将其作为陷阱处理
- 主要用途:
- 执行系统调用
- 向调试程序报告特定事件