处理器管理"/>
处理器管理
处理器状态
处理器管理是操作系统中重要组成部分,负责管理、调度和分配计算机系统的重要资源——处理器,并控制程序执行
由于处理器管理是操作系统最核心的部分,无论是应用程序还是系统程序,最终都要在处理器上执行以实现其功能,因此处理器管理的优劣性直接影响系统性能
程序以进程的形式来占用处理器和系统资源,处理器管理中最重要的是处理器调度,即进程调度,也就是控制、协调进程对处理器的竞争
进程可以被调度在一个处理器上交替地执行,或者在多个处理器上并行执行。不同类型的操作系统可能采取不同的调度策略
交替执行和并行执行都是并发的类型
计算机系统中运行的程序可以分为两大类:系统程序和应用程序,前者实现系统任务,后者实现应用任务
中断和异常是用户态到内核态转换的仅有途径
中断技术
中断概念
中断指在程序执行的过程中遇到紧急处理的事件时,暂时中止现行程序在 CPU 上的运行,转而执行相应的紧急事件处理的程序,待处理完成后再返回断点或者或者调度其他程序执行的过程
中断源分类
由硬件发出或者产生的中断称为硬中断,按硬中断事件的来源和实现手段可将中断分为外中断和内中断
外中断又叫中断或者异步中断,是指来自处理器之外的中断信号,包括时钟中断、键盘中断、它机中断和外部设备中断等。外中断又分为可屏蔽中断和不可屏蔽中断,各个中断具有不同中断优先级,表示事件的紧急状态,在处理高一级中断时,往往会部分或者全部屏蔽低级中断
内中断又称异常中断或者同步中断,是指来自处理器内部的中断信号,通常是由于在程序执行过程中,发现与当前指令关联的、不正常的或者错误的事件
内中断又可细分为:
访管中断,由执行系统调用而引起的
硬件故障中断(处理器内部的硬件),如电源失效、奇偶校验错误、总线超时等
程序性异常,如非法操作、地址越界、页面故障、调试指令、除数为0和浮点数溢出
所有这些事件均由异常处理程序处理,并且通常依赖于执行程序的当前现场
中断和异常的响应以及服务
无论是处理器外部产生的中断还是内部出现的异常,或是程序执行系统调用自愿访管;无论中断源是被动的还是主动的,cpu的响应过程基本上是一致的,即在执行完当前指令后,根据中断源所提供的得“中断向量”,在内核中找到相应中断服务例程并调度执行
中断向量:中断服务程序的入口地址
中断响应:由硬件对中断和异常事件做出反应的过程称为中断响应
中断:外部设备、时钟部件、或者其他计算机发出的,发现中断源并产生中断的硬件称为中断控制器,这些硬件包括中断逻辑线路和中断寄存器,当前指令执行结束后,CPU会检查中断寄存器是否有中断事件发生,若无中断信号或中断信号被屏蔽,继续执行程序的后序指令,否则将暂停执行当前程序,转向内核的中断处理程序运行
异常:在执行指令的时候,由指令本身的原因发生的,指令的控制逻辑和实现线路一旦发现异常情况便转向内核的异常处理程序
中断/异常的响应需要顺序做四件事:
发现中断源
在中断没有被屏蔽的情况下,硬件(中断控制器)发现中断/异常事件,并由 CPU 响应中断/异常请求。当发现多个中断源的时候,将根据预设的中断优先级先后响应中断请求
保护现场
暂停当前程序的运行,硬件将中断点的现场信息(PSW)保存至核心栈,使得中断/异常处理程序在运行的时候不会破坏中断程序中的有用信息,以便在处理结束后返回原程序继续运行
转向中断/异常事件处理程序执行
此时处理器已经从用户态转换至内核态,中断/异常程序开始工作
恢复现场
当中断处理结束后,恢复原运行程序的 PSW ,重新返回中断点以便执行后续指令
4. 中断事件处理原则
硬件故障中断
硬件故障导致,如电源故障、内存故障、设备故障等,需要人工干预。同时中断处理程序需要保护现场,停止设备工作,停止处理机运行,向操作员报告故障信息并对故障造成的破坏进行估计和恢复
程序性中断
语法错误:编译程序发现并报错
逻辑错误:测试程序发现并报错
程序运行的额过程中产生的异常,如定点溢出、阶下溢、除数为 0 等
I/O中断
访管中断
时钟中断
时钟是操作系统进行调度的重要工具,如维护系统绝对日期和时间、让分时进程按照时间片轮转等
进程及其实现
进程定义和属性
进程是程序在一个数据集合上的运行过程,是操作系统进行资源分配和调度的一个独立的基本单位。
进程的提出是为了刻画程序的并发性、解决资源的共享性
进程的属性:动态性、共享性、独立性、制约性、并发性
在OS为什么引入进程的概念?它与程序的差别和关系是怎样的?其基本特征是什么?
进程引入的原因:
多道程序在执行时,需要共享系统资源,从而导致各程序在执行过程中出现相互制约的关系,程序的执行表现出间断性的特征。这些特征都是在程序的执行过程中发生的,是动态的过程,而传统的程序本身是一组指令的集合,是一个静态的概念,无法描述程序在内存中的执行情况,即我们无法从程序的字面上看出它何时执行,何时停顿,也无法看出它与其它执行程序的关系,因此,程序这个静态概念已不能如实反映程序并发执行过程的特征。为了深刻描述程序动态执行过程的性质,人们引入“进程(Process)”概念。
进程和程序的区别:
①进程是程序的一次执行,属于动态概念,而程序是一组有序的指令,是一种静态概念。但进程离开了程序也就失去了存在的意义。
②一个进程可以执行一个或几个程序;反之,同一程序可能由几个进程同时执行。
③程序可作为软件资源长期保留,而进程是程序的一次执行过程,是暂时的。进程具有生命期。
④进程具有并发性,能与其它进程并发运行。而程序不具备这种特征。
⑤进程是一个独立的运行单位,也是系统进行资源分配和调度的一个独立单位。因此,进程具有独立性,但有时进程间又具有相互制约性。
特征:
动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
结构特征:进程由程序、数据和进程控制块三部分组成。
进程状态和转换
等待态:又称阻塞态或者睡眠态,指进程不具备运行条件,正在等待某个事件完成的状态
就绪态:进程具备运行条件,等待系统分配处理器以便运行的状态
运行态:进程占有处理器正在运行的状态
进程的基本状态有哪些?试描述进程状态转换图?
运行→阻塞:进程为等待输入而阻塞
阻塞→就绪:调度程序选择另一个进程(当进程等待的一个外部事件发生时)
就绪→运行:调度程序选择这个进程(再次轮到该进程占用CPU运行)
运行→就绪:调度程序选择另一个进程(让其他进程使用CPU时间时)
运行态:进程占用处理器资源
就绪态:进程已获得除处理器外的所需资源,等待分配处理器资源;
阻塞态:由于进程等待某种条件,在条件满足之前无法继续执行。
进程的描述和组成
进程映像:进程在不断发生变化,某时刻进程的内容以及其状态的集合称为进程映像,包括以下几个方面
进程控制块:每一个进程捆绑一个,用来存储存储进程的标志信息、现场信息和控制信息。进程创建时建立进程控制块,进程撤销时回收进程控制块,它与进程一一对应
进程程序块:进程执行的程序,规定进程一次运行所应完成的功能
进程核心栈:每一个进程绑定一个,进程在内核态工作时使用,用来保存中断/异常现场,保存函数调用的参数、局部变量和函数返回地址等
进程数据块:是进程的私有地址空间,存放各种私有数据,用户栈也在数据块中开辟,用在函数调用时存放栈帧、局部变量和返回地址等
进程的四个组成要素:控制块、程序块、数据块、核心栈
进程控制块
每一个进程有且仅有一个进程控制块,或者又叫进程描述符,它是进程存在的唯一标识,是操作系统用来记录和刻画进程状态以及环境信息的数据结构,是进程动态特征的汇集,也是操作系统掌握进程的唯一资料结构和管理进程的主要依据。进程控制块包括执行进程的时的情况,以及进程让出处理器之后所处的状态、断点等信息。
(1)、标识信息。标识信息用来唯一地标识一个进程
(2)、现场信息。现场信息用于保留进程在运行时存放在处理器现场中的各种信息。进程在让出处理器的时候,必须将此时的现场信息保存到它的 PCB 中,而当此进程恢复运行时也恢复处理器现场
(3)、控制信息。控制信息用于管理调度进程
线程及其实现
引入进程的目:(刻画程序的并发性、解决资源的共享性)使多个程序并发执行,改善资源利用率和提高系统效率
引入线程的目的:是为了减少程序并发执行时所付出的时空开销,使得并发力度更细、并发性更好
多线程中进程的定义:操作系统中除了了处理器以外的资源分配和保护的基本单位
线程是进程中能够并发执行的实体,是进程的组成部分,是处理器和调度和分配的基本单位,允许进程包含多个线程,这些线程共享进程所获得的内存空间和资源,可以为完成某一项任务而协同工作
进程可以分为两部分:资源集合和线程集合
进程要支撑线程运行,为线程提供虚拟地址空间和各种资源
处理器调度层次
高级调度(作业调度、长程调度):
由于内存空间有限,有时无法将用户提交的作业全部放入内存,因此需要确定某种规则来决定将作业调入内存的顺序。
高级调度是按一定的原则从外存上处于后备队列的作业中挑选一个作业,给他们分配内存等必要资源,并建立相应的进程(建立PCB)
中级调度(平衡调度、中程调度):
又称平衡调度、中程调度,根据内存资源情况决定内存中的所能容纳的进程数目,并完成外存和内存中进程对换工作。当内存中资源缺少时,会把暂时不能运行的进程换出内存,此时这个进程处于“挂起”状态,不参与调度;当进程具备运行条件且内存资源丰富的时候,再将内存重新调回内存工作,起到短时间内均衡系统负载的作用
目的是提高内存利用率和系统吞吐量。
低级调度(进程调度/线程调度、短程调度):
操作系统中最核心的部分,按照某种算法从就绪队列中选取一个进程,将处理机分配给它。
作业调度和低级调度优先算法
(1)、先来先服务(FCFS)
该算法既可用于作业调度,也可用于进程调度
算法按照作业的先后次序来挑选作业,先进入系统的作业先将被挑选进入内存,创建用户进程,分配所需资源,然后移入就绪队列。
这是一种非剥夺式的调度算法,易于实现,但是效率不高
只考虑作业等待 时间,没有考虑作业处理时间
不利于短作业而优待了长作业
不利于I/O繁忙型作业而有利于 CPU 繁忙型作业
(2)、最短作业优先(SJF)(非抢占式最短作业优先算法)
短作业(进程)优先调度算法,是指对短作业或短进程优先调度的算法,它们可以分别用于作业调度和进程调度,是根据服务的时间选择;
短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行;
短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。
这是一种非剥夺式调度算法
能够克服FCFS算法偏爱厂作业的缺点,易于实现,但是效率也不高
缺点是首先要知道作业的所需的 CPU 运行时间,很难精确估计,若估值过低,系统可能提前终止此作业;其次是忽视作业等待时间,由于系统不断地接受新作业,作业调度程序总是选择计算时间短的作业投入运行。因此进入时间早但是计算时间比较长的长作业总是在等待,就会出现饥饿现象;尽管克服了对厂作业的偏爱,但是缺少剥夺机制,对于分时、实时处理系统很不理想
(3)、最短剩余时间优先算法(抢占式最短作业优先算法)
是对FSJ的改进,将非剥夺式算法改为剥夺式算法。假设当前某进程或者线程正在执行,如果有新进入的进程或者线程,看它所需要的 CPU 运行时间是否小于当前正在执行线程或者进程的所需的剩余时间,若小于抢占式最短优先算法强行剥夺当前执行者的控制权,调度新进入的线程或者进程
(4)、最高响应比优先算法(HRRF)
FCFS:只考虑作业等待时间,没有考虑作业处理时间
FSJ:只考虑作业处理时间,没有考虑等待时间
而 HRRF 是介于两者之间的一种折中的非剥夺式算法,既考虑了作业等待时间,同时考虑了作业处理时间
选择响应比最高者投入运行
短作业容易得到较高响应比
克服了饥饿现象
(5)、优先级调度算法
总是从就绪队列中选择优先级最高的投入运行
在进程中/线程运行过程中,如果就绪队列中出现优先级更高的线程或者进程,系统可以预先设定为非剥夺式或者剥夺式。前者让当前进程/线程继续运行,直到它结束或出现等待事件而让出处理器,再调度另一个优先级更高的进程/线程运行;后者直接使用剥夺式方式强制停止当前进程或者线程的运行,转而执行优先级更高的进程或者线程
克服了饥饿现象
(6)、轮转调度算法(RR)
时间片调度
调度程序每次把 CPU 分配给就绪队列的首进程/线程,使用规定的时间间隔,称为时间片,就绪队列中每一个进程/线程轮流地运行一个时间片,当时间片用完就强迫当前运行进程/线程让出处理器,转而排列到就绪队列尾部,等候下一轮调度。所以一个耗时型进程/线程需要经过多次轮转才能完成
剥夺式算法,时间耗费在进程/线程的切换上的开销比较大
作业调度、进程调度?
作业调度: 又称为高级调度,频度较低。其主要工作是将位于外存后备队列中的某个(或某几个)作业调入内存,排在就绪队列上。注意了,这个时候仅仅是将作业调入内存,并为作业创建进程、分配资源,此时进程处于就绪态,并没有执行。
进程调度: 进程调度又称为低级调度,是最基本的、频度最高的调度方式。其主要任务是从就绪队列中选取一个(或几个)进程,并分配处理机的过程,这时候才可以理解为“执行”。
作业存在的四种状态是什么?
提交状态、后备状态、执行状态、完成状态
更多推荐
处理器管理
发布评论