操作系统的运行机制和体系结构
运行机制
非特权指令:“人畜无害”,安全的指令,程序可以随便用
特权指令:危险的指令,只允许某些程序的调用
问:CPU怎么判断当前是否可以执行特权指令呢? 这就引出了CPU的两种状态,用户态,还有核心态。
用户态:当CPU处于用户态时,CPU只能执行非特权指令
核心态:而当CPU处于核心态时,CPU能执行非特权指令和特权指令
问:那CPU怎么知道自己位于哪个状态呢? 其实CPU中有一个寄存器 — 程序状态字寄存器(PSW),当该寄存器的值是0时,表示CPU处于用户态;而当为1时,表示CPU处于核心态。
应用程序:应用程序运行于用户态,只能执行非特权指令。
内核程序:内核程序是操作系统的管理者,运行于核心态,所以可以执行特权指令和非特权指令。
大内核:CPU不必在用户态(处理人员)和核心态(管理人员)之间来回切换,这样可以提高工作的效率,但是结构(分工)有些混乱。 微内核:CPU必须来回切换用户态(处理人员)和核心态(管理人员,财务人员),工作效率降低了,但是结构(分工)很清晰。
中断机制
中断机制的诞生
发生了中断就意味着需要操作系统的介入,开展管理工作。由于操作系统的管理工作(比如分配打印机设备等)需要使用特权指令,所以CPU状态要从用户态切换到核心态,使操作系统获得计算机的控制权。有了中断机制,计算机才能实现多道程序的并发运行。
常见的中断
时间片用完之后的中断 CPU收到计时部件发出的中断信号,切换到核心态对中断进行处理。这个中断是为了告诉正在运行的程序:“你的运行时间到了,让别的程序运行吧!”。 这个中断的目的是:实现计算机中多道程序的并发运行。
输出指令引起的中断 运行中的程序请求输出,CPU也会切换为核心态对中断进行处理。 假如该程序要求输出到打印机,CPU会向打印机发出信号,让打印机开始工作。而且该程序也会暂停运行,等待打印机工作完成。该程序暂停了,说明CPU空闲了,那总不能让CPU傻傻的在那里等吧。于是CPU会切换为用户态,转入另外一个程序,运行它的指令。 而等到打印机工作完成,打印机设备会向CPU发出中断信号,这个中断信号表示:“你给我的工作我已经完成了”,CPU收到中断信号后,会切换到核心态处理中断。 这个中断的目的是:提高计算机资源(CPU资源,打印机资源…)的利用率。
中断与CPU状态的切换
-
用户态 -> 核心态 中断是用户态到核心态切换的唯一途径。
-
核心态 -> 用户态 核心态到用户态的切换只需要通过CPU执行一个特权指令,将程序状态字(PSW)的标志位设置为用户态。
中断的分类
中断分为2类,内中断和外中断。我们可以通过中断信号的来源来判断。
内中断 内中断的信号来自与CPU内部。 (与当前执行的指令有关,比如输出指令或整数除0指令,CPU运行这条指令的时候会产生一个内中断信号) 外中断 外中断的信号来自于CPU外部。 (与当前执行的指令无关,比如打印机输出完成之后发出的外中断信号)
外中断的处理过程
1、执行完每条指令之后,CPU会检查当前是否有外部中断信号。 2、如果检测到外部中断信号 (比如打印机工作完成了),则需要保护被中断进程的CPU环境 (如程序状态字PSW, 程序计数器PC,各种通用寄存器的值)。 3、根据中断信号类型转入相应的中断处理程序。 4、恢复原进程的CPU环境并退出中断处理程序,返回原进程继续往下执行。 在这里,进程可以理解为正在运行的程序。
进程
什么叫进程
进程是程序的一次执行过程。 程序强调的是静态性,它只是安安静静的躺在外存(如硬盘)之中,而当双击运行这个程序时,该程序会被操作系统载入到内存,生成相应的进程;而进程强调的是动态性,CPU会不断访问内存,执行进程的指令,完成进程的所提出的任务。
什么叫进程实体
随着计算机的发展,计算机可以支持多道程序并发运行了,那操作系统怎么去记录这些进程的程序段和数据段的位置呢? 操作系统可以构建一个叫进程控制块(PCB)的数据结构来存放这些信息。
所以,当程序运行的时候,操作系统会为该进程构建一个叫进程控制块(PCB)的数据结构,用以记录该进程的各种信息。 而进程实体 = PCB + 程序段 + 数据段。 (进程实体 别名 进程映像)
进程与进程实体的关系
由上文可知,程序段、数据段、PCB三部分组成了进程实体(进程映像)。所以,在引入进程实体概念之后,我们可以把进程定义为:进程是进程实体的运行过程, 是系统进行资源分配和调度的一个独立单位。
但是,在一般情况下,我们把进程实体就称为进程,例如: 所谓的创建进程, 实际上是创建进程实体中的PCB,而撤销进程,实际上是撤销进程实体的PCB。 (PCB是进程存在的唯一标志)
注意: 严格来说,进程实体和进程并不一样,进程实体是静态的,而进程是动态的。因此我们可以说:进程由程序段、数据段和PCB三部分组成。
下面说说PCB的存储信息与分类。
PCB的存储信息与分类
分类方式一
分类方式二
进程的组织方式
一个操作系统中通常由数十、数百乃至数千个PCB。为了对它们进行有效的管理,操作系统应该用适当的方式把这些进程的PCB组织起来。 注意:进程的组成讨论的是一个进程内部由哪些部分组成的问题,而进程的组织讨论的是多个进程之间的组织方式问题。
进程的组织方式有两种,链接方式和索引方式,下面对这两种方式进行简单介绍。
链接方式 链接方式会按照进程的状态将PCB分为多个队列,操作系统持有各个队列的指针。 (进程的状态有:阻塞态,就绪态,运行态…,之后会介绍是什么意思)
以上所有的信息都被放置于内存之中。阻塞队列可能还会被划分为因等待什么事件而阻塞。
索引方式 索引方式会按照进程的状态将PCB建立几张索引表,操作系统持有各个索引表的指针。 (进程的状态有:阻塞态,就绪态,运行态…,之后会介绍是什么意思) 以上所有的信息都被放置于内存之中。阻塞队列可能还会被划分为因等待什么事件而阻塞。
进程的特征
进程和程序有所联系也有所区别,相比于程序,进程拥有以下特征。
学习提示:由于异步性会导致并发进程执行结果的不确定性,所以操作系统需要提供"进程同步"机制来解决异步问题,具体会在之后的"进程同步"中学习。
进程状态
导言
在上篇说到,进程是程序的一次执行。在这个执行过程中,有时进程正在被CPU处理,有时又需要等待CPU的服务,可见,进程存在多种状态。为了方便对各个进程的管理,操作系统需要将进程合理地划分为几种状态。 下面介绍进程的三种基本状态和另外两种状态。
三种基本状态
运行态 进程拥有了CPU资源和其他所需资源。(比如打印机资源,当打印机准备好,打印机才能为该进程服务) 就绪态 进程拥有了其他所需资源,但还没拥有CPU资源。(当打印机准备好,该进程等待CPU的调度) 阻塞态 进程既没有CPU资源也没有其他所需资源。(当打印机资源在准备的时候,该进程不占用打印机资源,而且CPU会执行其他进程的指令)
另外两种状态
当我们刚开始运行程序的时候,操作系统需要为该进程分配所需的内存空间等系统资源,并为其创建、初始化PCB。(如 分配进程标识符PID),此时,该进程就处于创建态。而当进程结束时 (正常结束或者由于bug导致进程无法继续执行下去,如 整数除0错误),操作系统会回收分配给该进程的系统资源以及撤销该进程的PCB…,目的是为了撤销该进程,此时,该进程就处于终止态。
创建态 进程正在被创建,操作系统为该进程分配系统资源、初始化PCB。 终止态 进程正在被撤销,操作系统会回收该进程拥有的系统资源、撤销PCB。
进程状态的转换
看下图。
在这里,进程由"运行态–>阻塞态"是进程主动请求的,是一种主动行为。 (比如 进程主动请求打印机资源,由于打印机资源的准备需要花时间,所以,CPU会执行"原语",让该进程会进入阻塞态) 但是,进程由"阻塞态–>就绪态"不是进程自身控制的,是一种被动行为。(比如 请求的打印机资源准备好了,那打印机会给CPU发信号。之后,CPU会执行"原语",让进程会进入就绪态)