其实,我只是把
PPT
Ctrl+C、Ctrl+V 了一下(捂脸)
中央处理器(Central Processing Unit,CPU)是一台计算机的运算核心和控制核心。
处理器由运算器、控制器、一系列的寄存器以及高速缓存构成。
1)运算器
实现指令中的算术运算和逻辑运算,是计算机计算的核心。
2)控制器
负责控制程序运行的流程,包括取指令、维护 CPU 状态、CPU 与内存的交互等等。
3)寄存器
寄存器是指令在 CPU 内部作处理的过程中暂存数据、地址以及指令信息的存储设备。在计算机的存储系统中它具有最快的访问速度。(寄存器 > 缓存 > 内存 > 外存)
● 特权指令:只能由操作系统使用的指令
● 非特权指令:操作系统和用户都能使用的指令
具体特权指令如:启动I/O设备、设置时钟、控制中断屏蔽位、清内存、建立存储键,加载程序状态字等。
管态:操作系统管理程序运行的状态,具有较高的特权级别,又称为特权态(特态)、系统态。
目态:用户程序运行时的状态,较低的特权级别,又称为普通态(普态)、用户态。
(注意:有些系统将处理器状态划分核心状态,管理状态和用户程序状态(目标状态)三种)
处理器处于管态时:
√ 全部指令(包括特权指令)可以执行
√ 可使用所有资源
√ 并具有改变处理器状态的能力
处理器处于目态时:
√ 只有非特权指令能执行
● 特权级别越高,可以运行指令集合越大
● 高特权级别对应的可运行指令集合包含低特权级的
目态→管态 :其转换的唯一途径是通过中断。
管态→目态 :可用设置PSW(修改程序状态字)可实现。
程序状态寄存器PSW是计算机系统的核心部件——控制器的一部分。
PSW用来存放两类信息:一类是体现当前指令执行结果的各种状态信息,称为状态标志,如有无进位(CF位),有无溢出(OF位),结果正负(SF位)等;
另一类是存放控制信息,称为控制状态,如允许中断(IF位),方向标志(DF)等。
PSW用来控制指令执行顺序并保留和指示与程序有关的系统状态,主要作用是实现程序状态的保护和恢复。
每个进程都有一个与其执行相关的PSW,每个处理器都设置一个PSW寄存器。进程占有处理器执行,它的PSW将占有PSW寄存器。
中断是指CPU对系统中或系统外发生异步事件的响应(异步事件是指无一定时序关系的随机发生事件)
强迫性中断
正在运行的程序所不期望的,由于某种硬件故障或外部请求引起的。
自愿性中断
用户在程序中有意识安排的中断,是由于用户在编制程序时因为要求操作系统提供服务,有意使用“访管”指令或系统调用,使中断发生。
按事件来源和实现手段分类:
1)中断是由与现行指令无关的中断信号触发的(异步的)
2)中断的发生与CPU处在用户模式或内核模式无关
3)在两条机器指令之间才可响应中断
4)一般来说,中断处理程序提供的服务不是为当前进程所需的
1)异常是由处理器正在执行现行指令而引起的
2)一条指令执行期间允许响应异常
3)异常处理程序提供的服务是为当前进程所用的
(系统进程一般优先于用户进程)
(1)运行态(Running):
进程占有CPU,并在CPU上运行
(2)就绪态(Ready):
一个进程已经具备运行条件,但由于无CPU暂时不能运行的状态(当调度给其CPU时,立即可以运行)
(3)等待态(Blocked):
又叫阻塞态、封锁态、睡眠态指进程因等待某种事件的发生而暂时不能运行的状态(即使CPU空闲,该进程也不可运行)
和三态模型相比,增加了两个状态,分别是:
(1)新建状态
① 操作系统已完成为创建一进程所必要的工作
② 但还没有允许执行该进程
(尚未同意运行,即尚未进入内存)
(2)终止状态
进程运行终止后进程移入该状态
进程在此状态不再有执行资格
表格和其它信息暂时由辅助程序保留
从三态模型到五态模型
比五态模型增加了“挂起”状态。
为什么要有“挂起”状态?
由于进程的不断创建,系统资源已不能满足进程运行的要求,就必须把某些进程挂起(suspend),对换到磁盘镜像区中,暂时不参与进程调度,起到平滑系统操作负荷的目的。
挂起(Suspend):把一个进程从内存转到外存可能有以下几种情况:
激活(Activate):把一个进程从外存转到内存;可能有以下几种情况:
进程控制块(Process Control Block)是系统为了管理进程设置的一个专门的数据结构,用它来记 录进程的外部特征,描述进程的运动变化过程。
系统利用PCB来控制和管理进程,所以PCB是系统感知进程存在的唯一标志。
进程与PCB是一一对应的。
(1)进程描述信息
(2)进程控制信息
(3)所拥有的资源和使用情况
(4)CPU现场保护信息
(1)进程上下文的概念:进程本身+运行环境对进程执行活动全过程的静态描述
(2)进程上下文的分类
① 用户级上下文:进程的用户地址空间(包括用户栈各层次),包括用户正文段、用户数据段和用户栈
② 寄存器级上下文:PSW寄存器、处理器状态寄存器、栈指针、通用寄存器的值
③ 系统级上下文:
● 静态部分(PCB和资源表格)
● 动态部分:核心栈(核心过程的栈结构,不同进程在调用相同核心过程时有不同核心栈)
(3)进程上下文的切换
进程切换是让处于运行态的进程中断运行,让出处理器,这时要做一次进程上下文切换、即保存老进程状态而装入被保护了的新进程的状态,以便新进程运行。
进程控制是系统使用一些具有特定功能的程序段来创建、撤消进程以及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。
包括:创建进程、阻塞进程、唤醒进程、挂起进程、激活进程、终止进程和撤销进程等
原语(Primitive)是在管态下执行、完成系统特定功能的过程。
原语在执行过程中不允许被中断,是一个不可分割的基本单位,原语的执行是顺序的而不可能是并发的。
(1)由系统程序模块统一创建,例如在批处理系统中,由操作系统的作业调度程序为用户作业创建相应的进程以完成用户作业所要求的功能。
(2)由父进程创建,例如在层次结构的系统中,父进程创建子进程以完成并行工作。
(1)父进程(Parent Process)创建子进程(Child Process)时 ,系统在进程表中增加一项,并从PCB池中取一个空白PCB。
(2)为新创建的进程映像分配地址空间。传递环境变量,构造共享地址空间。
(3)为新进程分配资源,除内存空间外,还有其他资源。
(4)查找辅存,找到进程正文段并装到正文区。
(5)初始化进程控制块,为新进程分配进程标识符,初始化PSW。
(6)加入就绪进程队列,将进程投入运行。
(7)通知操作系统的某些模块,如记账程序、性能监控程序。
Linux利用 fork ( ) 为每个终端创建一个子进程为用户服务。(考过)
进程阻塞的具体步骤是——
(1)停止进程执行,保存现场信息到PSW
(2)修改PCB的有关内容,如进程状态由运行改为等待
(3)把修改状态后的PCB加入相应的等待队列
进程唤醒的具体步骤是——
(1)从相应的等待进程队列中取出PCB
(2)修改PCB的有关信息,如进程状态等
(3)将被唤醒的进程置为就绪状态之后,把修改后的PCB加入有关就绪进程队列
① 该进程已完成所要求的功能而正常终止;
② 由于某种错误导致非正常终止;
③ 祖先进程要求撤消某个子进程。
① 根据撤销进程标识号,从相应队列中找到它的PCB;
② 将该进程拥有的资源归还给父进程或操作系统;
③ 若该进程拥有子进程,应先撤销它所有子孙进程,以防它们脱离控制
④ 撤销进程出队,将它的PCB归还到PCB池。
① 检查要被挂起进程的状态,若处于活动就绪态就修改为挂起就绪,若处于阻塞态,则修改为挂起阻塞。
② 被挂起进程PCB的非常驻部分要交换到磁盘对换区。
① 把进程PCB非常驻部分调进内存,修改它的状态,挂起等待态改为等待态,挂起就绪态改为就绪态,排入相应队列中。
② 挂起原语既可由进程自己也可由其他进程调用,但激活原语却只能由其他进程调用。
WHAT:按什么原则分配CPU?
——进程调度算法
WHEN:何时分配CPU?
——进程调度的时机
HOW : 如何分配CPU?
——CPU调度过程(进程的上下文切换)
① 合理性
② 有效性
① 系统设计目标
批处理系统以充分发挥计算机效率为目的;实时系统要保证不要丢失实时信息并使之得到及时处理;而分时系统则应该优先保证用户的请求能够及时给予响应。
② 资源利用率
考虑在实现设计目标的前提下,尽可能地发挥各种资源的效能。
③ 均衡系统与用户的要求
一方面,不能因为用户的要求而完全不顾及系统的性能,另一方面,也不应该使一个作业的运行被无限制地推迟。
也称为作业调度或宏观调度。
例如,在分时操作系统中 ,高级调度任务:
(1)是否接受一个终端用户的连接;
(2)一个程序能否被计算机系统接纳并构成进程;
(3)一个新建态进程是否能够加入就绪进程队列。
也称为平衡负载调度或中程调度。
(1)决定主存储器中所能容纳的进程数,这些进程将允许参与竞争处理器资源。
(2)中级调度根据存储资源量和进程的当前状态来决定辅存和主存中进程的对换。
(3)使用方法是通过把一些进程换出主存,使之进入挂起状态,起到平滑和调整系统负荷作用。
也称为进程调度或短程调度。
(1)按照某种原则决定就绪队列中的哪个进程或线程能获得处理器,并将处理器出让给它工作。
(2)短程调度是操作系统最为核心的部分,短程调度策略的优劣直接影响到整个系统的性能。
(3)低级调度的时间尺度通常是毫秒级的。由于其算法的频繁使用,要求在实现时做到高效。
(1)作业
用户在一次计算过程中,或者一次事务处理过程中,要求计算机系统所做工作的总称。
(2)作业流
若干个作业进入系统并存放于主存储中形成作业流。
(3)作业步
一个作业可划分成若干部分,每部分称一个作业步。
进入状态→后备状态→运行状态→退出状态
主要功能:
只要通过调用相应的资源管理程序的有关部分,审核其表中是否能满足作业说明书中的要求即可
调度的关键在选择恰当的算法
① 作业是用户向计算机提交任务的任务实体,而进程则是完成用户任务的执行实体,是向系统申请分配资源的基本单位。
② 一个作业可由多个进程组成。且必须至少由一个进程组成,但反过来不成立。
③ 作业的概念主要用在批处理系统中,像Linux这样的分时系统中,则没有作业概念,而进程的概念则用在几乎所有的多道程序系统中。
(1)单位时间内运行尽可能多的作业
(2)使处理器尽可能保持“忙碌”
(3)响应时间和周转时间能够尽可能短
(4)使各种I/O设备得以充分利用
(5)对所有的作业都是公平合理的
要设计一个理想的调度算法是一件十分困难的事。在实际系统中,调度算法往往折衷考虑。
大多数操作系统都采用比较简单的调度算法。
(1)作业平均周转时间
(2)平均带权周转时间
(1)先来先服务算法(FCFS:First Come First Serve)
最简单的调度算法。按照作业提交的先后顺序分派CPU。当前作业或进程占用CPU后,除非其任务完成或阻塞,才让出CPU(非抢占式)。
特点:
(2)最短作业优先算法(SJF:Shortest Job First)
对执行时间短的作业优先分派处理机。
特点:
(3)最短剩余时间优先算法(SRTF)
SRTF把SJF(短作业优先)算法改为抢占式。
一个新作业进入就绪状态,如果新作业需要的CPU时间比当前正在执行的作业剩余下来还需的CPU时间短,SRTF强行赶走当前正在执行作业。称最短剩余时间优先算法。
(4)最高响应比优先算法(HRN)
(HRN:Highest Response Ratio Next)
响应比R = 作业周转时间 / 作业处理时间
=(作业处理时间+作业等待时间)/作业处理时间
= 1 +(作业等待时间 / 作业处理时间)
(5)基于优先数的调度算法(HPF)
● 由用户规定优先数(外部优先数)
用户提交作业时,根据急迫程度规定适当的优先数
作业调度程序根据JCB优先数决定进入内存的次序
● 由系统计算优先数(内部优先数)
例:可按如下公式计算作业的优先数:
优先数 = 用户规定优先数 – 作业处理时间 + 作业等待时间 – 输出量
(6)均衡调度算法(分类排队法)
基本思想:
目标:
(1)记录系统中所有进程的执行情况
(2)选择占有处理机的进程
(3)进行进程上下文切换
(4)低级调度的功能小结
当有比正在运行的进程优先级更高的进程就绪时,系统可强行剥夺正在运行进程的CPU,提供给具有更高优先级的进程使用,或是当运行进程/线程时间片用完后被剥夺。win98/2000/xp
某一进程被调度运行后,除非由于它自身的原因不能运行,否则一直运行下去。win3.1
关于时间片的取选
(1)静态优先数法
(2)动态优先数法
① 线程标识信息。
② 线程运行状态(如运行、就绪等)和调度优先级等调度 信息。
③ 分别在用户态和核心态下使用的两个栈。用于保存现场 信息、子程序局部变量等。
④ 一个线程关联的私有存储区。
⑤ 与进程描述信息的连接信息。进程内的每个线程都共享进程描述信息,如地址空间、使用资源等。
① 进程是资源分配的基本单位。进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。而线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。
② 当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。
③ 线程只由相关堆栈寄存器和线程控制块组成。寄存器可被用来存储线程内的局部变量,但不能存储其他线程的相关变量。
④ 进程切换时涉及到有关资源指针的保存以及地址空间的变化等问题;线程切换时,由于同一进程内的线程共享资源和地址空间,将不涉及资源信息的保存和地址变化问题。而且,进程的调度与切换都是由操作系统内核完成,而线程则既可由操作系统内核完成,也可由用户程序进行。
⑤ 进程间的关系比较疏远。各个进程是在自己独有的地址空间内执行,不但寄存器和堆栈是独有的,动态数据堆、静态数据区和程序代码也相互独立。而线程间的关系则要紧密得多,虽然各线程为保持自己的控制流而独有寄存器和堆栈,但由于两线程从属于同一进程,它们共享同一地址空间,所以动态堆、静态数据区及程序代码为各线程共享。
① 快速的关联切换
进程调度时,系统必须交换地址空间,因而进程切换时间长。在同一程序内的多个线程共享同一地址空间,因而能使线程快速切换。
② 系统额外开销小
对多个进程的管理(创建、调度等)有比较大的系统开销。在需要动态创建新进程的应用中,这种开销比较显著。而线程的系统开销比进程的小得多。
③ 通信很容易实现
进程或线程之间需要进行数据交换。对于自动共享同一地址空间的各线程来说,所有的全局数据都可以访问,因而不需要什么特殊手段就能自动实现数据共享。而进程之间的通信则要复杂得多。
④ 线程个数比进程个数多得多
许多多任务操作系统限制用户进程总数,这对许多并发应用来说远远不够。在多线程系统中,虽存在线程总数限额,但个数多得多。
用户级线程的优点在于:
① 线程不依赖于操作系统,可以采用与问题相关的调度策略,灵活性好;
② 同一进程中的线程切换不需进入操作系统,因而实现效率较高。
用户级线程的缺点在于:
① 同一进程中的多个线程不能真正并行;
② 由于线程对操作系统不可见,调度在进程级别,若某进程中的一个线程通过系统调用进入操作系统受阻,该进程的其他线程也不能运行。
①核心级线程是由操作系统支持实现的线程,操作系统维护核心级线程的各种管理表格,负责线程在处理机上的调度和切换,线程是CPU调度的基本单位。
②操作系统提供了一系列系统调用界面,让用户程序请求操作系统进行线程创建、结束、同步等操作。
核心级线程的优点是并发性好,在多CPU环境中同一进程中的多个线程可以真正并行执行。
缺点是线程控制和状态转换需要进入操作系统完成,系统开销比较大。
Linux的调度函数是schedule。