操作系统的运行机制

  • 计算机系统中,通常CPU执行两种不同性质的程序:一种是操作系统内核程序;另一种是用户自编程序或系统外层的应用程序。对操作系统而言,这两种程序的作用不同,前者是后者的管理者,因此“管理程序”要执行一些特权指令,而“被管理程序”出于安全考虑不能执行这些指令。所谓特权指令,是指计算机中不允许用户直接使用的指令,如I/O指令、 置中断指令,存取用于内存保护的寄存器、送程序状态字到程序状态字寄存器等指令。操作系统在具体实现上划分了用户态(目态)和核心态(管态),以严格区分两类程序。

  • 现代计算机几乎都是层次结构,操作系统的各项功能分别设置在不同层次上,一些与硬件关联较紧密的模块,诸如时钟管理、中断处理、设备驱动等处于最底层。其次是运行频率较髙的程序,诸如进程管理、存储器管理和设备管理等。这两部分内容构成了操作系统的内核。这部分内容的指令操作工作在核心态。

  • 内核一般包括四个方面的内容:

    1. 时钟管理:
      在计算机的各种部件中,时钟是最关键的设备。
      时钟的第一功能是计时,操作系统需要通过时钟管理,向用户提供标准的系统时间。另外,通过时钟中断的管理,可以实现进程的切换。诸如,在分时操作系统中,釆用时间片轮转调度的实现;在实时系统中,按截止时间控制运行的实现;在批处理系统中,通过时钟管理来衡量一个作业的运行程度等。因此,系统管理的方方面面无不依赖于时钟。

    2. 中断机制
      引入中断技术的初衷是提高多道程序运行环境中CPU的利用率,而且主要是针对外部设备的。

    3. 原语
      按层次结构设计的操作系统,底层必然是一些可被调用的公用小程序,它们各自完成一个规定的操作。其特点是:
      1.它们处于操作系统的最底层,是最接近硬件的部分。
      2.这些程序的运行具有原子性——其操作只能一气呵成
      3.这些程序的运行时间都较短,而且调用频繁。

    4. 系统控制的数据结构及处理
      系统中用来登记状态信息的数据结构很多,比如作业控制块、进程控制块(PCB)、设备控制块、各类链表、消息队列、缓冲区、空闲区登记表、内存分配表等。为了实现有效的管理,系统需要一些基本的操作,常见的操作有以下三种:
      1.进程管理:进程状态管理、进程调度和分派、创建与撤销进程控制块等。
      2.存储器管理:存储器的空间分配和回收、内存信息保护程序、代码对换程序等。
      3.设备管理:缓冲区管理、设备分配和回收等。

中断和异常的概念

  • 当中断或异常发生时,运行用户态的CPU会立即进入核心态,这是通过硬件实现的.
  • 中断(Interruption),也称外中断,指来自CPU执行指令以外的事件的发生,如设备发出的I/O结束中断,表示设备输入/输出处理已经完成,希望处理机能够向设备发下一个输入 / 输出请求,同时让完成输入/输出后的程序继续运行。时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等。这一类中断通常是与当前程序运行无关的事件,即它们与当前处理机运行的程序无关。
  • 异常(Exception),也称内中断、例外或陷入(Trap),指源自CPU执行指令内部的事件,如程序的非法操作码、 地址越界、算术溢出、虚存系统的缺页以及专门的陷入指令等引起的事件。对异常的处理一般要依赖于当前程序的运行现场,而且异常不能被屏蔽,一旦出现应立即处理。关于内中断和外中断的联系与区别如图1-2所示。

图1-2 内中断和外中断的联系与区别

系统调用

  • 所谓系统调用就是用户在程序中调用操作系统所提供的一些子功能,系统调用可以被看做特殊的公共子程序。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、进行I/0传输以及管理文件等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。通常,一个操作系统提供的系统调用命令有几十乃至上百条之多。

  • 这些系统调用按功能大致可分为如下几类:

    1. 设备管理。完成设备的请求或释放,以及设备启动等功能。
    2. 文件管理。完成文件的读、写、创建及删除等功能。
    3. 进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。
    4. 进程通信。完成进程之间的消息传递或信号传递等功能。
    5. 内存管理。完成内存的分配、回收以及获取作业占用内存区大小及始址等功能。
  • 系统调用运行在系统的核心态。通过系统调用的方式来使用系统功能,可以保证系统的稳定性和安全性,防止用户随意更改或访问系统的数据或命令。系统调用命令是由操作系统提供的一个或多个子程序模块实现的。

  • 操作系统的运行环境可以理解为:用户通过操作系统运行上层程序(如系统提供的命令解释程序或用户自编程序),而这个上层程序的运行依赖于操作系统的底层管理程序提供服务支持,当需要管理程序服务时,系统则通过硬件中断机制进入核心态,运行管理程序;也可能是程序运行出现异常情况,被动地需要管理程序的服务,这时就通过异常处理来进入核心态。当管理程序运行结束时,用户程序需要继续运行,则通过相应的保存的程序现场退出中断处理程序或异常处理程序,返回断点处继续执行。

  • 由用户态转向核心态的例子:

  1. 用户程序要求操作系统的服务,即系统调用。
  2. 发生一次中断。
  3. 用户程序中产生了一个错误状态。
  4. 用户程序中企图执行一条特权指令。
  5. 从核心态转向用户态由一条指令实现,这条指令也是特权命令。一般是中断返回指令。