目的与要求:理解进程切换过程;理解进程调度原因及调度切换时机;掌握进程调度方式及各种调度算法;了解作业和进程的关系;了解线程的引入原因。
重点与难点:进程调度切换的实现与多级反馈进程调度算法。
3.3.进程控制与调度
3.3.1进程执行
系统模型:内核程序嵌入进程运行。进程当发生中断或者异常的时候,进入系统核心运行的时候,利用的是进程的核心栈。
执行模式(态):进程可在用户态和核心态下运行。如系统调用下为核心态。
进程模式切换:一个进程既运行用户态程序,在系统调用和中断转换到核心态时运行操作系统核心程序。(不换进程)
进程切换:指进程进入操作系统核心(内核)后因为自身等时间或有更加迫切需要运行的进程就绪而让出处理机,处理机转去运行其他进程。 (换了个进程)
进程切换的过程(本质上就是保存原进程现场,选取新进程,然后恢复新进程的过程):
1.保存处理机的上下文,包括程序计数器PC、处理机状态字PS、其他寄存器。
2.修改当前运行进程的进程控制块内容,包括将进程状态从运行态改成其他状态。(运行转成阻塞或就绪)
3.选择另一个进程。(根据进程调度算法)
4.修改被调度进程的进程控制块,包括把其状态改变到运行态。
5.恢复被选进程(上次切换出处理机时)的处理机现场,按原保护的程序计数器值重置程序计数器PC,运行新选进程。
3.3.2进程调度
特指选择进程占用处理机
一、调度的含义:
什么是调度:操作系统管理类系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源。这就是调度。
调度目的:控制资源使用者的数量,选取资源使用者占用资源。
几种不同调度的例子:
高级调度:选取输入井中的作业(仅限于批作业调度),生成根进程,开始执行作业步。目的是控制使用系统资源的进程数。
中级调度:选取进程占用内存或有资格占用内存,又称进程滚入滚出。如进程挂起,现代操作系统采用虚存技术,中级调度就弱化了。
低级调度:选取进程占用处理机,又称进程调度。
IO请求调度:设备驱动程序选取IO请求执行。
二、进程调度的方式:
注意:进程调度一定是在核心态运行。(进程调度一定是操作系统的核心功能)。
1、非剥夺:只有当处理机上的进程主动放弃处理机时才重新调度。比如处理机上运行的进程阻塞或者结束了,处理机才可以调用其他进程。
2、剥夺调度:当进程运行时可以被操作系统以某种原则剥夺其处理机。
时间片到就是时钟中断。
三、引起进程调度的因素:
1、进程主动放弃处理机时:
正在执行的进程执行完毕。操作系统在处理“进程结束”系统调用后应请求重新调度。
正在执行的进程发出IO请求。当操作系统内核驱动启动外设IO后,在IO请求没有完成前要将进程变成阻塞状态,应该请求重新调度。
正在执行的进程要等待其他进程或系统发出的事情时。如等待另一个进程通讯数据,这时操作系统应将现运行进程挂到等待队列,并且请求重新调度。
正在执行的进程中那是得不到所要的系统资源。如要求独占资源,但其被其他进程占用,这时候等待的进程应阻塞到等待队列上,并且请求重新调度。
2、为支持可剥夺的进程调度方式,有新进程就绪时(这时申请进行进程调度,有进程才可能剥夺老进程):
当中断处理程序处理完中断,如IO中断引起某个阻塞进程变成就绪状态时,应该申请重新调度。
当进程释放独占资源,引起其他等待该资源进程从阻塞状态进入就绪状态时,应该申请重新调度。请调标志
当某进程发“发送消息”系统调用,导致等待该消息的进程就绪时。
其他任何原因引起有进程从其他状态变成就绪状态,如进程被中调选中时。
3、为支持可剥夺调度,即使没有新就绪进程,为了让所有就绪进程轮流占用处理机,可在下属情况下申请进程调度。
当时钟中断发生,时钟中断处理程序调用有关时间片的处理程序,发现正运行进程时间片到,应请求重新调度。以便让其他进程占用处理机。
在按照进程优先级进行调度的操作系统中,任何原因引起进程的优先级发生变化时,应请求重新调度,如进程通过系统调用自愿改变优先级时或者系统处理时钟中断时,根据各进程等待处理机的时间长短而调整进程的优先级。如等待时间过长的进程提高其优先级,然后申请调度。
总的来说,第一种:主动放弃;第二种:有新就绪的进程;第三种:没有新就绪进程,但原进程时间片到或优先级发生变化。
四、调度与切换时机:
当发生引起调度条件,且当前进程无法继续运行下去时(如发生各种进程放弃处理机的条件,阻塞、结束)可以马上进行调度与切换程序。
当中断结束或其他调用处理结束返回被中断进程的用户态程序执行前,若申请调度标志置上,即可马上进行进程调度与切换。如果操作系统支持这种情况下运行调度程序,即实现了剥夺方式的调度。
实时系统还有其他调度与切换实际。
3.3.3进程调度算法:
调度算法要求:高资源利用率(充分的利用系统的资源)、高吞吐量(单位时间内运行完的进程越多越好)、用户满意等原则。这些原则是相互制约的。
FCFS: First Come Fist Server,谁先到就绪队列,将处理机分配给谁。缺点:比如某个进程先到,但是运行所需要时间很长,那后面的短进程就需要等待很久的时间。
短进程优先:取一个下次所需运行时间最短的进程。(该算法能使平均等待时间最短,保证单位时间内完成进程的个数。)缺点是:如果等待队列里面有一个长进程先到,而就绪队列后面连续进来多个短进程,那么这个长进程就要等待很久。
最高响应比优先法:响应比R定义如下:R = (W + T) / T = 1 + W/T (W为等待时间,T为下次运行所需要时间)。为了解决短进程优先的缺点。使得等待时间过长的进程更有可能运行,解决短进程优先的缺点。
优先级调度:选优先级最高的进程占用处理机,(优先级也可动态改变)。
轮转调度法:以先来后到的次序+时间片轮转。给进程分配一个时间片,如果这个进程在时间片内未完成,那么就将该进程从处理机上剥夺下来,重新排到就绪队列中。
多级反馈队列调度法:设置多条就绪队列,进程被调度执行后,在被剥夺或放弃处理机后在就绪时,可以改变其就绪队列。根据优先级将就绪队列分成多个,在进程被剥夺或者放弃处理机后可以改变以前的就绪队列。
举例:设计另一个多级反馈队列调度法:
以优先级设置多队列。
各队列的调度算法采用FCFS+时间片
进程优先级升降原则(反馈原则):等待CPU过久升(提高优先级),输入输出完成插入就绪队列时升,运行完一个时间片降……
进程最初进入就绪队列以用户处置优先级为参数。
3.4 作业与进程的关系
作业:是用户对计算机的一次独立的使用过程。(批处理时期)
进程:是分配计算机资源的单位,是用户任务运行的实体,作业包含多个进程(至少一个)。(现代操作系统)。
批处理系统作业与进程关系:作业调度程序每选择一道作业运行时,首先为该作业创建一个根进程,该进程执行作业控制语言解释器程序,在解释执行作业步时可根据需要创建多个子进程。
作业和进程状态转换图:
分时系统作业(交互式的多道程序设计系统,现在的大多数操作系统都支持分时系统)与进程的关系:把用户的一次上机过程看成是一个交互作业(内部表示及外部特征都有别于批作业,批作业要提高作业控制说明书,源程序等),系统为每个终端设备生成一个进程,该进程运行终端命令解释器(比如终端命令解释器要接受从键盘敲入的命令)。进程在解释执行命令时还可以创建多个子进程(敲入的第一个命令,第二个命令等等。。)。
支持分时与批处理的系统作业提交方法(现在的操作系统都是这类系统):用户可以通过交互式命令提交子作业(如:at -f/root-bin/ss now表示提交一个作业控制说明书文件名为ss的作业到作业输入队列。或直接拍入“shell ss”表示马上生成一个进程执行命令解释器,解释执行ss中的命令。)
命令解释程序执行流程:
3.5 线程引入:
轻权进程(Light-weight Process)的引入:同一作业的不同进程之间会有许多的协作,需要进行数据交换,但进程有自己独立的存储空间(数据区,栈区,程序区等),互相不干扰。如果要进行进程间数据交换,则需要通过操作系统相关系统调用进行交换,为了方便进程间交换数据,一种共享存储空间的进程概念应运而生,我们叫它为轻权进程(Light-Weight Process),避免了操作系统进行系统调运来进行数据交换。linux里面用clone这个系统调用来创建轻权进程。
线程的引入:随着共享内存多CPU计算机的发展和普及,迫切需要加速进程的运行速度(让单个进程在多个CPU上同时运行),事实上进程中运行的程序也是有可并行执行的语句( 某些语句是没有依赖关系的)。因为进程内程序执行的顺序性,不可能实现进程内可并行成分的并行执行。为此,线程的概念呼之欲出。在一个进程中可以包含多个可以并发(并行)执行的线程。系统按进程分配所有除CPU以外的系统资源(如内存、外设、文件等),而程序则依赖与线程运行,系统按线程分配CPU资源。引入线程后,进程的内涵发生变化,进程只作为除了CPU以外系统资源的分配单位,不再以进程作为CPU资源的分配单位。
并发和并行的区别:并发一般指程序轮流在CPU上运行,而并行指进程在两个不同的CPU上同时运行。
进程与线程的关系图:
这个图里面,进程3与以前的进程定义相同,因为只有一个和线程。而进程3要运行必须要等进程1和进程2中的线程都结束后才可以进行。
本文详细介绍了进程的执行、调度、切换过程,重点讨论了进程调度的含义、方式和时机,涵盖了各种调度算法,如FCFS、短进程优先、优先级调度等。此外,还探讨了作业与进程的关系以及线程的引入原因,强调线程在多CPU环境下提升进程执行效率的作用。

被折叠的 条评论
为什么被折叠?



