1.3 操作系统的运行环境

1.3 操作系统的运行环境

知识图谱

操作系统的运行环境

一、操作系统的运行机制

计算机系统中,通常 CPU 执行两种不同性质的程序:

  • 操作系统内核程序:通常会执行一些特权指令(指计算机中不允许用户直接执行的指令,如中断指令,这些指令必须由操作系统调度执行),
  • 用户自编程序:主要执行非特权指令

在具体实现上,将 CPU 状态划分为用户态(目态)和核心态(管态、内核态)。当 CPU 处于用户态时,只能执行非特权指令;当 CPU 处于核心态时,CPU 既可以执行特权指令也可以执行非特权指令用户自编程序运行在用户态,操作系统内核程序运行在核心态

现代操作系统几乎都是层次式的结构:

  • 与硬件关联较高的模块,如时钟关联、中断处理,处于最低层;
  • 运行频率高的程序,如进程关联、存储器管理,位于上一层。

这两部分构成了操作系统的内核,都运行在核心态。

大多数操作系统内核包含以下方面:

1. 时钟管理

在操作系统中时钟的功能主要有两大类:

  • 向用户提供系统时间;
  • 通过时钟中断的管理,实现进程的切换。

2. 中断机制

引入中断技术的最初目的是提高多道环境中 CPU 的利用率。

后来随着现代操作系统的发展,中断成为了操作系统各项操作的基础,如鼠标键盘信息的输入、进程的管理与调度、文件访问等。可以说现代操作系统是依靠中断驱动的软件。

中断机制中,只由小部分是属于内核,它们负责保护和恢复中断现场的信息,转移控制权到相关的处理程序。这样可以减少中断处理时间,提高 CPU 利用率。

3. 原语

按层次结构设计的操作系统,底层必然是一些可以被调用的公用小程序,它们各自完成一个规定的操作。它们拥有如下特点:

  • 处于操作系统底层,是最接近硬件的部分;
  • 程序运行具有原子性;
  • 程序运行时间短,调用频繁。

通常把具有这些特点的程序称为原语(Atomic Operation)。定义原语的直接方法是关闭中断,让所有动作都不可分割的完成后再打开中断。

4. 系统控制的数据结构及处理

系统中用来登记状态信息的数据结构有很多,为了实现有效的管理,系统需要一些基本的操作。常见操作有以下几个:

  • 进程管理:进程状态管理、进程调度和分派、创建与撤销进程控制块等;
  • 存储器管理:存储器的空间分配和回收、内存信息保护程序、代码对换程序等;
  • 设备管理:缓冲区管理、设备分配和回收等。

从上述内容可以发现,核心态指令实际上包括系统调用类指令和一些针对时钟、中断和原语的操作指令。

二、中断和异常的概念

为了实现 CPU 用户态和核心态的切换,在 CPU 核心态建立了通道, 以便实现从用户态进入核心态。在实际操作系统中,CPU 运行上层程序时唯一能进入这些通道的途径就是通过中断和异常

中断(Interruption)也称外中断,指来自 CPU 指令以外的事情发生。例如 I/O 设备结束中断表示设备输入/输出完成,希望处理机能够向设备发下一个输入/输出请求,同时让程序继续运行。

时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时任务等。这一类中断通常与当前程序运行无关的事情。

异常(Exception)也称内中断、例外和陷入(trap),指源自 CPU 执行指令内部的事件,如地址越界、算术溢出、虚存系统的缺页及专门的陷入指令等引起的事件。关于异常的处理一般要依赖于当前程序的运行现场,而且异常通常不能被屏蔽,一旦出现必须立即处理

三、系统调用

所谓系统调用,是指用户在程序中调用操作系统所提供的一些子功能,系统调用可视为特殊的公告子程序。

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

  • 设备管理:完成设备的请求或释放,以及设备启动等功能;
  • 文件管理:完成文件的读、写、创建以及删除等功能;
  • 进程管理:完成进程的创建、撤销、阻塞及唤醒等功能;
  • 进程通信:完成进程之间的消息传递或信号传递等功能;
  • 内存管理:完成内存的分配、回收以及获取作业占用内存区大小及初始地址等功能。

用户程序不能直接执行对系统影响飞车大的操作,必须通过系统调用的方式请求操作系统代为执行,以便提高系统的稳定性和安全性,防止用户程序随意更改或访问重要的系统资源,影响其它进程的执行。

系统调用执行过程

在操作系统层面上我们关心的是系统核心态和用户态的软件实现与切换。

列举一些由用户态转向核心态的例子:

  • 用户程序要求操作系统的服务,即系统调用;
  • 发生了一次中断;
  • 用户程序中产生了一个错误状态;
  • 用户程序试图执行一条特权指令;
  • 从核心态转为用户态也是由特权指令产生,一般是中断返回指令。

由用户态转为核心态,不仅仅要切换状态,所用的堆栈也可能需要由用户堆栈切换为系统堆栈,但是系统堆栈也是属于该进程的。

如程序运行由用户态转为核心态,就会用到访管指令,访管指令是在用户态使用的,因此它是非特权指令。

参考资料:王道考研——操作系统

猜你喜欢

转载自blog.csdn.net/qq_43580193/article/details/112910308
1.3
今日推荐