2. 处理器管理
2.1 处理器状态
特权指令是指仅在内核态下才能使用的指令
中断和异常是用户态到内核态转换的仅有途径
程序状态字(PSW):操作系统将程序运行时的一组动态信息汇集在一起,称为程序状态字,并放在处理器的一组特殊寄存器里,以方便系统管理和控制。
应用程序在执行有关资源管理的机器指令时,易于导致系统混乱,造成系统或用户信息被破坏,在多道程序设计环境中,从资源管理和控制程序的角度出发,必须把机器指令分为两类:特权指令和非特权指令
2.2 中断
中断(interrupt)是指程序执行过程中,遇到急需处理的事件时,暂时中止CPU上现行程序的运行,转去执行相应的事件处理程序,待处理完成后再返回原程序被中断处或调度其他程序执行的过程。
分类
从中断事件的性质可分类:
强迫性中断事件:不是正在运行的程序所期待的,而是由于某种事故或外部请求信息所引起的,分为:
- 机器故障中断事件(电源故障)。
- 程序性中断事件(除数为0,地址越界)。
- 外部中断事件(时钟)。
- 输入输出中断事件(外设)。
自愿性中断事件:是正在运行的程序所期待的事件,主要指执行系统调用。
除系统调用外的中断都是非自愿中断:输入键盘时产生中断时运行的程序不是等待输入的程序
按中断事件的来源进行分类:
硬中断:硬件产生的
- 外中断(中断、异步中断):来自处理器之外的中断,包括时钟中断、键盘中断和设备中断等;外中断又分可屏蔽中断和不可屏蔽中断。通常和当前执行进程无关。
- 内中断(异常、同步中断):来自处理器内部,通常由于程序执行中,发现与当前指令关联的、不正常的、或是错误的事件:
访管中断(系统调用)
硬件故障(电源失效、存储器校验出错)
程序性异常(算术溢出、页面故障、地址越界)
和当前进程有关,不能被屏蔽,一般需要立即处理
软中断:利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果
- 信号:一个进程向另一个进程发送特定的事件,例如SIGINT (ctrl c),sigterm (kill),timer信号
- 软件中断:写一个函数(下半部分),放到合适的地方,然后产生“中断”(标记一下,告诉操作系统要做什么事情),到合适的时候操作系统自动做。
每条指令结束后检查中断
中断是由与现行指令无关的中断信号触发的(异步的),且中断的发生与CPU处在用户模式或内核模式无关;一般来说,中断处理程序提供的服务不是为当前进程所需的;在系统中断上下文中执行。
异常是由处理器正在执行现行指令而引起的;通常发生在用户态(除了缺页异常);异常处理程序提供的服务是为当前进程所用的;在当前进程上下文中执行。
响应及服务
- 发现中断源
- 保护现场
- 转向中断处理/异常事件的处理程序
- 恢复现场:结束进程(普通程序)、下一条指令(访管指令)、重复中断发生指令(页面故障)
2.3 进程
定义:进程是可并发执行的程序在某个数据集合上的一次计算活动,也是操作系统进行资源分配和保护的基本单位。
区别:
- 程序是静态的,进程是动态的。
- 进程有生命周期,有诞生有消亡,短暂的;而程序是相对长久的。
- 进程是程序运行的实例,一个程序可对应多个进程,多个进程互不相干,但共享一份程序代码。
属性:
- 共享性: 共享程序,共享变量,通信
- 动态性: 有开始有结束,状态在变化
- 独立性: 分配资源和保护的基本单位,独立运行,异步
- 制约性: 进程间并发,互相制约,协作
- 并发性: 宏观并行,微观串行
进程的状态和转换:
- 运行态(running)
- 就绪态(ready)
- 等待态(wait)(也称阻塞态(blocked) 、睡眠态(sleep))
- 终止态
- 新建态
- 挂起就绪态:具备运行条件,但在外存中
- 挂起等待态:需要等待事件,且在外存中
进程控制块PCB,是操作系统用于记录和刻划进程状态及有关信息的数据结构。也是操作系统掌握进程的唯一资料结构,它包括了进程执行时的情况,以及进程让出处理器后所处的状态、断点等信息。
Linux内核线程是一种特殊的线程,它运行于内核态且只访问内核空间中的信息,既没有独立地址空间,也从不切换到用户态。
2.4 线程
操作系统中引入进程的目的是为了使多个程序并发执行,以改善资源使用率和提高系统效率,
操作系统中再引入线程,则是为了减少程序并发执行时所付出的时空开销,使得并发粒度更细、并发性更好。
进程是操作系统中除处理器外进行的资源分配和保护的基本单位。它有独立的虚拟地址空间,容纳进程映像(如与进程关联的程序与数据),并以进程为单位对各种资源实施保护。
线程是操作系统进程中能够独立执行的实体(控制流),是处理器调度和分派的基本单位。线程是进程的组成部分,每个进程内允许包含多个并发执行的实体(控制流),这就是多线程。
线程的实现
内核级线程:线程的管理工作由内核完成
主要优点:
在多处理器上,内核能够同时调度同一进程中的多个线程并行执行;
若进程中的一个线程被阻塞,内核能够调度同一进程的其它线程占有处理器运行,也可以运行其它进程中的线程;
切换速度快,内核自身也可以用多线程技术实现,从而提高系统执行效率。
主要缺点:
线程在用户态运行,调度和管理在内核实现,因此需要频繁进行模式切换,系统开销较大。
用户级线程:线程的管理由应用程序完成,在用户空间中实现,内核无须感知线程的存在
主要优点:
线程切换无须使用内核特权方式,可节省模式切换的开销和内核的宝贵资源;
允许进程按照应用的特定需要选择调度算法;
能够运行在任何操作系统上,内核无须做任何改变。
主要缺点:
由于大多数系统调用是阻塞型的,因此,一个用户级线程的阻塞将引起整个进程的阻塞;
l用户级线程不能利用多处理的优点。
混合式线程:即支持用户级线程,又支持内核级线程
线程的实现分为两个层次:
用户层:用户层线程在用户线程库中实现;
核心层:核心层线程在操作系统内核中实现。
多进程、单线程:多数unix、Linux
多进程、多线程:windows
2.5 处理器调度
作业从进入系统成为后备作业开始,直到运行结束退出系统为止,需经历不同级别的调度。
按调度层次来分:
•高级调度
•中级调度
•低级调度
高级调度又称作业调度、长程调度,在多道批处理操作系统中,从输入系统的一批作业中按照预定的调度策略挑选若干作业进入主存。 为了保证响应速度,有必要限制多道程序的道数。每当有作业执行完毕并撤离时,作业调度会选择一个或多个作业补充进入主存。
中级调度又称平衡调度、中程调度,根据主存资源决定主存中所能容纳的进程数目,并根据进程的当前状态来决定辅助存储器和主存中的进程的对换。当主存资源紧缺时,会把暂时不能运行的进程换出主存,此时这个进程处于“挂起”状态;当进程具备运行条件且主存资源有空闲时,再将进程重新调回主存工作。作用为均衡系统负载的作用。
低级调度又称进程调度/线程调度、短程调度,其主要功能是:根据某种原则决定就绪队列中的哪个进程/内核级线程获得处理器,并将处理器出让给它使用。低级调度是操作系统最为核心的部分,执行十分频繁,其调度策略的优劣将直接影响整个系统的性能。
从作业提交给系统开始,到作业完成为止的时间间隔称作业周转时间,应使作业周转时间或平均作业周转时间尽可能短。
作业是任务实体,进程是完成任务的执行实体;没有作业任务,进程无事可干,没有进程,作业任务没法完成。
低级调度
调度程序两项任务:调度和分派。
调度实现调度策略,确定就绪进程/线程竞争使用处理器的次序的裁决原则;分派实现调度机制,处理上下文交换细节,完成进程/线程和CPU的绑定和放弃的实际工作。时机:结束、等待、出现高优先级,但不是立即调度,而是置标志,延迟调度。
基本类型:剥夺式和非剥夺式
周转时间:等待时间与运行时间之和;如果作业i的周转时间为ti,所需运行时间为tk,则称wi=ti /tk为该作业的带权周转时间。
调度算法
1. 先来先服务算法(FCFS)非抢占
2. 最短作业优先算法(SJF)非抢占,忽略了等待时间,会出现饥饿现象
3. 最短剩余时间优先算法(SRTF)抢占式的SJF
4. 最高响应比优先算法(HRRF)非抢占,响应比 =1+已等待时间/估计运行时间;高的优先
5. 优先级调度算法 可抢占可非抢占,可分动态和静态
6. 轮转调度算法 抢占,时间片大小选择,平衡开销和响应时间
7.多级反馈队列调度算法。又称反馈循环队列或多队列策略。主要思想是将就绪进程分为两级或多级,系统相应建立两个或多个就绪进程队列,较高优先级的队列一般分配给较短的时间片(和时间片轮转结合)。处理器调度先从高级就绪进程队列中选取可占有处理器的进程,只有在选不到时,才从较低级的就绪进程队列中选取。优先级动态调整。
8. 彩票调度算法 为进程发放针对各种资源(如CPU时间)的彩票。调度程序随机选择一张彩票,持有该彩票的进程获得系统资源。进程都是平等的,有相同的运行机会。如果某些进程需要更多的机会,可被给予更多彩票,增加其中奖机会。例如,客户给服务器彩票。服务质量保证上的应用(成比例)。公平上的应用(fork子进程)。