处理器管理

516 阅读10分钟

处理器的两种状态

用程序状态字寄存器PSW中的某标志位来识别当前处理器处于什么状态

  • 核心态
  • 用户态

核心态

处理器处于核心态时,程序可以执行特权指令和非特权指令,使用所有资源

用户态

处理器处于用户态时,只能执行非特权指令,比如“清空内存”这种特权指令不能在用户态执行

PSW

某标志位可以识别处理器处于什么状态,主要作用是实现程序状态的保护和恢复

用户栈和核心栈

用户栈

用户进程空间中开辟出的内存区域

核心栈

每个进程被创建时捆绑一个,是内存中属于os空间的区域

中断

  • 外中断(中断)
  • 内中断(异常) 本质:发生中断就意味着需要os介入,开展管理工作

中断是实现“用户态”->“核心态”的唯一途径

而“核心态”->“用户态”是通过执行一个特权指令,将PSW的标志位置为用户态

cpu与外部设备的并行工作的硬件基础是中断和通道

内中断

信号来源:cpu内部与当前执行指令

分为:

  • 自愿中断
  • 强迫中断

自愿中断

指令中断,系统调用时的访管指令

软件中断

硬件中断,如缺页

软件中断,整数除0

外中断

信号来源:cpu外部与当前执行的指令无关

  • 外设请求,如IO操作完成发出中断信号

  • 人工干预,如用户强行终止一个进程

进程

引入多道程序技术之后,内存中同时放入多道程序,各个程序的代码、运算数据存放的位置不同。os要怎么才能找到各程序的存放位置?

系统为每个运行的程序配置了一个数据结构,成为进程控制块(PCB),用来描述进程的各种信息

PCB是进程存在的唯一标志

image.png

进程实体

也叫进程映像

  • PCB
  • 程序段
  • 数据段
  • 核心栈

一般情况下,把进程实体就简称为进程

PCB组成

  • 进程描述信息,PID
  • 进程控制和管理信息,进程当前状态、进程优先级
  • 资源分配清单,程序段指针、数据段指针、键盘、鼠标
  • 处理机相关信息,各种寄存器值

进程定义

  • 进程实体的运行过程(动态性)
  • 系统进行资源分配和调度的一个独立单位

进程状态及转换(进程控制)

三种基本基本状态

  • 执行态
  • 就绪态
  • 等待态 执行态:占有cpu,并在CPU上运行

就绪态:已具备运行条件,但由于没有空闲cpu,而,暂时不能运行

阻塞态:又叫等待态,因等待某一事件而暂时不能运行,如等待os分配打印机、等待读磁盘操作的结果。

还有两种状态:

新建态:进程正在被创建,os为进程分配资源、初始化PCB

“终止态”:进程正在从系统中撤销,os会回收进程拥有资源、撤销PCB

再新增两种状态: “挂起就绪态” “挂起阻塞态”

什么是挂起?为什么要有“挂起”状态?

为了让某些进程暂时不参与低级调度,释放它占有的资源,以减小1系统负荷为目的而引入挂起态

状态转换

五状态转移图 image.png 七状态转移图

image.png

运行态->阻塞态是进程自身做出的主动行为

阻塞态->就绪态不是进程自身控制的,是一种被动行为

所以,不能由阻塞态->运行态,也不能由就绪态->阻塞态,因为进入阻塞态是进程主动请求的,必然需要进程在运行时才能发出这种请求

原语

用原语实现进程控制

原语的特点是执行期间不允许中断,只能一气呵成。这种不可被中断的操作叫原子操作

原语采用“关中断指令”和“开中断指令”

关/开中断指令的权限非常大,必然只允许在核心态下执行特权指令

线程

线程是处理机调度的基本单位

引入线程带来的变化

引入线程前引入线程后
进程是资源分配、调度的基本单位进程是资源分配的基本单位,线程是调度的基本单位
只能进程并发进程内的线程之间也能并发,提升了并发度
进程间并发需要切换运行环境,开销大如果同一进程内的线程切换,则不需要切换进程环境,开销少

线程的实现方式

用户级线程

用户级线程由应用程序通过线程库实现。所有的线程管理工作都由应用程序负责,用户级线程中,线程切换可以在用户态下即可完成,无需os干预

在用户看来,是有多个线程,但是在os内核看来,并没有意识到线程的存在

image.png

内核级线程

内核级线程的管理工作由os内核完成,线程调度、切换等工作等都由内核负责,因此内核级线程的切换需要在核心态下才能完成

image.png

处理机的三个层次调度

  • 高级调度(作业调度)
  • 中级调度(内存调度)
  • 低级调度(进程调度)

高级调度

按一定的规则从外存上处于后备队列的作业中挑选一个(或多个)作业,给他们分配内存等必要资源,并建立相应进程(建立PCB),使他们获得竞争处理机的权利

对进程状态的影响:无->创建态->就绪态

每个作业只会被调入一次,调出一次

中级调度

引入虚拟存储技术之后,可将暂时不能运行的进程调至外存等待,等它重新具备了运行条件且内存有空闲时,再重新调入内存。

这么做是为了提高内存利用率系统吞吐量

暂时调到外存等待的进程状态为挂起状态,注意:PCB并不会一起调到外存,而是会常驻内存。PCB会记录进程数据在外存中的存放位置,进程状态等信息,os通过内存中的PCB来保持对各个进程的监控、管理。被挂起的进程PCB会被放到挂起队列

中级调度,就是要决定将哪个处于挂起状态的进程重新调入内存,一个进程很可能会被多次调入调出内存,因此中级调度发生的频率要高于高级调度

对进程状态的影响:挂起态->就绪态

低级调度

其主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它

进程调度是os中最基本的一种调度,在一般的os中都必须配置进程调度

频率很高,一般几时毫秒一次

对进程状态的影响:就绪态->执行态

调度算法的评价标准

  • cpu利用率
  • 系统吞吐量
  • 周转时间
  • 响应时间

系统吞吐率

单位时间内完成的作业数量

周转时间

从作业提交给系统开始,到作业完成为止这段时间

它包括4个部分:

  • 作业在外存后备队列上等待作业调度的时间
  • 进程在就绪队列上等待进程的时间
  • 进程在cpu上执行的时间
  • 进程等待IO操作完成的时间 后三项在一个作业处理过程中,可能发生多次

平均周转时间

各作业周转时间之和/作业数

带权周转时间

作业周转时间/作业实际运行时间

响应时间

指从用户提交请求首次产生响应所用的时间

调度算法

  • 先来先服务(FCFS)
  • 短作业(SJF)
  • 高响应比优先(HRRF)

先来先服务(FCFS)

算法思想

主要从“公平”的角度考虑

算法规则

按作业/进程到达的先后顺序服务

用于作业/进程调度?

用于作业调度时,考虑的是哪个作业先到达后备队列

用于进程调度时,考虑的是哪个进程先到达就绪队列

抢占式?

非抢占式

优缺点

优点:公平、算法实现简单

缺点:排在长作业(进程)后面的短作业需要等待很长时间,对长作业有利,对短作业不利

导致饥饿?

饥饿:某进程/作业长期得不到服务

不会饥饿

image.png

短作业优先(SJF)

算法思想

追求最少的平均等待时间,最少的平均周转时间

算法规则

最短的作业/进程优先得到服务(所谓最短,指要求服务时间最短,即执行时间)

用于作业/进程调度?

可用于作业调度,也可用于进程调度(SPF)

抢占式?

非抢占式,但也有抢占式的版本--最短剩余时间优先(SRTN)

优缺点

优点:“最短”平均等待时间、最少平均周转时间

缺点:对短作业有利,对长作业利,可能会导致饥饿

导致饥饿?

可能会 image.png

高响应比优先(HRRF)

算法思想

综合考虑作业/进程的等待时间和要求服务的时间

算法规则

在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务

响应比=(等待时间+要求服务时间)/要求服务时间

用于作业/进程调度?

可用于作业/进程调度

抢占式?

非抢占式

当前运行的作业/进程主动放弃处理机时,才需要调度,才需要计算响应比

优缺点

导致饥饿?

不会

image.png

时间片轮转(RR)

算法思想

公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应

算法规则

按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如100ms)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队

用于作业/进程调度?

可用于进程调度(只有作业放入内存建立了相应的进程后,才能被分配处理机时间片)

抢占式?

若进程未能在时间片内运行完,将被强行剥夺处理机使用权,因此时间片轮转调度算法属于抢占式的算法,由时钟转置发出时钟中断来通知cpu时间片已到

优缺点

优点:公平、响应快,适用于分时操作系统

缺点:由于高频率的进程切换,因此有一定开销;不区分任务的紧急程度

导致饥饿?

不会

image.png

优先级调度

算法思想

随着计算机的发展,特别是实时操作系统的出现,越来越多的应用场景需要根据任务紧急程度来决定处理顺序

算法规则

调度时选择优先级高的作业/进程

用于作业/进程调度?

都可

抢占式?

都有

优缺点

优点:优先级区分紧急程度、重要程度,适用于实时os

缺点:若源源不断的有高优先级进程到来,则可能导致饥饿

导致饥饿?

image.png