Alex_McAvoy

想要成为渔夫的猎手

操作系统的运行环境

【内核】

在软件工程思想和结构程序设计方法影响下而诞生的操作系统,几乎都是层次式的结构,操作系统的各项功能被设置在不同的层次上

一些与硬件关联紧密的模块,如时钟管理、中断处理、设备驱动等,会放置在操作系统的最底层,同时,运行频率较高的程序,如进程管理、存储器管理、设备管理等,也同样会放在最底层,这些程序被统称为内核程序

由内核程序组成的数据结构,被称为内核(Kernel),其就是处于最底层、最核心的内核程序的集合

不同的操作系统对内核的定义不同,大多数操作系统内核包括时钟处理中断机制原语系统控制的数据结构及处理这四个方面

1.时钟处理

在计算机的各类部件中,时钟,是最关键的设备,其第一功能是计时,操作系统通过时钟管理,来向用户提供标准的系统时间

此外,通过时钟中断的管理,可以实现进程的切换

2.中断处理

引入中断技术的初衷,是提高多道程序运行环境中 CPU 的利用率,随着操作系统的发展,中断形成了多种类型,称为了操作系统各项操作的基础

在中断机制中,只有一小部分功能属于内核,如负责保护和恢复中断现场的信息,转移控制权到相关的处理程序

这样能够有效的减少中断处理时间,提高系统的并行处理能力

3.原语

按层次设计的操作系统,其底层必然是可被调用的公用小程序,其各自完成一个规定的操作,这些程序被称为原语(Atomic Operation),具有以下特点:

  • 处于操作系统的最底层,是最接近硬件的部分
  • 这些程序的运行具有原子性,其操作只能一气呵成
  • 这些程序的运行时间很段,且调用频繁

系统中的设备驱动、CPU 切换、进程通信等功能中的部分操作都可以被定义为原语,在原语执行过程中,为保证原子性,会关闭中断,让它的所有动作不可分割地完成后再打开中断

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

系统中用来登记信息的数据结构有很多,如:作业控制块、进程控制块、设备控制块、消息队列、缓冲区、空闲区分配表、内存分配表等等

为实现有效的管理,系统就需要一些基本的操作,常见的操作有:

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

【核心态与用户态】

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

  • 应用程序:用户自编的应用程序、系统外层的应用程序
  • 内核程序:操作系统内核程序

这两种程序的作用不太,内核程序是应用程序的管理者,而作为管理者,就需要执行一些特殊的命令,这些特殊的命令被称为特权指令,由此,有了特权指令与非特权指令的划分

  • 特权指令:计算机中不允许用户直接使用的指令,如 I/O 指令、置中断指令
  • 非特权指令:计算机中允许用户直接使用的指令

在操作系统的具体实现上,通过状态寄存器 PSW 来标识两类程序的转换,由此划分出两种状态:

  • 用户态:运行应用程序,PSW 置 $0$
  • 核心态:运行内核程序,PSW 置 $1$

【中断与异常的概念】

操作系统内核工作在核心态,应用程序工作在用户态,系统不允许应用程序实现核心态的功能,但又必须使用这些功能,因此就要考虑这两种状态如何转换

在实际的操作系统中,当内核态转为用户态时,往往通过特权指令,将 PSW 标志位设为用户态;当用户态转为内核态时,通过 CPU 检测中断信号,由硬件自动变为内核态,即中断屏蔽

简单来说,在某些情况下内核会将 CPU 主动权让给应用程序,中断,是让内核夺回 CPU 使用权的唯一途径,若无中断机制,一旦应用程序运行,其将会一直运行下去

中断(Interruption),也称外中断,是指来自 CPU 执行命令以外的事件的发生,如时钟中断、I/O 请求等,这一类中断通常是与当前程序运行无关的事件,即与当前处理机所运行的程序无关

异常(Exception),也称内中断陷入(Trap),是指来自 CPU 执行指令内部的事件,如非法操作码、算术溢出、地址越界等,这一类问题的处理一般要依赖于当前程序的运行现场,且异常不能被屏蔽,一旦出现要立即处理

【系统调用】

系统调用,是用户在程序中调用操作系统所提供的一些子功能,其可以被看作特殊的公共子程序

系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作,都必须通过系统调用的凡是提出服务请求,并由操作系统代为完成

通常,一个操作系统所提供的系统调用命令有几十甚至上百条之多,这些系统调用按功能可大致分为以下几类:

  • 设备管理:完成设备的请求或释放、设备启动等
  • 文件管理:完成文件读、写、创建、删除操作等
  • 进程控制:完成经常的创建、撤销、阻塞、唤醒等
  • 进程通信:完成进程间的消息传递、信号传递等
  • 内存管理:完成内存的分配、回收、作业占用内存区大小等功能

系统调用运行在系统的核心态,其可以保证使用系统功能时系统的稳定性和安全性,防止用户随意更改或访问系统的数据或命令

感谢您对我的支持,让我继续努力分享有用的技术与知识点!