操作系统概念
脱机命令接口又称批处理命令接口,适用于批处理系统。
联机命令接口又称交互式命令接口,适用于分时或实时系统。
程序接口由一系列系统调用(即广义指令)组成。 GUI是通过调用程序接口实现的。
没有任何软件支持的计算机叫做裸机。
覆盖了软件的机器叫做扩充机器或虚拟机。
操作系统的特征
操作系统的发展
多任务操作系统
https://baike.baidu.com/item/%E5%A4%9A%E4%BB%BB%E5%8A%A1%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/853599
操作系统的运行机制
CPU上会运行两种程序,一种是操作系统内核程序,一种是应用程序。
操作系统内核程序运行在核心态,应用程序运行在用户态。
大多数操作系统的内核包含以下四方面内容:
- 时钟管理
- 中断机制(只有一小部分属于内核,负责保护和恢复中断现场,转到中断处理程序)
- 原语
- 系统控制的数据结构以及操作
- 进程管理:进程状态管理、进程调度、创建和撤销PCB等。
- 存储器管理:存储器空间的分配与回收、内存信息保护程序、代码对换程序等。
- 设备管理:缓冲区管理、设备分配和回收等。
核心态指令实际上包括系统调用类指令以及一些针对时钟、中断和原语的操作指令。
用户程序需要先执行陷入(Trap)指令,也叫访管指令,进入到内核态。再执行特权指令(如系统调用等)。
由用户态进入内核态,不仅状态需要切换,而且所用的堆栈也可能需要由用户堆栈切换为系统堆栈(还是属于该进程的)。
中断与异常
中断,是让操作系统内核夺回CPU使用权的唯一途径。也是用户态程序进入核心态的途径。
如果没有中断机制,程序一旦上CPU,就会一直运行下去,也就没有并发的能力。
早期的中断技术是为了处理数据传送。后来中断渐渐地被赋予更多的功能:
- 实现CPU与I/O设备的并行工作
- 处理硬件故障与软件异常
- 实现人机交互。(用户干预机器需要用到中断系统)
- 实现多道程序、分时操作,多道程序的切换。
- 实现实时处理、快速响应。
- 实现用户态与内核态的切换。(称为“软中断”)
- 多处理器系统中各处理器之间的信息交流与任务切换。
对异常和中断的处理由操作系统(和驱动程序)完成。
异常(内中断)
异常是CPU在执行一条指令时,由CPU在其内部检测到的、与正在执行的指令相关的同步事件。
- 程序性异常(软件中断):在CPU内部因执行指令而引起的中断
- 故障(Fault)——取指~执行阶段期间,不一定要终止
- 指令译码出现“非法操作码”(必须终止)
- 取数据时发生“缺页”(调入页面后,返回当前指令继续执行)
- 执行除数指令时发现“除数为0”(必须终止)
- ......
- 自陷(Trap)——CPU根据不同的Trap指令做相应处理后,返回当前指令的下一条执行。
- 转移指令(例外,返回到转移目标指令执行)
- x86中的断点调试的单步跟踪功能
- 系统调用
- 条件自陷指令(MIPS中的teq、teqi、tne、tnei等)
- 故障(Fault)——取指~执行阶段期间,不一定要终止
- 硬故障中断(与外中断都叫做硬件中断):在CPU内部因硬连线出现故障而引起的中断
- 中止(Abort)——必须终止
- 控制器出错
- 存储器校验错
- ......
- 中止(Abort)——必须终止
中断(外中断)
中断是一种典型的由外部设备处罚的、与当前正在执行指令无关的异步事件。
包括I/O设备发出的I/O中断(如打印机缺纸、键盘输入等)、或发生某种事件(如按Esc键,定时器计数时间到等)。CPU每执行完一条指令就检测是否由中断信号,如果有,则进入中断相应周期。
- 可屏蔽中断
- 通过可屏蔽中断请求线(INTR)向CPU发送的中断请求。CPU可以在中断控制器中设置相应的屏蔽字来屏蔽它。
- 不可屏蔽中断
- 通过不可屏蔽中断请求线(NMI)向CPU发送的中断请求。通常是非常紧急的硬件故障,如电源掉电等。
中断和异常的响应
从CPU检测的异常或中断事件,到调出相应的处理程序,这个过程称为中断和异常的响应。
响应过程可分为:关中断、保存断点和程序状态、识别中断和异常并转到相应的处理程序。
整个中断响应过程是由软硬件协同实现的。
- 关中断
在保存断点和程序状态期间,不允许被新的中断打断。通常通过设置“中断允许”(IF)触发器来实现。1为开中断,0为关中断。
- 保存断点和程序状态
为了能在处理完中断和异常后正确地返回到被中断的程序执行,必须将程序的断点(返回地址)送到栈或特定寄存器中。通常保存在栈中,以便更好地支持中断和异常的嵌套。除此之外,还要将程序被中断时的PSWR(程序状态字寄存器)中的内容保存在栈或特定寄存器中,在返回时恢复到PSWR中。
- 识别中断和异常并转到相应的处理程序
异常大多采用软件识别的方式。中断可以采用软件识别或硬件识别的方式。
- 软件识别
CPU设置一个异常状态寄存器,用于记录异常原因。
操作系统使用一个统一的异常或中断查询程序,按优先级查询异常状态寄存器,然后转到内核中相应的处理程序。
- 硬件识别(向量中断)
中断处理程序的首地址称为中断向量,所有中断向量存放在中断向量表中,并与中断类型号一一对应。
操作系统根据中断类型号快速找到中断向量,从而找到对应的中断处理程序。
优先级排序:
- 一般来说,不可屏蔽中断 > 内部异常 > 可屏蔽中断
- 内部异常中,硬件故障 > 软件中断
- DMA中断请求 > I/O设备传送的中断请求
- I/O传送类请求中,高速设备 > 低速设备 输入设备 > 输出设备 实时设备 > 普通设备
中断优先级包括响应优先级和处理优先级,响应优先级在硬件线路上是固定的,不便改动;处理优先级可利用中断屏蔽技术动态调整,以实现多重中断。
CPU响应中断后,经过中断隐指令,转去执行中断服务程序。
中断隐指令是由硬件直接实现的,并不是一条真正的指令,是硬件的一系列操作。
原程序的断点(指令无法直接读取的PC和PSW的内容),中断的断点通常是下一条指令的地址,异常的断点通常是当前指令的地址。
x86中 将PC和PSW保存到内存栈中。
MIPS中 没有PSW,只保存PC到特定寄存器中。
现场和断点,都不能被中断服务程序破坏。
现场信息因为可被指令直接访问,所以通常在中断服务程序中通过指令把它们保存在栈中。(即由软件实现)
断点信息由CPU在响应中断时自动保存在栈或特定寄存器中。(即由硬件实现)
操作系统结构
分层结构
特点:单向依赖。
优点:
- 便于系统的调试与验证,简化了设计与实现
如果在调试某层时没有问题,说明其底层都没有问题。
- 易扩充与维护
在系统中增加、修改或替换一层中的模块或整层时,只要不改变相应层间的接口,就不会影响到其他层。
缺点:
- 合理定义各层比较困难
依赖关系一旦确定,就会显得不够灵活。
- 效率较差
操作系统每执行一个功能,通常要自上而下的穿越很多层,各层之间都有通信机制,所以增加了许多开销。
模块结构
衡量模块独立性的两个标准:
- 内聚性:模块内部各部分联系的紧密程度。内聚性越高,模块独立性越好。
- 耦合度:模块间相互联系和相互影响的程度。耦合度越低,模块独立性越好。
优点:
- 提高了系统设计的正确性、可理解性和可维护性。
- 增强了系统的可适应性。
- 加速了系统的开发过程。
缺点:
- 模块间的接口规定很难满足对接口的实际需求。
- 各模块设计者齐头并进,每个决定无法建立在上一个已验证的正确决定的基础上,因此无法找到一个可靠的决定程序。
内核结构
宏内核
将操作系统的主要功能模块作为一个紧密联系的整体运行在核心态。从而为用户程序提供高性能的系统服务。
优点:
由于各管理模块之间共享信息,能有效利用各自的特性,所以具有很大的性能优势。
微内核
在宏内核的基础上,将一些非核心的功能转移到用户空间,只保留最基本的功能在内核。
移出内核的功能根据分层或模块化的原则被划分为若干服务程序。它们的执行相互独立,交互则都借助于微内核进行通信。
因此,微内核将操作系统的结构划分为两大部分:微内核和多个服务器。
并且机制(微内核功能)与策略(服务器功能)分离。
微内核功能(机制)主要包括:
- 进程(线程)管理(调度、切换与同步等)
- 低级存储器管理(如页表映射、地址变换机制)
- 中断与异常响应(识别中断或异常事件后,发送给相关的服务器处理)
- 客户端与服务器之间的通信(消息传递机制等)
而操作系统的绝大部分功能(策略)都放在微内核外的一组服务器(进程)中实现。
例如:
- 进程(线程)服务器:提供对进程(线程)的管理(用户进程如何分类,优先级的确认方式等)
- 虚拟存储器服务器:提供对虚拟存储器的管理(采用何种页面替换算法,何种内存分配与回收策略等)
- .......
它们都是作为进程来实现的,运行在用户态。
客户端与服务器的通信借助微内核中的消息传递机制。
优点:
- 拓展性与灵活性
许多功能从内核中剥离出来,当需要修改某些功能或增加新功能时,只需要修改相应的服务器就可。
- 可靠性与安全性
一个服务器中的错误只会使对应的功能模块崩溃,不会使整个系统内核崩溃(对应宏内核)。
- 可移植性
只有微内核中会有与CPU和I/O硬件相关的代码,其他在各服务器中的代码均与硬件平台无关。
- 分布式计算
客户端/服务器模式可以很好地支持分布式系统和网络系统。
外核结构
相对于虚拟机克隆真实机器,另一种策略是对机器进行分区,给每个用户整个资源的一个子集。
在其底层,外核(exokernel)在内核态运行,为各虚拟机分配资源,保证它们互斥。每个虚拟机可以运行自己的操作系统,但限制只能使用自己的资源。
优点:
- 减少了映射层
- 将多道程序(在外核内)与用户操作系统代码(在用户空间内)加以分离