Download presentation
Presentation is loading. Please wait.
1
§3.4 进程控制 进程从创建到消灭的整个自下而上期中有三个基本状态,称为进程调度状态:执行、就绪、等待(阻塞)。
2
一、实际上,为了更好地管理和调度进程及适应系统的功能目标,许多系统中都有“挂起” 和“解除挂起 ” (即解挂)进程的功能:
1. 系统有时可能出故障或某些功能受到破坏,这时需要暂时将系统中的进程挂起,以便系统把故障消除后,再恢复原来状态。 2. 用户检查自己作业的中间执行情况和中间结果时,因同预期想法不符而产生怀疑,这时用户要求挂起他的进程,以便进行某些检查和改正。
3
3. 系统中有时负荷过重 (进程数过多),资源数相对不足,从而造成系统效率下降,此时需挂起一部分进程以调整系统负荷,等系统中负荷减轻后再将挂起进程恢复运行。
表示具有挂起和解挂功能的系统中进程的状态,新增加了新的状态 挂起就绪 (readys) 挂起等待 (Blockeds) 活动就绪 (readya) 活动等待 (Blockeda)
4
注:挂起命令可由进程自己或其它进程发出;而解挂命令只能由其它进程发出。
wakeup (唤醒) 事件发生 Readya Blockeda 时间片完 schoduler 等待事件 sleep 被调度 Running 解挂 active 挂起 suspend 挂起 suspend 解挂 active Readys 挂起suspend Blockeds 事件发生 wakeup (唤醒) 图:具有挂起功能的进程状态变化 注:挂起命令可由进程自己或其它进程发出;而解挂命令只能由其它进程发出。
5
二、进程的原语 1. OS的内核 为了对进程控制,系统中必须设置一个机构,它具有创建撤消以及进程通讯和资源管理等功能,这样结构称为OS的内核 (kernel)。 内核本身并非一个进程,而是硬件的首次延伸,即它是加到硬件上的第一层软件。 内核是通过执行各种原语操作来实现各种控制和管理功能的。
6
2. 原语 (primitive) 原语是机器指令的延伸,是用若干条机器指令构成的,用以完成特定功能的一段程序。为保证操作的正确性,原语在执行期间是不可分割的。 在许多机器中为了实现上的方便,规定在执行原语操作的要屏蔽中断,以保证原语操作的不可分割性。
7
为了对系统中的进程进行有效的管理,通常系统都提供了若干基本的操作,这些操作通常被称为原语。
用于进程控制的原语有: (1) 创建进程原语 (2) 撤消进程原语 (3) 挂起进程原语 (4) 解挂进程原语 (5) 阻塞进程原语 (6) 唤醒进程原语 (7) 调度进程运行原语 (8) 改变优先级原语
8
(1) 建立进程原语 一个进程如果需要时,它可以建立一个新的进程。被建立的进程称为子进程,而建立者进程称为父进程。所有的进程只能由父进程建立,不是自生自灭的。
9
各系统的建立进程原语就是供进程调用的用以建立子进程使用的。该原语的主要工作是为被建立进程建立起一个进程控制块PCB,并填入相应的初始值。其主要操作过程是先向系统的PCB空间申请分给一个空闲的PCB,而后根据父进程所提供的参数,将子进程的PCB表目初始化,最后返回一个进程内部名。参数为:进程名(外部标识符)n;处理机的初始状态(或进程运行现场的初始值,主要指名寄存器和程序状态字初始值)S0;优先数k0;父进程分给子进程的初始主存区M0和其它资源清单(多种资源表)R0等。
10
建立进程原语的工作大致描述为: procedure Create (n, S0, k0, M0, R0) begin
/ 请求分配PCB空间 i : = Get Internal Name(n); / 初始化PCB Id(i) : =n; Priority(i) : = k0; Cpustate(i) : = S0; Main Store(i) : = M0; Resources(i) : = R0; Status(i) : = Readys Parent(i) : = CALLER / 插入就绪队列 Insert(RL,i); end
11
程序中的第语句是调用查找进程名过程“ Get Internal Name ”,参数为进程外部名n。该过程查找PCB集合,如已有此同样外部名进程则返回出错消息,否则返回一个空闲的PCB内部标识号i。
第语句是把进程外部名n登记到第i个PCB的相应外部名表目中。 语句是往PCB中登记优先数。 语句登记现场状态初始值 S0到相应的现场保留区中或Cpustate中。
12
,分别记入主存和资源的初始占有情况,这是由父进程将自己的一部分资源分给子进程的。
是把进程初始状态置为“ 挂起就绪 ”。 语句中CALLER代表调用本过程的父进程之内部标识号,将它记入子进程PCB的父进程名这一栏。 语句也是调用插入过程Insert,其中RL表示就绪队列,即把进程i插入就绪队列。
13
(2) 挂起与解挂原语 在挂起原语的作用下,进程的状态由活动转为静止,而激活原语则处于静止状态的进程变为活动,即把“ 静止就绪 ” 变为“ 活动就绪 ”,将“ 静止阻塞 ” 变为“ 活动阻塞 ”。 如激活具有指定标识符的进程的操作可描述为:
14
procedure activate (n:) begin i : = get internal name (n): if status(i) : = “ readys” then status(i) : = “ readya” else status(i) : = “ blockeda”; if status(i) : = “ Readya” then Scheduler end
15
说明: 1. 首先根据进程外部名n,找出其内部名i; 2. 看其状态是“ readys” 还是“ blockeds”; 3. 假若状态是“ Readya”则由于此进程挂起了很长时间才解挂,其优先数可能改变,所以调用处理机调度程序 (scheduler) 来为高优先级进程抢占由一个低优先级进程占用的处理机。
16
(3) 改变进程优先级原语 进程的优先级是表示进程的重要性及运行的优先性,供进程调度程序调度进程运行时使用。为了防止一些进程因优先级较低,而长期得不到运行的情况。许多系统采用动态优先级,即进程的优先级不是固定不变的,而是按一定原则变化的。
17
通常进程的优先级与以下因素有关: (1) 作业开始时的静态优先数。作业的优先数取决于作业的重要程度;用户为作业运行所付出的价格和费用大小;作业的类型等因素; (2) 进程的类型。一般系统进程的优先级大于用户进程的优先数;输入输出型进程的优先级大于CPU型的进程,这是为了充分发挥系统输入输出设备的效能;
18
(3) 进程所使用的资源量。随着使用CPU时间愈多,其优先级愈来愈低。对其它资源使用的情况的考虑也类似。
(4) 进程在系统中等待时间。等待时间愈长,优先级就愈高。
19
各系统出于不同考虑,有不同的优先数计算公式。这些公式主要来自于实践经验。以UNIX系统为例,其优先数的最小值为-100,最大值为127。其值越小,优先级越高。用户进程的优先数总是大于等于100。对优先数大于等于100的进程,系统为其每秒重算一次优先数。 计算公式如下:
20
PCPU,对当前运行进程每20毫秒加1,直至255为止。对其它进程每秒减10,直到小于10为止。所以这是一个与进程运行时间和等待时间有关的量;
Pnice,这是一个与进程本身情况有关的参数,通常为正。用户是通过系统调用nice设置的。 由公式可以看出,一个进程占用CPU时间增加,它的优先级下降。而长期不被理睬的进程,其优先级将会相对提高。
21
改变某进程n的优先数的原语大致可描述如下:
procedure Change Priority(n) ; begin i : = Search Internal Name (n) ; Pri(i) : = Calculate Priority(i) ; if Status (i) = Readya then begin Insert (RL, i, Pri) ; SCHEDULER end end
22
程序首先根据进程外部名n找出其内部名i,然后调用计算优先数公式算出优先数并登记到进程 i 的PCB中。当该进程状态为活动就绪,则一方面将进程 i 按其优先数插入就绪队列的适当位置,并调用 SCHEDULER,并决定是否可能抢占某个处理机使用。
23
三、O.S与进程控制的执行 操作系统是管理和控制进程执行的。操作系统本身是程序的集合,它与用户程序一样需要使用处理器来执行操作系统程序。 操作系统如何才能得到对处理器的控制,得到控制后运行方式如何?
24
1. 操作系统得到控制与进程间的开关(Switch)
操作系统是经由中断方式才得到对处理器的控制。当进程在处理器上执行时,处理器是运行在用户模式(用户态或目态)。当中断发生时,当前进程的执行被打断。从而执行操作系统的相应的中断处理程序,于是操作系统得到了对处理器的控制,直到处理完成后,操作系统才把处理器的控制权交还原来被中断进程,或交给其他就绪进程运行。 目态->管态->目态
25
常见引起打断进程的执行,把控制转给O.S.的事件机制。
(1) 时钟中断 时钟中断处理程序如果是当前运行进程时间片到,或定时钟唤醒实时进程或延迟处理进程。这时中断处理程序将调用进程调度程序调度其他进程来执行。
26
(2) I/O设备中断 如果中断处理程序发现I/O正常完成,并有一个或多个进程正被阻塞,等待该I/O中断。那么中断程序要把这些阻塞进程的进程状态改为就绪,并把它们从阻塞队列移到就绪队列中去,最后调用进程调度程序决定是由原来进程还是由其他进程来运行。
27
(3) 存储访问故障中断 如果进程要访问的地址不在主存中(如缺页等),则需要把它们调入主存,这涉及等待时间较长的I/O操作。于是中断管理程序通过进程调度程序调度其他就绪进程运行,即引起了处理器在进程间切换。
28
(4) 访问管理程序中断 当处理器发现用户程序中的指令是访管指令,则自动触发本中断。中断管理程序调用相应管理程序为用户进程服务,如启动I/O,打开文件,分配主机等,通常会导致现行进程被阻塞。
29
处理器执行模式的开关: 用户进程被中断或调用操作系统功能(访问管理程序)均引起处理器执行模式开关,即由用户模式(目态) 内核模式(管态)。模式开关会引起系统开销,但开销很小。因为处理器执行模式的标志位,有些系统是在程序状态字中,通过存、取PSW就执行了模式开关。
30
进程之间的开关 操作系统执行过程中引起进程之间的开关。从上面关于中断驱动,使操作系统处理中断后,很多情况下,引起CPU在进程之间切换。进程间开关开销是比较大的。首先原来的运行进程的状态要改变为就绪或阻塞,那么它的PCB中的有关信息均应作相应变化,包括现场信息的保存。它的PCB将移到相应了列中去。其次需要为新选出的就绪进程的PCB改为运行状态,移出就绪队列,修改存储管理的有关表格,把新选出进程PCB中的寄存器和PSW中的值装入系统处理器的各寄存器和PSW中去。
31
2. 操作系统的执行方式 (1) 非进程的内核方式 如图a所示,操作系统整个处于内核模式,执行于所有进程的外部,并与它们分离的。每当运行的用户进程被中断,或者要求访问管理程序时,进程的现场信息保存起来,控制转给操作系统,并执行内核模式。这种方式是多数的老操作系统采用的方式,当时进程的概念只用于用户程序。
32
进程A 进程N … 操作系统 图a
33
(2) 在用户进程内部执行 这种方式多用于小型和微型操作系统中。由于每个进程都要使用操作系统服务功能,于是与虚拟技术类似的假想每个进程都有一个操作系统,认为操作系统与用户进程是上下文相关,操作系统的地址空间被包含在每个进程的地址空间之内。每当进程被中断和调用管理程序功能时,操作系统均在该用户进程的地址空间内执行,但处理器的执行模式仍然由用户模式改为内核模式。
34
这种方式的最大优点是,用户进程被中断或调用管理程序时,操作系统仍然在该进程地址空间内执行,没有进程之间开关发生(仅有处理器执行模式的开关)。UNIX操作系统就属于这种方式,而图a的方式中,进程被中断和调用管理程序,当控制转给操作系统,就已经从原来的进程转出来了。
35
进程A 进程N … OS功能 OS功能 进程开关功能 图b
36
(3) 操作系统进程方式 操作系统的各种功能作为系统进程运行,操作系统的实现,是这些系统进程的集合运行的结果,这些进程也称之为服务器或服务器进程,与用户进程的关系构成客户/服务器模式。这种方式的优点是便于应用软件工程中原则,设计操作系统的有关成分,使之具有高度模块独立性,高内聚,低耦合的模块。另外这种方式非常适合于多机系统和分布式环境。Windows NT可认为属于这种方式。
37
进程N 进程A OS进程1 OS进程i … 进程开关功能(微内核) 图c
Similar presentations