操作系统运行机制
CPU执行两种不同性质的程序:
1. 操作系统内核程序。
2. 用户自编程序。(应用程序)
其中内核程序用于执行一些特权指令,应用程序则不能执行。特权指令,指计算机中不允许用户直接使用的指令。
在实现上,将CPU的状态划分为用户态(目态)和核心态(管态、内核态),内核程序运行在核心态(CPU执行特权指令),应用程序运行在用户态(CPU执行非特权指令)
内核是计算机配置的底层软件,包含四方面内容:
-
时钟管理
时钟是最关键的设备。
第一功能是计时,操作系统需要通过时钟管理向用户提供标准的系统时间;
第二功能是中断管理,实现进程的切换。 -
中断机制
提高多道程序运行环境中CPU的利用率,是操作系统各项操作的基础(eg:鼠标键盘的键入,进程管理调度,系统功能调用,设备驱动,文件访问),现代操作系统是靠中断驱动的软件。在中断机制中,只有一小部分属于内核,负责保护和恢复中断现场的信息,转移控制权到相关的处理程序,减少中断处理时间,提高系统并行处理能力 -
原语
按层次结构设计的操作系统,底层有一些可被调用的公用小程序,各自完成一个规定的操作,特点如下:
①处于操作系统最底层,是最接近硬件的部分
②这些程序的运行有原子性,操作只能一气呵成(从操作安全性和便于管理方面考虑)
③这些程序的运行时间较短,调用频繁
把具有这些特点的程序称为原语,定义原语的直接方法就是关闭中断,让所有动作不可分割完成后再打开中断。
系统的
设备驱动、CPU切换、进程通信等功能中部分操作都可以定义为原语,使其成为内核的组成部分。
-
系统控制的数据结构及处理
系统中用来登记状态信息的数据结构很多,为了实现有效的管理,系统需要一些基本操作,常见操作有:
①进程管理
②存储器管理
③设备管理核心态指令实际上包括系统调用类指令和一些针对时钟、中断和原语的操作指令。
中断和异常
上述提到了核心态和用户态两种工作状态,操作系统内核工作在核心态,用户程序工作在用户态。
系统不允许用户程序实现核心态的功能,但是又必须使用这些功能,所以要要在核心态建立通道,实现从用户态进入核心态。在实际操作系统中,CPU运行上层程序时唯一进入通道的途径就是通过中断和异常,运行用户态的CPU就会立即进入核心态。**中断**对于一个运行在计算机上的实用操作系统,是不可缺少的。操作系统的发展大体上就是一个不断提高资源利用率的过程,而资源利用率就需要在程序并未使用某种资源时,把它对那种资源的占有权释放,这一行为就需要中断机制的实现。
-
定义
①中断(外中断)指来自CPU执行指令以外事件的发生(如设备发出的I/O结束中断,表示设备I/O处理已经完成,希望处理机能够向设备发下一个I/O请求,同时让完成I/O后的程序继续运行)。时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等。这一类中断通常是与当前指令执行无关的事件,即它们与当前处理机运行的程序无关。
②异常(内中断、例外、陷入)指源自CPU执行指令内部的事件。对异常的处理一般要依赖于当前程序的运行现场,而且异常不能被屏蔽,一旦出现要立即处理。 -
中断处理过程
①关中断CPU响应中断后,首先保护程序的现场,在保护现场的过程中,CPU不应响应更高级中断源的中断请求;否则如果程序现场保存不完整,在中断服务程序结束后,就不能正确的恢复并继续执行现行程序。
②保存断点
为保证中断服务程序执行完毕后能正确返回原来程序,必须将原来程序的断点(程序计数器PC)保存起来。
③引出中断服务程序
取出中断服务程序的入口地址送入PC。
④保存现场和屏蔽字
进入中断服务程序后,首先保存现场,现场信息一般指程序状态字寄存器PSWR和某些通用寄存器的内容。
⑤开中断
允许更高级中断请求得到响应。
⑥执行中断服务程序中断请求的目的。
⑦关中断
保证在恢复现场和屏蔽字时不被中断。
⑧恢复现场和屏蔽字
将现场和屏蔽字恢复到原来的状态。
⑨开中断、中断返回中断服务程序的最后一条指令通常是一条中断返回指令,使其返回到源程序的断点处,以便继续执行源程序。
恢复现场:在中断返回前,必须将寄存器的内容恢复到中断处理前的状态,这部分工作由中断服务程序完成。
中断返回:由中断服务程序的最后一条中断返回指令完成。
系统调用
指用户在程序中调用操作系统所提供的一些子功能,系统调用可视为特殊的公共子程序。系统中的各种公共资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。一个操作系统提供的系统调用命令由几十到上百条,系统调用可分为:
-
设备管理
完成设备的请求或释放以及设备启动等功能。 -
文件管理
完成文件的读、写、创建和删除等功能。 -
进程控制
完成进程的创建、撤销、阻塞和唤醒等功能。 -
进程通信
完成进程之间的消息传递或信号传递等功能。 -
内存管理
完成内存的分配、回收和获取作业占用内存区大小及始址等功能。