1.3、操作系统的运行环境
1、操作系统的运行机制
计算机系统中,通常CPU执行两种不同性质的程序,一种是操作系统内核程序;另一种是用户自编程序或系统外城的应用程序。对操作系统而言,这两种程序的作用不同,前者是后者的管理者和控制者,因此“管理程序”要执行一些特权指令,而“被管理程序”出于安全性考虑,不能执行这些指令。所谓特权指令,是指计算集中不允许用户直接使用的指令,如IO指令、置中断指令。
操作系统在具体实现上划分了用户态和核心态,以严格区分两种类程序。
一些与硬件关联交紧密的模块,诸如时钟管理程序、中断处理程序、设备驱动程序等处于最底层。其次是运行频率较高的程序,诸如金城关里、存储器管理和设备管理等。这两部分内容构成了操作系统的内核。这部分内容的指令操作工作在核心态。
内核是计算机上配置的最底层软件,是计算机功能的眼神。不同系统对内核的定义稍有区别,大多数操作系统内核包括四个方面的内容。
(1) 时钟管理
在计算机外部设备中,时钟是最关键的设备。时钟的第一功能是计时,操作系统需要通过时钟管理,向用户提供标准的系统时间。另外,通过时钟中断的管理,可以实现京城的切换。诸如:在分时操作系统中,采用时间片轮转调度的实现;在实时系统中,按截止时间控制运行的实现;在批处理系统中,通过时钟管理来衡量一个作业的运行程度等。因此,系统管理的方方面面无不依赖于它。
(2) 中断机制
引入中断技术的初衷是提高多道程序运行环境中CPU的利用率,而且主要是针对外部设备的。后来的到发展,形成了多种类等,成为操作系统各项操作的基础。例如键盘或鼠标信息的输入、进程的管理和调度、系统功能的调用、设备驱动、文件访问等,无不依赖于中断机制。可以说,现代计算机系统是靠中断驱动的软件。
(3) 原语
按层次结构涉及的操作系统,底层必然是一些可被调用的公用小程序,他们各自完成一个规定的操作。其特点是:1.他们处于操作系统的最底层,是最接近硬件的部分。2.这些程序的运行具有原子性——其操作只能一起合成。3.这些程序的运行时间都较短,而且调用频繁。
通常把具有这些特点的程序成为原语。定义源于的直接方法是关闭中断,让她的所有动作不可分割的进行完再打开中断。
系统中的设备驱动、CPU切换、进程通信等功能中的部分操作都可以定义为原语,是他们呢成为内核的组成部分。
(4) 系统控制的数据结构及处理
系统中用来登记状态信息的数据结构很多。比如作业控制块、进程控制块、设备控制块、各类链表、消息队列、缓冲区、空闲区登记表、内存分配表等。为了实现有效地管理 ,系统需要一些基本的操作,常见的操作有以下三种:
1) 进程管理:进程状态管理、进程调度和分配、创建与撤掉进程控制块的队列维护操作等。
2) 存储器管理:存储器的空间分配和回收管理、内存信息保护程序、代码对换程序等。
3) 设备管理:缓冲区管理、设备分配和回收等。
从上述内容可以了解,核心态指令实际上包括系统调用类指令和一些针对时钟、中断和原语的操作指令。
2、中断和异常的概念
在操作系统中引入核心态和用户态这两汇总工作状态后,就需要考虑这两种状态之间如何切换。操作系统内核工作在核心态,而用户程序工作在用户态。但系统不允许用户程序实现核心态的功能,而它们又必须使用这些功能。
中断(interruption)也成为外中断,指来自CPU执行指令以外的事件发生,如设备发出的IO结束中断,表示设备输入输出处理已经完成,希望处理器能够像设备发出下一个输入输出请求,同事让王成输入输出后的程序继续进行。时钟中断,表示一个固定的事件篇已到,让处理器处理计时、启动定时运行的任务。这一类中断通常是与当前运行的程序无关。中断可细分为硬中断和软中断。硬中断是硬件产生的;软中断是软件产生的。
异常(Exception)也成为内中断、例外或陷入。指源自CPU执行指令内部的时间,如程序的非法操作码、地址越界、算数一出、虚存系统的缺页以及专门的陷入指令等引起的时间。对异常的处理一般要依赖与当前程序的运行现场,而且异常不能被屏蔽,一旦出现异常立即处理,而关于内中断和外中断的联系与区别如下:
这样,操作系统的运行环境可以理解为:用户通过操作系统运行上层程序,而这个上层程序的运行以来与操作系统的底层管理程序提供服务支持,当需要管理程序服务时,系统则通过硬件中断机制进入核心态,运行管理程序;另外也可能是程序运行出现异常情况,被动的需要管理程序的服务,这是就通过异常处理来进入核心态。当管理程序运行结束时,用户程序要继续进行,则通过相应保存程序现场推出中断处理程序或异常处理程序,返回断点处继续执行。在操作系统这一层面上,我们关心的是系统核心态和用户态的软件实现和切换,对于硬件层面的具体理解,可以结合“计算机组成原理”课程中有关中断的内容进行学习。
下面列举一些由用户态转向核心态的例子:
1) 用户程序要求操作系统的服务,即系统服务。
2) 发生一次中断
3) 用户程序中产生了一个错误状态
4) 用户程序中企图执行一条特权指令
5) 从核心态转向用户态由一条指令实现,这条指令也是特权指令。一般情况是中断返回指令。
注意,由用户态进入核心态,不仅仅是状态需要切换,而且,所使用的对战也可能需要由用户堆栈切换为系统对战,但这个系统对战也是属于该进程的。