1 处理器状态
计算机系统的处理器包括一组寄存器,其个数根据机型的不同而不同,它们构成了一级存储,比主存容量小 ,但访问速度快
处理现场:寄存器所存储的信息与程序
机器指令的集合称为指令系统:
- 数据处理类
- 转移类
- 数据传送类
- 移位
- 字符串指令
- I/O指令
特权指令:
- 指只能提供给操作系统的核心程序使用的指令,如启动I/O设备、设置时钟、控制中断屏蔽位、清主存、建立存储键,加载PSW等
处理器状态标志:
- 管理状态(核心状态、特态或管态)
- 用户状态(目标状态、常态或目态)
处理器从用户态向内核态转换:
- 一是程序请求操作系统服务,执行系统调用
- 二是程序运行时,产生中断或异常事件,运行程序被中断,转向中断处理或异常处理程序工作
- 都是通过中断机制发生,中断和异常是用户态到内核态转换仅有的途径
处理器从内核态转向用户态:
- 计算机提供一条特权指令称作加载程序状态字,用来实现从系统(核心态)返回到用户态,控制权交给应用进程
用户栈:用户进程空间中开辟的一块区域,用于保存应用程序的子程序间相互调用的参数、返回值返回点以及子程序的局部变量
核心栈:也叫系统栈和内核栈,是内存中属于操作系统空间的一块区域
- 用于保存中断现场
- 保存操作系统程序间相互调用的参数、返回值返回点以及子程序的局部变量
栈指针:指向栈的地址
进程拥有用户栈+核心栈+栈指针
-
程序状态字(PSW ,program status word)
- PSW用来控制指令执行顺序并保留和指示与程序有关的系统状态
- 主要作用是实现程序状态的保护和恢复
- 每个程序都有一个与其执行相关的PSW,每个处理器都设置一个PSW寄存器。程序占有处理器执行,它的PSW将占有PSW寄存器
- 程序基本状态:
- 程序计数器
- 条件码
- 处理器状态位
- 中断码:保存程序执行时当前发生的中断事件
- 中断屏蔽位:指明程序执行中发生中断事件时,是否响应出现的中断事件
- 标志位:状态标志、控制标志、系统标志
2 中断技术
中断是指程序执行过程中,遇到急需处理的事件时,暂时中止CPU上现行程序的运行,转去执行相应的事件处理程序,待处理完成后再返回原程序被中断处或调度其他程序执行的过程
中断源分类:
- 外中断(中断或异步中断)
- 是指来自处理器之外的中断信号
- 包括时钟中断、键盘中断和设备中断等
- 外中断又分可屏蔽中断和不可屏蔽中断,每个不同中断具有不同的中断优先级,表示事件的紧急程度,在处理高一级中断时,往往会屏蔽部分或全部低级中断
- 内中断(异常中断)
- 是指来自处理器内部,通常由于程序执行中,发现与当前指令关联的、不正常的、或是错误的事件
- 区别:
- 中断是由与现行指令无关的中断信号触发的(异步的),且中断的发生与CPU处在用户模式或内核模式无关,在两条机器指令之间才可响应中断,一般来说,中断处理程序提供的服务不是为当前进程所需的;异常是由处理器正在执行现行指令而引起的,一条指令执行期间允许响应异常,异常处理程序提供的服务是为当前进程所用的。异常包括很多方面,有出错(fault),也有陷入(trap)等
- 要求“中断”被快速处理,以便及时响应其它中断信号,所以,中断处理程序处理过程中是不能阻塞的。“异常”处于被打断的当前进程上下文中,所提供的服务是当前进程所需要的,所以,异常处理程序处理过程中是可以阻塞的
- 中断允许发生嵌套,但异常大多为一重;异常处理过程中可能会产生中断,但中断处理过程中决不会被异常打断
中断和异常的响应及服务
- 发现中断源
- 保护现场
- 转向处理中断/异常事件的处理
- 恢复现场
中断事件处理原则:
- 硬件故障中断
- 程序性中断
- I/O中断
- 访管中断
- 时钟中断
-
时钟是操作系统进行调度工作的重要工具,如让分时进程作时间片轮转、让实时进程定时发出或接收控制信号、系统定时唤醒或阻塞一个进程、对用户进程进行记账
-
时钟可分成绝对时钟和间隔时钟两种
-
Linux系统运行不同的间隔定时器,类型有三种:
- real 间隔定时器-按实际经过时间计时,不管进程处在何种模式下运行,包括进程被挂起时,计时总在进行,定时到达时发送给进程一个SIGALRM信号
- virtual 间隔定时器-进程在用户态下执行时才计时,定时到达时发送给进程一个SIGVTALRM信号
- profile 间隔定时器-进程执行在用户态或核心态时都计时,当定时到达时发送给进程一个SIGROF信号
-
中断优先级和多重中断:
- 中断优先级
- 中断屏蔽
- 可编程中断控制器,可通过指令设置屏蔽码。中断屏蔽是指禁止CPU响应中断或禁止中断产生
- 作用:
- 延迟或禁止某些中断的响应
- 协调中断响应与中断处理的关系。确保高优先级中断可以打断低优先级中断,反之却不能
- 防止同级中断相互干扰
- 多重中断事件处理
- 指中断正在进行处理期间,CPU又响应新的中断事件,于是暂时停止正在运行的中断处理程序,转去执行新的中断处理程序
- 处理方法:
- 串行处理:通过中断屏蔽实现,保证一个中断程序不被打断
- 嵌套处理:响应更高优先级中断
- 即时处理:立即响应中断
3 进程及其实现
进程:是可并发执行的程序在某个数据集合上的一次计算活动,也是操作系统进行资源分配和保护的基本单位
- 进程是一个既能用来共享资源,又能描述程序并发执行过程的系统基本单位
- 进程是一种支持程序执行的系统机制
属性:
- 动态性:一次执行过程,具有生命周期
- 共享性:多个进程可执行相同的程序
- 独立性
- 制约性:进程因共享资源或协同工作产生相互制约的关系,造成进程执行速度的不可预测性,必须对进程的执行次序或相对执行速度加以协调
- 并发性:多个进程同个时间段内执行
进程状态:
- 等待态
- 就绪态
- 运行态
- 挂起进程特征:
- 不能立即被执行
- 可能会等待事件,但所等待事件是独立于挂起条件的,事件结束并不能导致进程具备执行条件
- 进程进入挂起状态是由于操作系统、父进程或进程本身阻止它的运行
- 结束进程挂起状态的命令只能通过操作系统或父进程发出
进程映像:
- 进程控制块:每个进程一个,存储标志信息、现场信息和控制信息
- 进程程序块
- 进程核心栈:每个进程一个,进程在内核态工作时使用,用来保存中断/异常现场,保存函数调用的参数、局部变量和返回地址等
- 进程数据块:进程私有空间,存放私有数据
进程上下文:进程物理实体和支持进程运行的环境合称为进程上下文
当系统调度新进程占有处理器时,新老进程随之发生上下文切换。进程的运行被认为是在上下文中执行
- 组成:
- 用户级上下文
- 系统级上下文
- 寄存器上下文
进程控制块PCB:是操作系统用于记录和刻划进程状态及有关信息的数据结构,也是操作系统掌握进程的唯一资料结构,它包括进程执行时的情况,以及进程让出处理器后所处的状态、断点等信息
- 包含:
- 标识信息
- 现场信息
- 控制信息
进程队列及其管理:
- 处于同一状态的所有PCB链接在一起的数据结构称为进程队列
- 通用队列组织方式:
- 线性方式
- 链接方式
- 索引方式
进程切换:让处于运行态的进程中断运行,让出处理器,这时要做一次进程上下文切换、即保存老进程状态而装入被保护了的新进程的状态,以便新进程运行
-
保存被中断进程的处理器现场信息
修改被中断进程的进程控制块有关信息,如进程状态等
把被中断进程的PSW加入有关队列
选择下一个占有处理器运行的进程
修改被选中进程的PSW的有关信息
根据被选中进程设置操作系统用到的地址转换和存储保护信息
根据被选中进程恢复处理器现场
调度和切换时机问题 :
- 由于种种原因,调度和切换并不一定能一气呵成
- 通常的做法是,由内核置上请求调度标志,延迟到上述工作完成后再进行调度和进程上下文切换
处理器状态切换:
- 把进程从用户状态切换到内核状态,去执行操作系统服务程序以获得服务
- 步骤:
- 1)保存被中断进程的处理器现场信息
- 2)处理器从用户态切换到核心态,以便执行服务程序或中断处理程序
- 3)如果处理中断,可根据规定的中断级设置中断屏蔽位
- 4)根据系统调用号或中断号,从系统调用表或中断入口表找到服务程序或中断处理程序地址
- CPU上执行进程在任何时刻必定处于以下4个活动范围:
- 用户空间中,处于进程上下文,用户进程在运行,使用用户栈
- 内核空间中,处于进程上下文,内核代表某进程在运行,使用核心栈
- 内核空间中,处于中断上下文,与任何进程无关,中断服务程序正在处理特定中断
- 内核空间中,内核线程(无用户地址空间的进程)运行于内核态
进程控制和管理:
- 创建进程、阻塞进程、唤醒进程、挂起进程、激活进程、终止进程和撤销进程等。这些控制和管理功能由操作系统中的原语实现
- 进程创建:
- 步1在进程列表中增加一项,从PCB池中申请一个空闲PCB,为新进程分配惟一的进程标识符;
- 步2为新进程的进程映像分配地址空间,以便容纳进程实体。进程管理程序确定加载到进程地址空间中的程序;
- 步3为新进程分配除主存空间外的其他各种所需资源;
- 步4初始化PCB,如进程标识符、处理器初始状态、进程优先级等;
- 步5把新进程状态置为就绪态,并移入就绪进程队列;
- 步6通知操作系统的某些模块,如记账程序、性能监控程序
- 进程撤销:
- 步1根据撤销进程标识号,从相应队列中找到并移出它;
- 步2将该进程拥有的资源归还给父进程或操作系统;
- 步3若该进程拥有子进程,先撤销它的所有子进程,以防它们脱离控制;
- 步4回收PCB,并归还到PCB池
- 进程阻塞:
- •步1停止进程执行,保存现场信息到PCB;
- 步2修改进程PCB有关内容,如进程状态由运行态改为等待态等,并把修改状态后的进程移入相应事件的等待队列中;
- 步3转入进程调度程序去调度其他进程运行
- 进程唤醒:
- 步1从相应的等待队列中移出进程;
- 步2修改进程PCB的有关信息,如进程状态改为就绪态,并移入就绪队列;
- 步3若被唤醒进程比当前运行进程优先级高,重新设置调度标志
- 进程创建:
- 原语是在管态下执行、完成系统特定功能的过程
- 原语和机器指令类似,其特点是执行过程中不允许被中断,是一个不可分割的基本单位,原语的执行是顺序的而不可能是并发的
4 线程及其实现
操作系统中再引入线程,则是为了减少程序并发执行时所付出的时空开销,使得并发粒度更细、并发性更好
优点:
-
快速线程切换
-
通信易于实现
-
减少管理开销
-
并发程度提高
进程是操作系统中除处理器外进行的资源分配和保护的基本单位
线程是操作系统进程中能够独立执行的实体(控制流),是处理器调度和分派的基本单位。线程是进程的组成部分,每个进程内允许包含多个并发执行的实体(控制流),这就是多线程
组成:
- 线程唯一标识符及线程状态信息(运行态、就绪态、阻塞态和终止态)
- 线程是一条执行路径,有独立的程序计数器;未运行时保护线程上下文
- 线程有执行栈和存放局部变量的私用存储空间
- 可访问所属进程的内存和资源,并与该进程中的其他线程共享这些资源
线程状态:运行、就绪、等待和终止,状态转换也类似于进程
线程分成(实现角度):
-
用户级线程ULT(如Java ,Informix)
-
混合式线程
- 内核级线程KLT(如OS/2)。
5 处理器调度
三级调度模型:
两级调度模型
选择调度算法原则:
- 资源利用率:
- CPU利用率=CPU有效工作时间/CPU总的运行时间
- 响应时间:
- 交互式进程从提交一个请求(命令)到接收到响应之间的时间间隔称响应时间
- 周转时间:
- 批处理用户从作业提交给系统开始,到作业完成为止的时间间隔称作业周转时间
- 吞吐率:单位时间内处理的作业数
- 公平性:确保每个用户每个进程获得合理的CPU份额或其他资源份额,不会出现饿死情况
作业带权周转时间和平均作业带权周转时间
- 如果作业i的周转时间为ti,所需运行时间为tk,则称wi=ti /tk为该作业的带权周转时间(大于1)
-
平均作业带权周转时间W=sum(wi)/ n
作业概念更多地用在批处理操作系统,而进程则可以用在各种多道程序设计系统
作业生命周期:
- 输入状态
- 后备状态
- 执行状态
- 完成状态
作业管理与调度:
- 作业管理任务:作业组织、作业调度、运行控制
- 批作业的组织和管理
- 作业组织
- 批作业输入
- 批作业的建立
- 作业控制语言
- 作业说明书
- 作业控制块JCB
- JCB通常是在批作业进入系统时,由Spooling系统建立的,它是作业存在于系统的标志,作业撤离时,JCB也被撤销
- 主要内容
- 作业情况
- 资源需求
- 资源使用情况
- 作业调度:
- 选择作业
- 分配资源
- 创建进程
- 作业控制
- 后续处理
- 作业组织
- 交互作业的组织和管理
- 键盘命令有:作业控制类;资源申请类;文件操作类;目录操作类;设备控制类等
高级调度:
- 作业调度
- 控制多道程序的道数,
中级调度:
- 平衡调度、中程调度,根据内存资源情况决定所能容纳的进程数目,并完成外村和内存中进程的对换工作
低级调度:
- 调度程序两项任务:调度和分派
- 调度--实现调度策略,确定就绪进程/线程竞争使用处理器的次序的裁决原则,即进程/线程何时应放弃CPU和选择哪个来执行;
- 分派--实现调度机制,确定如何时分复用CPU,处理上下文交换细节,完成进程/线程和CPU的绑定和放弃的实际工作
- 基本类型:
- 剥夺式(抢占式)
- 高优先级进程/线程可剥夺低优先级进程/线程
- 当运行进程/线程时间片用完后被剥夺
- 非剥夺式
- 剥夺式(抢占式)
作业调度和低级调度算法
- 先来先服务算法FCFS
- 按照作业进入系统后备队列的先后次序来挑选作业,先进入系统的作业优先被挑选进入内存
- 平均作业周转时间与作业到来顺序有关
- 最短作业优先算法SJF
- 以进入系统的作业所要求的CPU时间为标准,总选取估计计算时间最短的作业投入运行
- 算法易于实现,效率不高,主要弱点是忽视了作业等待时间。会出现饥饿现象
- 最短剩余时间优先算法SRTF
- 新进入进程所需时间比当前运行进程需要时间断,则抢占CPU
- 最高响应比优先算法HRRF
- FCFS与SJF是片面的调度算法。FCFS只考虑作业等候时间而忽视了作业的计算时问,SJF只考虑用户估计的作业计算时间而忽视了作业等待时间
- HRRF是介乎这两者之间的折衷算法,既考虑作业等待时间,又考虑作业的运行时间,既照顾短作业又不使长作业的等待时间过长,改进了调度性能
- 响应比= 1+已等待时间/估计运行时间
- 短作业容易得到较高响应比
- 长作业等待时间足够长也能获得较高响应比
- 不会发生饥饿现象
- 优先级调度算法
-
使用外围设备频繁者优先数大,这样有利于提高效率;
重要算题程序的进程优先数大,这样有利于用户;
进入计算机时间长的进程优先数大,这样有利于缩短作业完成的时间;
交互式用户的进程优先数大,这样有利于终端用户的响应时间等等 -
动态优先数法
- 根据进程占有CPU时间多少来决定,当进程占有CPU时间愈长,那么,在它被阻塞之后再次获得调度的优先级就越低,反之,进程获得调度的可能性越大
- 根据进程等待CPU时间多少来决定,当进程在就绪队列中等待时间愈长,那么,在它被阻塞之后再次获得调度的优先级就越高,反之,进程获得调度的可能性越小
-
- 时间片轮转调度算法
-
时间片调度:调度程序每次把CPU分配给就绪队列首进程使用一个时间片,例如100ms,就绪队列中的每个进程轮流地运行一个时间片。当这个时间片结束时,强迫一个进程让出处理器,让它排列到就绪队列的尾部,等候下一轮调度
-
轮转策略可防止那些很少使用外围设备的进程过长的占用处理器而使得要使用外围设备的那些进程没有机会去启动外围设备
-
- 多级反馈队列调度
- 又称反馈循环队列或多队列策略
- 主要思想是将就绪进程分为两级或多级,系统相应建立两个或多个就绪进程队列,较高优先级的队列一般分配给较短的时间片
- 处理器调度先从高级就绪进程队列中选取可占有处理器的进程,只有在选不到时,才从较低级的就绪进程队列中选取