440 likes | 629 Views
第二部分. Ch3 进程管理 Ch4 多线程 这部分为介绍 OS 四大管理功能的具体实现提供理论依据。. Ch3 进程管理. 进程( Process) 的定义 进程的工作方式 -- 工作状态,进程控制块 进程的组织 -- 进程队列 进程的管理 -- 基本操作 *线程 (thread) 的概念. 3.1 进程的概念. 进程的引入 :多道程序系统出现使作业的活动规律发生了变化! 多道程序环境下 程序的特征 : 并行性:外设 - 主机,外设 - 外设,程序 - 程序; 制约性:直接制约关系,间接制约关系; 动态性: “ 程序 ” 概念的局限:
E N D
第二部分 • Ch3 进程管理 • Ch4 多线程 • 这部分为介绍OS四大管理功能的具体实现提供理论依据。
Ch3 进程管理 • 进程(Process)的定义 • 进程的工作方式--工作状态,进程控制块 • 进程的组织--进程队列 • 进程的管理--基本操作 • *线程(thread)的概念
3.1 进程的概念 • 进程的引入:多道程序系统出现使作业的活动规律发生了变化! • 多道程序环境下程序的特征: • 并行性:外设-主机,外设-外设,程序-程序; • 制约性:直接制约关系,间接制约关系; • 动态性: • “程序”概念的局限: • 程序-完成某个功能的指令的集合,静态的概念,无法反映程序运行的动态性 • 运行在CPU上只有一个程序,对于多任务则无法反映并行性 • 为刻画系统内部各作业的活动规律引入进程的概念。
进程与程序的区别: • 进程的定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,包括程序计数器、寄存器和变量的当前值。 • 进程是程序的执行(动态),程序是一组指令的有序集合(静态)。 • 进程有诞生和死亡(生命过程),程序是永久的。 • 进程= 程序+ 数据 + 进程控制块 • 一个程序可对应多个进程--程序的多次执行! • 一个进程可包含多个程序!
多道程序中的四道程序并行 一个程序计数器 进 程 A 四个程序计数器 B D C B A C D B D A C 时间
3.2 进程的状态和进程控制块 • 进程的三个基本状态: 运行状态(Running), 就绪状态 ( Ready), 阻塞/等待状态(Blocked) Running 被调度 等待事件 时间 片完 Ready Blocked 事件发生 (进程状态变化图)
进程控制块PCB • 进程组成: 程序 + 数据 + PCB • PCB:用以记录进程有关信息的一块主存。是由系统在创建进程时为每个进程分别建立的。随时刷新进程状态,以便OS的进程管理程序对进程进行调度。 • 作用: • 记录进程的有关信息(标识信息、状态信息、调度信息、通讯信息,占用资源信息,中断现场等)。 • 标志进程的存在(与进程同时建立/撤消)。 • PCB是OS调度进程的主要数据基。
(a) 与进程相关联的程序和数据集中放在一个内存区 (b) 程序和数据放在不同的内存区 进程的物理表征 PCB PCB 程序 和 数据 程序 数据
3.3 PCB的组织---进程队列 • PCB存放在主存的系统表格区(系统预留PCB空间--决定了系统允许最大进程数) • PCB组织的目标:便于调度和管理进程 • 方法有三: (1)一个表格:简单,但进程多时查找速度慢! (2)多个状态表格:相同状态的进程PCB组织在同一张表格中,如就绪进程表,运行进程表(多机),各种事件的等待进程表(见图)。 (3)进程队列:相同状态的进程PCB按优先数排成一个或多个队列,如就绪队列,不同事件的等待队列(FIFO)(见图)。
PCB的表格结构 • PCB1 Ready 就绪表 • PCB2 Blocked 就绪表起始地址 • PCB3 Running • PCB4 Blocked 某阻塞表 • PCB5 Ready 某阻塞表起始地址 • PCB6 Ready
PCB的队列结构 • 就绪队列头 PCB PCB PCB 链指针
3.4 进程的管理 • 进程的挂起和解挂-进程状态转移图 • 进程管理的任务和实现 • 几种常用的进程控制原语
1.进程的挂起和解挂 • “挂起”和“解挂”功能的必要性: (1)因系统故障等需暂停进程,处理后再恢复进程(2)用户为检查其作业要求暂停进程; (3)系统负荷过重需挂起部分进程一缓和资源紧缺。 • 进程状态细划: 运行状态(Running), 活动就绪(Readya),挂起就绪(Readys),活动阻塞(Blockeda),挂起阻塞(Blockeds) • 挂起命令:由进程自己或其它进程发出; 解挂命令:只能由其它进程发出。
具有挂起功能的进程状态变化 • Readya 事件发生 Blockeda 被调度 时间片完 等待事件 挂起 解除挂起 Running 挂起 解除挂起 挂起 Readys 事件发生 Blockeds
2.进程管理的任务和实现 • 进程管理的任务有四: (1)进程的建立和撤消; (2)进程状态的转换; (3)进程调度; (4)控制进程的并发执行。 • 进程管理的实现: 系统提供了若干基本操作(原子操作)—原语(不可分割)。进程通过调用原语实现进程管理!
概念 • 父进程(Parent Process)--建立者进程; 子进程(Progeny Process)--被建立的进程; 祖父进程,祖先进程(Ancestor); 进程族系/进程树(MINIX只有一棵以特殊进程init为根的用户进程树); • 进程的层次结构 A B C D E F G H I Q K L M
3.进程的控制原语(Primitive) • 建立进程原语(Create); 撤消进程原语(Destroy); 挂起进程原语(Suspend); 解挂进程原语(Resume);(激活Active) 改变优先数原语(Change Priority); 阻塞进程原语(Block); 唤醒进程原语(Wakeup); 调度进程运行原语(SCHEDULER)。
Create:为被建进程建立一个PCB, 并初始化 • Procedure Create(n,S0,k0,M0,R0) begin i:= Get Internal Name(n); //n: 进程外部名Id(i) := n; //i: PCB内部标示号Priority(i) := k0; //k0:进程优先数 Cpustate(i) := S0; //S0:CPU初始状态Main Store(i) := M0; //主存初始占有情况 Resources(i) := R0; //其它资源初始占有情况 Status(i) := ‘Readys’; //进程初始状态置为挂 起就绪 Parent(i) := CALLER; //父进程名 Insert(RL,i); //把i插入就绪队列 end
Destroy(n):撤消指定标识符的进 程及其所有子进程Destroy(n):撤消指定标识符的进 程及其所有子进程 • 由父进程或祖先进程发出,不会自己撤消自己,被撤消进程的全部系统资源(主存,外设等)全部释放出来归还给系统。若其正在运行则调用处理机调度程序。 • Procedure Destroy(n) begin Sched := false; i:= Search Internal Name(n); KILL(i); if Sched = truethen SCHEDULER; end注:Sched 标志是否需要调用处理机调度程序。
KILL(i):杀死所有属于i的子进程并释 放所有资源KILL(i):杀死所有属于i的子进程并释 放所有资源 • Procedure KILL(i) beginif Status(i) = ‘Running’thenbegin STOP(i); Sched := true end REMOVE(Queue(i),i); //从进程i所在的队列中移走进 程i for all Pprogeny(i) do KILL(P);//杀死的子进程 for all r progeny(i) do RELEASE(r); // RELEASE(PCB(i));释放进程i占用的所有资源end
Suspend(n):挂起外部名为n的进程 • 只能挂起进程自己或其子孙,不能挂起其它族系的进程! • Procedure Suspend(n) begin i:= Search Internal Name(n); CASE Status(i) ‘Blockeda’:Status(i) := ‘Blockeds’; ‘Readya’: Status(i) := ‘Readys’; ‘Running’: Begin STOP(i); //停止该进程i的运行 SCHEDULER; //CPU调度程序 end end
Resume(n):解挂外部名为n的已挂起进程 • 进程只能把自己的子孙进程解挂,而不能解挂别的族系,也不能解挂自己! • Procedure Resume(n) begin i:= Search Internal Name(n); if Status(i) = ‘Readys’thenbegin Status(i) = ‘Readya’; SCHEDULER; endelse Status(i) = ‘Blockeda’; end
改变进程优先级原语 进程的优先级是表示进程的重要性及运行的优先性,供进程调度程序调度进程运行时使用。为了防止一些进程因优先级较低,而长期得不到运行的情况。许多系统采用动态优先级,即进程的优先级不是固定不变的,而是按一定原则变化的。
通常进程的优先级与以下因素有关: (1) 作业开始时的静态优先数。作业的优先数取决于作业的重要程度;用户为作业运行所付出的价格和费用大小;作业的类型等因素; (2) 进程的类型。一般系统进程的优先级大于用户进程的优先数;输入输出型进程的优先级大于CPU型的进程,这是为了充分发挥系统输入输出设备的效能;
(3) 进程所使用的资源量。随着使用CPU时间愈多,其优先级愈来愈低。对其它资源使用的情况的考虑也类似。 (4) 进程在系统中等待时间。等待时间愈长,优先级就愈高。
各系统出于不同考虑,有不同的优先数计算公式。这些公式主要来自于实践经验。以UNIX系统为例,其优先数的最小值为-100,最大值为127。其值越小,优先级越高。用户进程的优先数总是大于等于100。对优先数大于等于100的进程,系统为其每秒重算一次优先数。各系统出于不同考虑,有不同的优先数计算公式。这些公式主要来自于实践经验。以UNIX系统为例,其优先数的最小值为-100,最大值为127。其值越小,优先级越高。用户进程的优先数总是大于等于100。对优先数大于等于100的进程,系统为其每秒重算一次优先数。 计算公式如下:
PCPU,对当前运行进程每20毫秒加1,直至255为止。对其它进程每秒减10,直到小于10为止。所以这是一个与进程运行时间和等待时间有关的量; Pnice,这是一个与进程本身情况有关的参数,通常为正。用户是通过系统调用nice设置的。 由公式可以看出,一个进程占用CPU时间增加,它的优先级下降。而长期不被理睬的进程,其优先级将会相对提高。
改变某进程n的优先数的原语大致可描述如下:改变某进程n的优先数的原语大致可描述如下: procedure Change Priority(n) ;begin i : = Search Internal Name (n) ; Pri(i) : = Calculate Priority(i) ;if Status (i) = Readya thenbegin Insert (RL, i, Pri) ; SCHEDULERendend
程序首先根据进程外部名n找出其内部名i,然后调用计算优先数公式算出优先数并登记到进程 i 的PCB中。当该进程状态为活动就绪,则一方面将进程 i 按其优先数插入就绪队列的适当位置,并调用 SCHEDULER,并决定是否可能抢占某个处理机使用。
3.4.2 O.S与进程控制的执行 操作系统是管理和控制进程执行的。操作系统本身是程序的集合,它与用户程序一样需要使用处理器来执行操作系统程序。 操作系统如何才能得到对处理器的控制,得到控制后运行方式如何?
1. 操作系统得到控制与进程间的开关 操作系统是经由中断方式才得到对处理器的控制。当进程在处理器上执行时,处理器是运行在用户模式(用户态或目态)。当中断发生时,当前进程的执行被打断。从而执行操作系统的相应的中断处理程序,于是操作系统得到了对处理器的控制,直到处理完成后,操作系统才把处理器的控制权交还原来被中断进程,或交给其他就绪进程运行。
常见引起打断进程的执行,把控制转给O.S.的事件机制。常见引起打断进程的执行,把控制转给O.S.的事件机制。 (1) 时钟中断 时钟中断处理程序如果是当前运行进程时间片到,或定时钟唤醒实时进程或延迟处理进程。这时中断处理程序将调用进程调度程序调度其他进程来执行。
(2) I/O设备中断 如果中断处理程序发现I/O正常完成,并有一个或多个进程正被阻塞,等待该I/O中断。那么中断程序要把这些阻塞进程的进程状态改为就绪,并把它们从阻塞队列移到就绪队列中去,最后调用进程调度程序决定是由原来进程还是由其他进程来运行。
(3) 存储访问故障中断 如果进程要访问的地址不在主存中(如缺页等),则需要把它们调入主存,这涉及等待时间较长的I/O操作。于是中断管理程序通过进程调度程序调度其他就绪进程运行,即引起了处理器在进程间切换。
(4) 访问管理程序中断 当处理器发现用户程序中的指令是访管指令,则自动触发本中断。中断管理程序调用相应管理程序为用户进程服务,如启动I/O,打开文件,分配主机等,通常会导致现行进程被阻塞。
用户进程被中断或调用操作系统功能(访问管理程序)均引起处理器执行模式开关,即由用户模式(目态) 内核模式(管态)。模式开关会引起系统开销,但开销很小。因为处理器执行模式的标志位,有些系统是在程序状态字中,通过存、取PSW就执行了模式开关。 处理器执行模式的开关:
操作系统执行过程中引起进程之间的开关。从上面关于中断驱动,使操作系统处理中断后,很多情况下,引起CPU在进程之间切换。进程间开关开销是比较大的。首先原来的运行进程的状态要改变为就绪或阻塞,那么它的PCB中的有关信息均应作相应变化,包括现场信息的保存。它的PCB将移到相应了列中去。其次需要为新选出的就绪进程的PCB改为运行状态,移出就绪队列,修改存储管理的有关表格,把新选出进程PCB中的寄存器和PSW中的值装入系统处理器的各寄存器和PSW中去。操作系统执行过程中引起进程之间的开关。从上面关于中断驱动,使操作系统处理中断后,很多情况下,引起CPU在进程之间切换。进程间开关开销是比较大的。首先原来的运行进程的状态要改变为就绪或阻塞,那么它的PCB中的有关信息均应作相应变化,包括现场信息的保存。它的PCB将移到相应了列中去。其次需要为新选出的就绪进程的PCB改为运行状态,移出就绪队列,修改存储管理的有关表格,把新选出进程PCB中的寄存器和PSW中的值装入系统处理器的各寄存器和PSW中去。
2. 操作系统的执行方式 (1) 非进程的内核方式 如图a所示,操作系统整个处于内核模式,执行于所有进程的外部,并与它们分离的。每当运行的用户进程被中断,或者要求访问管理程序时,进程的现场信息保存起来,控制转给操作系统,并执行内核模式。这种方式是多数的老操作系统采用的方式,当时进程的概念只用于用户程序。
进程A 进程N … 操作系统 图a
(2) 在用户进程内部执行 这种方式多用于小型和微型操作系统中。由于每个进程都要使用操作系统服务功能,于是与虚拟技术类似的假想每个进程都有一个操作系统,认为操作系统与用户进程是上下文相关,操作系统的地址空间被包含在每个进程的地址空间之内。每当进程被中断和调用管理程序功能时,操作系统均在该用户进程的地址空间内执行,但处理器的执行模式仍然由用户模式改为内核模式。
这种方式的最大优点是,用户进程被中断或调用管理程序时,操作系统仍然在该进程地址空间内执行,没有进程之间开关发生(仅有处理器执行模式的开关)。UNIX操作系统就属于这种方式,而图a的方式中,进程被中断和调用管理程序,当控制转给操作系统,就已经从原来的进程转出来了。这种方式的最大优点是,用户进程被中断或调用管理程序时,操作系统仍然在该进程地址空间内执行,没有进程之间开关发生(仅有处理器执行模式的开关)。UNIX操作系统就属于这种方式,而图a的方式中,进程被中断和调用管理程序,当控制转给操作系统,就已经从原来的进程转出来了。
进程A 进程N … OS功能 OS功能 进程开关功能 图b
(3) 操作系统进程方式 操作系统的各种功能作为系统进程运行,操作系统的实现,是这些系统进程的集合运行的结果,这些进程也称之为服务器或服务器进程,与用户进程的关系构成客户/服务器模式。这种方式的优点是便于应用软件工程中原则,设计操作系统的有关成分,使之具有高度模块独立性,高内聚,低耦合的模块。另外这种方式非常适合于多机系统和分布式环境。Windows NT可认为属于这种方式。
进程N 进程A OS进程1 OS进程i … 进程开关功能(微内核) 图c