配色: 字号:
《操作系统原理与实践教程》03
2017-09-09 | 阅:  转:  |  分享 
  
第3章处理机管理§3.1进程的概念3.1.1进程的引入1.进程的引入:多道程序在执行时,需要共享系统资源,
从而导致各程序在执行过程中出现相互制约的关系,程序的执行表现出间断性的特征。这些特征都是在程序的执行过程中发生的,是动态的过程,而
传统的程序本身是一组指令的集合,是一个静态的概念,无法描述程序在内存中的执行情况,即我们无法从程序的字面上看出它何时执行,何时停顿
,也无法看出它与其它执行程序的关系,因此,程序这个静态概念已不能如实反映程序并发执行过程的特征。为了深刻描述程序动态执行过程的性质
,人们引入“进程(Process)”概念。§3.1进程的概念2.进程的概念:进程的概念是60年代初首先由麻省理工学院的
MULTICS系统和IBM公司的CTSS/360系统引入的。进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申
请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来
表示。进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引
进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。§3.1进程的概念操作系统引入进程的概念的原因:从理论角度看
,是对正在运行的程序过程的抽象;从实现角度看,是一种数据结构,目的在于清晰地刻划动态系统的内在规律,有效管理和调度进入计算机系统
主存储器运行的程序。进程的特征动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。并发性:任何进程都可以同其
他进程一起并发执行独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;异步性:由于进程间的相互制约,
使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进结构特征:进程由程序、数据和进程控制块三部分组成。§3.1
进程的概念进程与程序的关系程序是指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行
过程,它是一个动态的概念。程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。进程更能真实地
描述并发,而程序不能;进程是由程序和数据两部分组成的。进程具有创建其他进程的功能,而程序没有。同一程序同时运行于若干个数据集合
上,它将属于若干个不同的进程。也就是说同一程序可以对应多个进程。§3.1进程的概念3.1.2进程的状态
一个进程从创建而产生至撤销而消亡的整个生命周期,可用一组状态加以刻划,,按进程在执行过程中的状况至少定义三种不同的进程状态:运
行态(Running)是指当前进程已经分配到CPU,它的程序正在处理机上执行的状态。就绪状态(Ready)是指已具备运行条件,但
因为其他进程正在占用CPU,使它暂时不能运行而处于等待分配CPU的状态。阻塞状态(Blocked)是指进程因等待某种事件发生(例
如等待I/O操作完成,等待其他进程发来的信号)而暂时不能运行的状态,也就是说,处于阻塞状态的进程尚不具备运行条件,即使CPU空闲它
也无法使用。§3.1进程的概念§3.1进程的概念引起进程状态转换的具体原因运行态→等待态:等待使用资源或某事件
发生;等待态→就绪态:资源得到满足或事件发生;运行态→就绪态:运行时间片到;出现有更高优先权进程。就绪态→运行态:CPU
空闲时选择一个就绪进程。§3.1进程的概念进程五态模型及其转换§3.1进程的概念新建态对应进程刚被创建的状态。为一
个新进程创建必要的管理信息,它并没有被提交执行,而是在等待操作系统完成创建进程的必要操作。进程的终止,首先,等待操作系统进行善后
,然后,退出主存。进入终止态的进程不再执行,但依然临时保留在系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,系统将删
除该进程。§3.1进程的概念挂起状态的引入§3.1进程的概念例题:1.如果系统中有N个进程,运行的进程
最多几个,最少几个;就绪进程最多几个最少几个;等待进程最多几个,最少几个?[解答]:在单处理机系统中,处于运行状态的进程最多
为1个,最少为0个;处于就绪进程最多为N-1个,最少为0个;处于阻塞的进程最多为N个,最少为0个。2.有没有这样的状态转换
,为什么? (1)等待—运行;(2)就绪—等待§3.1进程的概念3.1.3进程的描述——进程
控制块进程在内存的活动可以用进程上下文(ProcessContext)来描述。在操作系统中,把进程的物理实体和支持进程运行的
环境合称为进程上下文。进程的运行被认为是在进程的上下文中执行的。在操作系统中,进程的上下文由用户级上下文、系统级上下文和寄存器上下
文组成。进程控制块(PCB)是进程组成中最关键的部分,是系统对进程进行控制和管理的依据,是进程存在的唯一标志。当系统创建一个新进
程就要为它创建一个PCB;当进程终止后,系统收回其PCB,该进程在系统中就不存在了。进程与PCB是一一对应的。§3.1进
程的概念进程控制块的组成:进程名特征信息进程状态信息调度优先权通信信息现场保护区资源需求进程实体信息族系关系
其他信息§3.1进程的概念§3.1进程的概念进程控制块的组织:§3.1进程的概念3.1.4实例研究——
Linux进程在Linux内核中,代表一个进程的内核数据结构是structtask_struct,它就是前面提到的具有实际意义
的进程控制块,Linux把它命名为task_struct结构,原代码见include/linux/sched.h文件。每一个可以
独立调度的进程必须拥有它自己的进程控制块,或者说进程和进程控制块之间是一一对应的。Linux定义了五种进程状态:TASK_RUN
NING、TASK_INTERRUPTIBLE、TASK_UNINTERRUPTIBLE、TASK_MOMBIE和TASK_
STOPPED。§3.1进程的概念TASK_RUNNING状态:该状态表示进程要么在CPU上执行,要么在就绪队列中等待调
度程序调度执行。TASK_INTERRUPTIBLE状态:该状态表示进程处于可中断的等待状态,也就是说处于等待队列中的进程,可被
其他进程产生的一个信号或一个硬件中断所唤醒,使其状态变为TASK_RUNNING状态。TASK_UNINTERRUPTIBLE状
态:该状态表示进程处于不可中断的等待状态。不可中断的等待状态是指等待进程不能被其他进程产生的一个信号所唤醒或改变成另一个状态。当进
程打开一个设备文件时,才会用到这种状态。§3.1进程的概念TASK_MOMBIE状态:该状态表示进程中止执行,并且释放了运
行时的大部分资源,但尚未释放自己的进程控制块时所处的一种状态。TASK_STOPPED状态:该状态表示进程的执行被暂停。当一个进
程被另一个进程监控时,任何信号都可以把这个进程的状态变成暂停状态。另外,当进程收到信号SIGSTOP、SIGTSTP、SIGTTI
N和SIGTOU时,也将转变成暂停状态。§3.1进程的概念§3.2进程控制3.2.1进程控制机构1.操作系
统内核操作系统内核就是操作系统的核心,它是基于硬件的第一层软件扩展,提供操作系统最基本的功能,是操作系统工作的基础。现代
操作系统设计中,通常将一些与硬件相关的模块,如中断处理程序、各种常用设备的驱动程序以及运行频率较高的模块等,将它们常驻内存,以提高
操作系统的运行效率,并对它们加以特殊的保护。通常把这一部分程序称为操作系统的内核。§3.2进程控制2.原语原语(pr
imitive)是机器指令的延伸,是由若干条指令构成,用于完成特定功能的过程。原语是操作系统核心,它不是由进程而是由一组程序模块所
组成,是操作系统的一个组成部分,它必须在管态(一种机器状态)下执行.原语都是原子操作.所谓原子操作是指一个操作中所有动作,要么全
做,要么全不做,即原子操作是一个不可分割的操作。§3.2进程控制3.2.2进程控制1.进程的创建进程在执行
过程中,能通过系统调用创建多个新进程,创建进程称为父进程,而新进程称为该进程的子进程。这些新进程仍然可以再创建其他进程,从而形成了
进程树。§3.2进程控制1.进程的创建创建进程必须调用创建原语来实现。创建原语的主要功能是创建一个指定标识符的进
程,形成进程的PCB。一个典型的进程创建原语可描述如下:Create(s0,m0,pi){p=Get_New_
PCB();//分配新的PCBpid=Get_New_PID();//分配进程的PIDp
—>ID=pid;//设置进程的PIDp->CPU_State=s0;//CP
U的状态p->Memory=m0;//内存p->Priority=pi;
//优先级p->Status.Type=‘Ready’;//进程状态p->Status.Lis
t=RL;//进程队列……………………Insert(RL,p);//
将进程p插入就绪队列Scheduler();//调度程序
}§3.2进程控制2.进程的阻塞正在运行的进程因为提出服务请求(如I/O操作)未被操作系统立即满足,或者所需
数据尚未到达等原因,只能转变为阻塞状态,等待相应事件出现后再把它唤醒。阻塞原语可描述如下:Block(){p=Get_
PCB();//获取当前进程的进程控制块s=p->Status.Type;//保存当前进程的状
态cpu=p->Processor_ID;//处理机状态p->CPU_State=Interrupt(cpu);
//保存处理机现场p->Status.Type=‘Blocked’;//将进程的状态改为阻塞Insert(BL,
p);//将进程插入等待队列Scheduler();}§3.2进程控制3.进程的唤醒当阻塞的进
程所等待的事件出现时(如所需数据已到达,或者等待的I/O操作已经完成),则由另外的与阻塞进程相关的进程(如完成I/O操作的进程)调
用唤醒原语,将等待该事件的进程唤醒。阻塞进程不能唤醒自己。唤醒原语的执行过程如下:Wakeup(pid){P=
Get_PCB(pid);//获取进程控制块Remove(p->Status.List,p);
//从阻塞队列中移出进程pp->Status.Type=‘Ready’;//进程的状态改为就绪
Insert(RL,p);//将进程插入到就绪队列Scheduler()
;//调度程序}§3.2进程控制4.进程的终止进程完成了任务,
或者在执行过程发生异常,这时系统就要终止当前进程的执行。终止进程的执行,可用进程终止原语来实现。一个典型进程终止原语如下:De
stroy(pid){P=Get_PCB(pid);//获取进程控制块Kill_Tree(p
);//删除整个进程树Scheduler();//调度器}§3
.2进程控制Kill_Tree(P){for(eachqinp->Creation.Tree.Chil
d)Kill_Tree(q);//删除当前进程的所有子进程qif(p->Status.Type=‘
Running’){cpu=p->Processor_ID;Interrupt(cpu);}Remove(
p->Status.List,p);Release_all(p->Memory);Release_all(p->Other_
Resources);Close_all(p->Open_Files);Delete_PCB(p);}§3.2进程控制
3.2.3实例研究:Linux和Windows系统创建进程1.Linux系统中进程创建——fork在Linux系统
中,用户或系统可以使用系统调用fork来创建一个新的进程。fork的函数原形为:pid_tfork()
当一个进程调用fork创建一个子进程后,父进程和子进程都在自己独立的地址空间内执行。它们之间不共享任何地址空间,但是父子进程具有
相同的程序代码、数据和堆栈段,因此,为了区别运行中的父子进程,fork系统调用向父子进程返回不同的值。它向子进程返回0,而向父进
程返回子进程的PID。§3.2进程控制§3.2进程控制2.Windows系统中进程的创建——CreateProces
s在windows系统,一个进程可以调用win32API的CreateProcess函数来创建一个新的进程及其主线程,以执
行指定的任务。在利用CreateProcess建立进程时,操作系统要为新进程分配新的地址空间和资源,建立新的主线程。一旦新进程建立
,父进程仍然使用原来的地址空间继续执行,而新进程则在新的地址空间执行一个新的程序。CreateProcess含有10个参数来指定
建立进程的方式,具体参数的含义可参考相关的Win32API手册。§3.3线程3.3.1线程的概念1.单线程程序的缺点
:进程切换开销大进程通信代价大进程之间的并发性粒度较粗,并发度不高不适合并行计算和分布并行计算的要求不适合客户/服务器计
算的要求。§3.3线程2.线程概念:线程(Thread)是进程内的一个执行单位或进程内的一个可调度的实体,是CPU使用的
基本单元。它由线程ID、程序计数器、寄存器集合和堆栈组成。它与属于同一进程的其他线程共享其代码段、数据段和其他操作系统资源(如打开
文件和信号)。在引入线程的现代操作系统中,进程是资源分配的单位,而线程是处理机调度的单位。一个进程可以创建一个或多个线程,因而一
个进程中的多个线程就会争夺CPU,在不同的状态之间进行转换。也就是说,与进程类似,线程也是一个动态的概念,也有一个从创建到消亡的生
命过程,在这一过程中它具多种状态,如运行、就绪、阻塞和终止等几个状态。§3.3线程§3.3线程线程应用举例:例1:
LAN中的一个文件服务器,在一段时间内需要处理几个文件请求。有效的方法是:为每一个请求创建一个线程。例2:一个线程显示菜单,并读
入用户输入;另一个线程执行用户命令。例3:考虑一个应用:由几个独立部分组成,这几个部分不需要顺序执行,则每个部分可以以线程方式实
现。当一个线程因I/O阻塞时,可以切换到同一应用的另一个线程。§3.3线程多线程编程具有以下优点:(1)响应程度高(
2)资源共享(3)经济(4)多处理器体系结构的利用§3.3线程3.进程与线程的比较地址空间:不同进程的地址
空间是独立的,而同一进程内的线程共享同一地址空间。一个进程的线程在另一个进程内是不可见的。调度:在支持线程的操作系统中,进程是资
源分配的基本单位,而线程是处理机调度的基本单位。并发性:同一进程内的线程可以并发执行,不同进程间的线程也可以并发执行,并发能力进
一步增强。系统开销:进程切换时将涉及到有关资源指针的保存以及地址空间的变化等问题,线程切换时,由于同一进程内的线程共享资源和地址
空间,将不涉及资源信息的保存和地址变化问题,从而减少了操作系统的开销时间。§3.3线程3.3.2线程的实现1.用户级
线程用户线程在内核之上支持,并在用户层通过线程库来实现。线程库提供对线程的创建、调度和管理的支持而无须内核支持。由于内核并不知道
用户级的线程,所以所有线程的创建和调度都是在用户空间内进行的,而无须内核的干预。用户级线程通常能快速的创建和管理,但它们也有缺点
。例如,如果内核是单线程的,那么任何一个用户级线程若执行阻塞系统调用,就会引起整个进程阻塞,即使还有其他线程可以在应用程序内运行。
§3.3线程2.内核级线程内核级线程由操作系统直接支持,内核在其空间内执行线程的创建、调度和管理。因为线程管理是由操作
系统完成的,所以内核线程的创建和管理要慢于用户线程的创建和管理。由于内核管理线程,当一个线程执行阻塞系统调用时,内核能调度应用程
序内的另一个线程以便执行。而且,在多处理器环境下,内核能在不同处理器上调度线程。§3.3线程3.3.3多线程模型1.
多对一模型多对一模型将许多用户级线程映射到一个内核线程。线程管理是在用户空间进行的,因而效率比较高,但是如果一个线程执行了阻塞系
统调用,那么整个进程就会阻塞。而且,因为任何时刻只有一个线程访问内核,多个线程不能并行运行在多处理器上。在这种模型中,处理机调度的
单位仍然是进程。Greenthread,Solaris2所提供的线程库就是用了这种模型。另外,在不支持内核级线程的操作系统上
所实现的用户级线程库也使用多对一模型。§3.3线程2.一对一模型一对一模型将每个用户线程映射到一个内核线程。该线程模型在
一个线程执行阻塞时,能允许另一个线程继续执行,所以它提供了比多对一模型更好的并发功能。它也允许多个线程运行在多处理机系统上。这种模
型的缺点是创建一个用户线程就需要创建一个相应的内核线程。创建内核线程的开销会影响应用程序的性能,所以这种模型的绝大多数实现限制了
系统所支持的线程数量。WindowsNT/2000/xp和OS/2实现了一对一模型。§3.3线程3.多对多模型多对多
模型多路复用了许多用户级线程到同样数量或更小数量的内核线程上。内核线程的数量可能与特定应用程序或特定机器有关。多对多模型克服
前面两种模型的缺点,开发人员可以创建任意多的必要的线程,并且相应内核线程能在多处理器系统上并行运行。而且,当一个线程执行阻塞系统调
用时,内核能调度另一个线程来执行。§3.3线程§3.3线程3.3.4线程池线程池的的实现思想如下:在进程建立
时就创建若干线程,把它们放在一个“池中”,它们在那里等待工作。当服务器收到一个请求时,就唤醒池中的一个线程(如果有可用线程的话),
并将要处理的请求传给它。一旦线程完成了它的任务,它会返回到池中再等待其他工作。如果池中没有可用的线程,那么服务器就会一直等到直到有
空闲线程为止。线程池具有以下优点:(1)通常用现有线程处理请求比等待创建新线程要快;(2)线程池限定了任何时候可存在线程的数量。
§3.3线程3.3.5实例研究1.WindowsServer2003线程WindowsServer2003
的线程是内核线程,系统的处理机调度对象为线程。线程的上下文主要包括寄存器、线程环境块、核心栈和用户栈。WindowsServe
r2003把线程的状态分成待调度就绪状态、就绪状态、备用状态、运行状态、等待状态、就绪挂起状态、转换状态、终止状态和初始化状态。
WindowsServer2003内核中与线程调度相关的主要数据结构有处理机数据结构和几个全局数据结构。它们是一个待调度就绪
线程队列、一个分成32个优先级的就绪线程队列、一个备用线程变量和一个运行线程变量。§3.3线程WindowsServer
2003有一组相关的系统调用,应用程序可用它们来进行线程控制。CreateThread完成线程的创建,在调用进程的地址空间上创
建一个线程,以执行指定的函数,它的返回值为所创建线程的句柄。ExitThread用于结束当前线程。SuspendThread可
挂起指定线程。ResumeThread可激活指定线程,它的对应操作是递减指定线程的挂起计数,当挂起计数为0时,线程恢复执行。§
3.3线程2.Pthread线程Pthread是指POSIX标准(IEEE1003.1c)定义的,它定义线程创建API和同
步API。这是线程行为的规范,而不是实现。操作系统设计者可以根据意愿来采取任何实现形式。通常,实现Pthread规范的库局限于基于
UNIX的系统,Windows操作系统通常并不支持Pthread。Pthread线程函数调用:(1)Pthread_cre
ate()函数——创建一个线程(2)Pthread_join()函数——挂起当前线程直到所等待线程结束(3)Pthre
ad_exit()函数——终止当前线程§3.4处理机调度3.4.1处理机调度的层次1.高级调度
高级调度又称为作业调度或宏观调度。其主要功能是根据一定的算法,从输入的一批任务(作业)中选出若干个作业,分配必要的资源,如内
存、外设等,为它建立相应的用户作业进程和为其服务的系统进程(如输入/输出进程),最后把它们的程序和数据调入内存,等待进程调度程序对
其执行调度,并在作业完成后作善后处理工作。§3.4处理机调度2.中级调度中级调度涉及进程在内外存间的交换。为缓解内存紧
张问题,在许多系统中设立了中级调度。中级调度的主要功能是在内存使用紧张时,将一些暂时不能运行的进程从内存对换到外存上等待。以后,
当外存有足够的空闲空间时,再将合适的进程重新换入内存,等待进程调度。引入中级调度的主要目的是为了提高内存的利用率和系统吞吐量。
§3.4处理机调度3.低级调度低级调度又称进程调度或微观调度,其主要功能是根据一定的算法,将CPU分派给就绪进程队列中
的一个进程。执行低级调度功能的程序称为进程调度程序,由它实现CPU在进程间的切换。进程调度是操作系统中最基本的一种调度,在一般
的操作系统中都必须有进程调度,而且它的策略的优劣直接影响整个系统的性能。§3.4处理机调度§3.4处理机调度3.4
.2进程调度1.引起进程调度的典型事件当一个进程从运行状态切换到等待状态(例如,I/O请求)。当一个进程从运行状态切换
到就绪状态(例如,当出现中断时)。当一个进程从等待状态切换到就绪状态(例如,I/O完成)。当一个进程终止时。§3.4处理
机调度2.进程调度的方式非抢占方式(Nonpreemptive):在这种调度方式下,一旦一个进程被选中运行,它就一直运行下去
,直到它完成工作、自愿放弃CPU,或者因等待某一事件而被阻塞时为止,才把CPU出让给其他进程,即得到CPU的进程不管运行多长时间,
都一直运行下去,绝不会因为时钟中断等原因而被迫让出CPU。抢占方式(Preemptive):抢占方式允许调度程序根据某种策略中止
当前运行进程的执行,将其移入就绪队列,并选择另一个进程投入运行。§3.4处理机调度3.4.3调度算法的选择原则(1
)CPU利用率:(2)吞吐量:(3)作业周转时间Ti=tci-tsi平均周转
时间:T=(Σti)/n(4)如果作业i的周转时间为ti,所需运行时间为tk,则称wi=ti/tk为该作业的带权周
转时间。平均作业带权周转时间W=(Σwi)/n§3.5调度算法3.5.1先来先服务按照作业进入系统的先
后次序来挑选作业,先进入系统的作业优先被挑选。算法容易实现,效率不高,只顾及作业等候时间,没考虑作业要求服务时间的长短,不利于
短作业而优待了长作业。FCFS是非强占调度方式。§3.5调度算法3.5.2短作业(进程)优先SJF算法以进入系统的作
业所要求的CPU时间为标准,总选取估计计算时间最短的作业投入运行。算法易于实现,效率不高,主要弱点是忽视了作业等待时间,会出现饥
饿现象。SJF算法可能是抢占的或非抢占的。当新进程的运行时间与当前进程的剩余运行时间相比,可能更短时,可抢占SJF算法可能抢占当
前运行进程,而非抢占SJF算法会允许当前运行进程先执行直到释放CPU为止。可抢占SJF调度有时称为最短剩余时间优先(shortes
t-remaining-time-first)调度。§3.5调度算法3.5.3优先级调度优先级调度算法(priori
ty-schedulingalgorithm)是指每个进程都有一个优先级与其相关联,具有最高优先级的就绪进程会被分派到CPU。具
有相同优先级的进程按FCFS顺序调度。优先级通常为固定区间的数字,如0到7,或者0到4095。不过,对于0是最高还是最低的优先
级,并没有定论。有的系统用低数字表示低优先级,而有的系统使用低数字表示高优先级。§3.5调度算法优先级可以通过内部或外部方
式来定义。内部优先级使用一些可测量数据以计算进程优先级。外部优先级是通过操作系统之外的准则来设置的。优先级调度可以是可抢占的或者
非抢占的。当一个进程到达就绪队列时,其优先级与当前运行进程的优先级相比较。如果新到达进程的优先级高于当前运行进程的优先级,那么抢
占优先权调度算法会抢占CPU,而非抢占优先权调度算法只是将新进程加到就绪队列的头部。§3.5调度算法3.5.4轮转法调度
轮转法调度做法是:调度程序每次把CPU分配给就绪队列首进程使用一个时间片,例如100ms,就绪队列中的每个进程轮流地运行一个时间
片。当这个时间片结束时,强迫一个进程让出处理器,让它排列到就绪队列的尾部,等候下一轮调度。轮转法调度是一种剥夺式调度。时间片的
大小对RR调度算法的性能有很大的影响。如果时间片太长,每个进程都在这段时间内运行完毕,那么RR调度算法就退化为FCFS调度算法。如
果时间片太短,CPU在进程间的切换工作频繁,从而导致系统开销增加。§3.5调度算法3.5.5多级队列调度多级队列调度
算法将就绪进程队列分成多个独立队列。根据进程某些属性,如内存的大小、进程优先级或进程类型,进程会被永久地分配到一个队列,每个队列有
自己的调度算法。队列之间必须有调度,通常采用固定优先级可抢占调度算法来实现。各队列的优先级自上而下降级。§3.5调度算
法§3.5调度算法3.5.6多级反馈队列调度多级反馈队列调度允许进程在队列之间移动。其主要实现思想如下:(1)
系统中设置多个就绪队列,每个队列对应一个优先级,第一个队列的优先级最高,第二个队列次之,以下各队列的优先级逐个降低。(2)各就绪
队列中进程的运行时间片不同,高优先级队列的时间片小,低优先级队列的时间片大。从高到低依次加倍,最后一个队列中的进程按FCFS方式进
行调度。§3.5调度算法(3)新进程进入系统后,先放入第1个队列的末尾。如果某个进程在规定的时间片内没有完成工作,则把它
转入到下一个队列的末尾,直至进入最后一个队列。(4)系统先运行第1个队列中的进程。第1队列为空后,才运行第2个队列中的进程,依次
类推。仅当前面所有队列都为空时,才运行最后一个队列中的进程。(5)如果处理机正在第i队列中为某个进程服务,又有新进程进入优先级前
高的队列(第1~(i-1)中的任何一个队列),则此新进程要抢占正在运行进程的处理机。§3.5调度算法§3.5调度算法
重点概念和内容提示进程的概念、进程与程序的区别进程的结构、状态及转换线程的概念、线程与进程的区别与联系进程调度的层次及特点
常用进程调度算法:FCFS、SJF、优先级高优先、按时间片轮转、响应比高优先3.5.7响应比高优先作业进入系统后的等待
时间与估计运行时间之比称作响应比。响应比=1+已等待时间/估计运行时间(1)如果作业的等待时间相同,则要求服务的时间愈短,其
优先权愈高,因而该算法有利于短作业。(2)当要求服务的时间相同时,作业的优先权决定于其等待时间,等待时间愈长,其优先权愈高,因而
它实现的是先来先服务。(3)对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待足够长时,其优先级便可升到很高,从而也
可获得处理机。/-----------------------------------------------------
-Thefilecreate.cintroducestheuseoffork.----------
--------------------------------------------/#include>main(){intpid;printf(“Before:mypidis%d.\n”,getpid()
);pid=fork();//createnewprocessif(pid==-1)
//出错处理perror(“Cannotforkprocess!”);//er
rorelseif(pid==0)//子进程代码printf(“I
amthechild.Mypidis%d.\n”,getpid());else
//父进程代码printf(“Iamtheparent.Mychildis%d.\n”,pid);
}#include#include#includering.h>…………………………STARTUPINFOstartInfo;PROCESS_INFORMATION
processInfo;……strcpy(lpCommandLine,“c:\\WINNT\\SYSTEM32\\N
OTEPAD.EXEtemp.txt”);ZeroMemory(&startupInfo,sizeof(startInfo))
;startInfo.cb=sizeof(startInfo);if(!CreateProcess(NULL,lpComm
andLine,NULL,NULL,FALSE,HIGH_PRIORTY_CLASSCREATE_NEW_CONS
OLE,NULL,NULL,&startInfo,&processInfo)){fprintf(std
err,”CreateProcessfailed!”);ExitProcess(1);}……CloseHan
dle(&processInfo.hThread);用户空间线程库P内核空间2)用户级线程用户空间P内核空间1
)内核级线程用户空间线程库PP内核空间3)混合式线程ULTKLTProcessP作业CPU就绪,挂起队列
阻塞,挂起队列阻塞队列就绪队列时间片到进程调度作业调度中级调度中级调度事件发生交互式用户等待事件进程完成
例题3-1:假如5个就绪进程其到达系统和所需CPU时间如下表所示(单位:毫秒),如果忽略I/O以及其他开销分别计算采用FCFS
、非抢占式SJF和抢占式SJF调度算法进行CPU调度的平均周转时间和平均带权周转时间。进程到达和运行时间56D28E
44C62B30A运行时间到达时间进程解答如下:(1)采用FCFS的调度顺序为:ABCDE039131820平均周转时间为:T=((3-0)+(9-2)+(13-4)+(18-6)+(20-8))/5=8.6带权平均周转时间为:W=2.56(2)采用非抢占SJF的调度顺序为:ABECD039111520平均周转时间为:T=7.6带权平均周转时间为:W=1.84(3)采用抢占SJF的调度顺序为:平均周转时间为:T=7.2带权平均周转时间为:W=1.59AB1ECB2038101520D4运行态就绪态等待态选中落选出现等待事件等待事件结束新建态终止态挂起等待事件结束出现等待事件解除挂起挂起落选选中运行态就绪态等待事件结束终止态新建态挂起就绪态解除挂起挂起挂起等待态等待态提交提交僵死TASK_ZOMBIE就绪TASK_RUNNING不可中断TASK_UNINTERRUPTIBLE可中断TASK_INTERRUPTIBLE停止TASK_STOPPED占有CPU运行调度schedulle时间片到申请资源未果,调用interruptible_sleep_on()申请资源未果,调用sleep_on()申请资源可用后wake_up()申请资源可用,收到信号、wake_up()wake_up_interruptible()创建do_fork()执行do_exit()跟踪系统调用,执行syscall_trace()sys_exit()schedulle()收到SIG_KILL或SIG_CONT后,执行wake_up()根ABCGFED祖先……..Beforefork()After……..forkfork执行前一个控制流进入内核fork模块。。。。Beforefork()After………。。。。Beforefork()After………forkfork执行后调用后,从fork返回两个控制流父进程子进程
献花(0)
+1
(本文系hdch1986首藏)