b0eeb32d2be8fdb2de259ae0047eede3.ppt
- Количество слайдов: 86
第二章 进程管理
2. 1进程的基本概念 v 2. 1. 1 程序的顺序执行及特征 ٭ 一、程序执行有固定的时序。(图 2 -1 p 27) I 1 C 1 P 1 I 2 C 2 P 2 ٭ 二、特征: ▪ 顺序性、封闭性、可再现性 进程管理
2. 1. 2前趋图定义 v 有向无循环图 v 表示方式: )1( ٭ p 1 --->p 2 ({=>---)2( ٭ p 1, p 2)| p 1 必须在p 2开始前完成} v (图 2 -2 P 27) v 节点表示:一条语句,一个程序段,一进程。 P 1 P 1 进程管理
2. 1. 3 程序的并发执行 v 一、多个程序的并发执行(可能性分析) I 1 I 2 I 3 I 4 C 1 C 2 C 3 P 1 P 2 C 4 P 3 P 4 t 进程管理
程序的并发执行(2) v 二、特征 ٭ 间断性 ٭ 失去封闭性:主要由共享资源引起 ٭ 不可再现性:P 29例,设N的初值为n。 ٭ 有2个循环程序A和B,它们共享一个变量N,程序A每执行 一次时,都要做N: =N+1; B则每次要执行Print(N), 然后 再做N: =0. 若程序A, B以不同的速度运行有以下三种不同 的结果 进程管理
程序的并发执行(3) v N: =N+1在 print(N)和 N: =0之 前 , 则 N值 分 别 为 n+1, 0. v N: =N+1在print(N)和N: =0之后,则N值分别为n, 0, 1. v N: =N+1在print(N)和N: =0之间,则N值分别为 n, n+1, 0. 进程管理
2. 1. 4进程的特征和状态 v 1. 进程的特征和定义 ٭ 一、定义: ▪ 程序的一次执行过程 . 1 ٭ 结构特征 ▪ 进程:由程序段、数据段及进程控制块三部分构成, 总称“进程映像”。 . 2 ٭ 动态性 ▪ 由“创建”而产生,由“调度”而执行;由得不到资 源而阻塞;由撤消而消亡。(而程序是静态的)。 进程管理
2. 1. 4进程的特征和状态(2) . 3 ٭ 并发性 ▪ 只有建立了进程,才能并发执行。 . 4 ٭ 独立性。 ▪ 独立运行,独立获得资源。 . 5 ٭ 异步性:(间断性) 进程管理
2. 1. 4进程的特征和状态(3) v 2. 进程的三种基本状态(图 2 -5 p 31) ٭ ٭ ٭ 就绪状态 执行状态 阻塞状态 就绪 时间片完 I/O完成 阻塞 进程调度 I/O请求 执行 图 2-5 进程的三种基本状态及其转换 进程管理
2. 1. 4进程的特征和状态(4) v 3. 挂起状态(被换出内存的状态) ٭ 引入原因 ▪ 终端用户请求 ▪ 父进程请求 ▪ 负荷调节需要 ▪ 操作系统需要 ٭ 进程状态的转换(图 2 -6) ▪ 活动就绪 静止就绪 ▪ 活动阻塞 静止阻塞 ▪ 静止就绪 活动就绪 ▪ 静止阻塞 活动阻塞 进程管理
图 2-6 具有挂起状态的进程状态图 执行 请求I/O 挂起 激活 活动 就绪 挂起 静止 就绪 释放 释放 激活 活动 阻塞 挂起 静止 阻塞 进程管理
实验 v 写一个程序描述进程状态迁移过程。 v 要求: ٭ 提供导致进程状态变化的调用接口,包括创建、 删除、调度、阻塞、时间到、挂起、激活等。 ٭ 实现进程列表显示的接口。 ٭ 注:这里设计的进程是一个假设的对象实体,是 由程序自己创建和删除,不是系统维护的进程。 进程管理
2. 1. 5进程控制块 v 1. 进程控制块的作用 ٭ 是进程存在的唯一标志; ٭ PCB(process control block)常驻内存 v 2. 进程控制块中的信息 ٭ 标识、处理机状态,进 程调度信息,进程控制 信息 pid 进程状态 现场 优先级 阻塞原因 程序地址 同步机制 资源清单 链接指针 进程管理
2. 1. 5进程控制块(2) v 3. PCB的组织 ٭ 链接(p 33图 2 -7) ٭ 索引(p 34图 2 -8) 4 PCB 2 3 PCB 3 执行指针 PCB 1 0 PCB 4 8 PCB 5 阻塞队列指针 空闲队列指针 PCB 6 7 PCB 7 就绪队列指针 9 PCB 8 0 PCB 9 1 进程管理
等待队列示例 struct wait_queue { struct task_struct * task; struct wait_queue * next; }; PCB PCB 进程管理
2. 1. 5进程控制块(3) v 3. PCB的组织 ٭ 索引(p 34图 2 -8) PCB 1 PCB 2 执行指针 PCB 3 PCB 4 PCB 5 就绪表指针 PCB 6 PCB 7 阻塞表指针 进程管理
补充 v PCB和进程的代码数据放在一起吗? ٭ 系统态和用户态 ٭ 系统空间和用户空间 v 系统调用和普通调用的区别? ٭ 系统调用会引起从用户态进入核心态 进程管理
2. 2 进程控制 v 2. 2. 1 进程的创建 v 一、进程图: ٭ 描述了进程的家族关系:(P 34 图 2 -9) ٭ 子进程可继承父的资源,撤消时应归还给父进 程,父的撤消会撤消全部子进程。 v 二、引起创建进程的事件: . 1 ٭ 用户登录: ▪ 为终端用户建立一进程 . 2 ٭ 作业调度:(不是进程调度) ▪ 为被调度的作业建立进程 . 3 ٭ 提供服务: ▪ 如要打印时建立打印进程 进程管理
2. 2. 1 进程的创建(2) . 4 ٭ 应用请求: ▪ 由应用程序建立多个进程 v 三、进程的创建:(creat原语) . 1 ٭ 申请空白PCB(一个系统的PCB是有限的) . 2 ٭ 为新进程分配资源(不同于一般的分配,PCB-LIST 在一个特殊区域) . 3 ٭ 初始化PCB . 4 ٭ 将新进程插入就绪队列。 进程管理
2. 2. 2 进程的终止 v 一、引起进程终止的事件 . 1 ٭ 正常结束:如Halt、logoff . 2 ٭ 异常结束:如Protect error、overtime等 . 3 ٭ 外界干预: ▪ a. 系统员kill进程; ▪ b. 父进程终止; ▪ c. 父进程请求。 进程管理
2. 2. 2 进程的终止(2) v 二、进程的终止过程 )1( ٭ 检查进程状态; )2( ٭ 执行态――>中止,且置调度标志为真。 )3( ٭ 有无子孙需终止。 )4( ٭ 归还资源给其父进程或系统。 )5( ٭ 从PCB队列中移出PCB. 进程管理
2. 2. 3 进程的阻塞与唤醒 v 一、引起进程阻塞和唤醒的事件 . 1 ٭ 请求系统服务而得不到满足时,如问系统请 求打印。 . 2 ٭ 启动某种操作而需同步时:如该操作和请求 该操作的进程需同步运行(即非异步操作)。 . 3 ٭ 新数据尚未到达:如进程A写,进程B读,则A 未写,完B不能读。 . 4 ٭ 无新 作可做。 进程管理
2. 2. 3 进程的阻塞与唤醒(2) v 二、进程阻塞过程: ٭ 是进程自身的一种主动行为 ٭ a. 调block原语 ٭ b. 停止执行,修改PCB入阻塞队列(一个或多个) ,并转调度。 v 三、唤醒过程 ٭ 其它相关进程完成。 ٭ a. wakeup原语 ٭ b. 修改PCB,入就绪队列 ٭ 可见,有block原语,在其它进程中就应有 wakeup原语。 进程管理
2. 2. 4 进程的挂起与激活 v 一、进程的挂起过程 ٭ 由进程自己或其父进程调suspend原语完成,将该进 程PCB移到指定区域,注意状态的改变,有可能要重 新调度。 v 二、进程的激活过程。 ٭ active原语(如在外存,调入内存,改变状态,根 据情况看是否调度,如抢先或非抢先)。 v 阻塞、唤醒一般由OS实现,而挂起与激活可由用户干预。 进程管理
2. 3进程同步 v 同步:并发进程在执行次序上的协 调,以达到有效的资源共享和相互 合作,使程序执行有可再现性。 进程管理
2. 3. 1 进程同步的基本概念 v 1. 两种形式的制约关系 ٭ 资源共享关系:(进程间接制约) ▪ 需互斥地访问临界资源。 ٭ 相互合作关系:(进程直接制约) v 2. 临界资源:(一次仅允许一个进程访问的资源) ٭ 引起不可再现性是因为临界资源没有互斥访问。 进程管理
生产者-消费者问题 Var n, integer; Type item=…; var buffer: array[0, 1, …, n-1] of item; in, out: 0, 1, …, n-1; counter: 0, 1, …, n; 进程管理
生产者-消费者问题 producer: repeat … produce an item in nextp; … while counter=n do no-op; buffer[in]: =nextp; in: =(in+1)mod n; counter: =counter+1; until false; consumer: repeat while counter=0 do no-op; nextc: =buffer[out]; out: =(out+1) mod n; counter: =counter-1; consumer the item in nextc; until false; 进程管理
生产者-消费者问题(2) 设counter的初值为 5 register 1: =counter; register 1 : =register 1+1; counter : =register 1; register 1: =counter; register 1 : =register 1+1; register 2: =counter; register 2 : =register 2 -1; counter : =register 2; register 2: =counter; register 2: =register 2 -1; counter : =register 2; (register 1: =5) (register 1: =6) (register 2: =5) (register 2: =4) (counter: =6) (counter: =4) 进程管理
3. 临界区 v 定义:进程访问临界资源的那段代码。 v 访问临界资源的描述: 进入区:检查有无进程进入 临界区: 退出区:将访问标志复位 Repeat Entry section Critical section Exit section Until false 进程管理
4. 同步机制应遵循的准则 v 1. 空闲让进 v 2. 忙则等待 v 3. 有限等待:应保证为有限等待,不会产生死 等。 v 4. 让权等待:不能进入临界区的执行进程应放 弃CPU执行权。 进程管理
2. 3. 2 信号量机制 v 1 整型信号量 ٭ 是一个整型量,通过2个原子操作wait(s)和signal(s)来 访问。 Wait(s): while s<= 0 do no-op s: =s-1; Signal(s): s: =s+1; 进程管理
2 记录型信号量 v 由于整型机制中会不断测试不满足“让权等待”而引入 type semaphore=record value: integer; L: list of process; end L: 为进程链表,用于链接所有等待该类资源进程。 procedure wait(s) var s: semaphore begin s. value: =s. value – 1; if s. value <0 them block (S, L) end 进程管理
2 记录型信号量(2) procedure signal (S) var s: semaphone begin s. value: =s. vaule+1 if s. value<=0 then wakeup(s. L) end 用wait(s)和signal(s)实现同步与互斥。 在记录型信号量机制中: s. value初值:表示系统中某类资源的数目。 s. value<0: 表该信号量链表中已阻塞进程的数目。 进程管理
3 AND型信号量 v 当不用它时,有可能发生系统死锁。 v 死锁:在无外力作用下的一种僵持状态。 v AND信号量例:P 42. v 特点:要么全分配,要么一个也不分配。 进程管理
3 AND型信号量 process A: wait(Dmutex); wait(Emutex); process B: wait(Emutex); wait(Dmutex); 若 2进程交替执行,则死锁 进程管理
3 AND型信号量 Swait(s 1, s 2, …, sn) if s 1≥ 1 and …and sn ≥ 1 then for i: =1 to n do si: =si-1; endfor else place the process in the waiting queue with the first si found with si<1, and set the program count of this process to the beginning of swait operation end if Ssignal(s 1, s 2, …, sn) for i: =1 to n do si: =si+1; remove all the process waiting in the queue associated with si into the ready queue endfor 进程管理
4 信号量集(略) v 为提高效率而对AND信号的扩充。(P 43) v 三种特例: v (1)Swait(S, d, d):允许每次申请d个资源。 当资源数少于d时,不予分配。 v (2)Swait (s, 1, 1):S>1,记录型信号量。 S=1时,互斥型信号量。 v (3)Swait(s, 1, 0),可控开关,当时,允许进入, S<1时,不能进入。 进程管理
2. 3. 3 信号量的应用 v 1. 利用信号量实现互斥 var mutex: semaphore: =1 begin parbegin process 1: begin repeat wait(mutex); critical setion signal(mutex); remainder section until false; end 进程管理
1. 利用信号量实现互斥(2) process 2: begin repeat wait(mutex); critical setion signal(mutex); remainder section until false; end parend 进程管理
2. 利用信号量来描述前趋关系(1) a S 1 b S 2 c d S 4 S 5 S 3 e g f S 6 图 2-10 前趋图举例 进程管理
利用信号量来描述前趋关系(2) Var a, b, c, d, e, f, g: semaphore: =0, 0, 0, 0; Begin parbegin S 1; signal(a); signal(b); end; begin wait(a); S 2; signal(c); signal(d); end; begin wait(b); S 3; signal(e); end; begin wait(c); S 4; signal(f); end; begin wait(d); S 1; signal(g); end; begin wait(e); wait(f); wait(g); S 6; end; parend 进程管理
2. 4 经典进程同步问题 v 2. 4. 1生产者--消费者问题 v 2. 4. 2哲学家进餐问题 v 2. 4. 3读者--写者问题 进程管理
一、利用记录型信号量解决生产者一消费者问题 mutex:使诸进程互斥地访问缓冲区(n个缓冲区) empty、 full:空、满缓冲区数量。 Var mutex, empty, full: semaphore: =1, n, 0; buffer: array[0, 1, …, n-1] of item; in, out: integer: =0, 0; begin parbegin producer: begin repeat … Produce an item in nextp; … 进程管理
一、利用记录型信号量解决生产者一消费者问题 wait(empty); wait(mutex); buffer(in): =nextp; in: =(in+1) mod n; signal(mutex); signal(full); Until false; end consumer: begin repeat wait(full); wait(mutex); nextc: =buffer(out); out: =(out+1) mod n; signal(mutex); signal(empty); Consumer the item in nextc; Until false; end parend 进程管理
二、利用AND信号量解决生产者——消费者问题 var mutex, empty, full: semaphore: =1, n, 0; buffer: array[0, …, n-1] of item; in out: integer : =0, 0; begin parbegin producer: begin repeat … produce an item in nextp; … swait(empty, mutex); buffer(in): =nextp; 进程管理
in: =(in+1) mod n; ssingal(mutex, full); Until false; End Consumer: begin repeat swait(full, mutex); nextc: =buffer(out); out: =(out+1) mod n; ssignal(mutex, empty); consumer the item in nextc; until false; end parend
2. 4. 2哲学家进餐问题 v 1. 利用记录型信号量解决哲学家进餐问题 Var chopstick: array[0, …, 4] of semaphore; Repeat wait(chopstick[i]); wait(chopstick[(i+1)mod 5]); … eat … signal(chopstick[i]); signal(chopstick[(i+1)mod 5]); … think; Until false 进程管理
2. 4. 2哲学家进餐问题 v 1. 利用AND信号量解决哲学家进餐问题 Var chopstick: array[0, …, 4] of semaphore: =(1, 1, 1); processi Repeat think; Sswait(chopstick[(i+1)mod 5], chopstick[i]); eat Ssignal(chopstick[(i+1)mod 5], chopstick[i]); Until false 进程管理
2. 4. 3 读者——写者问题 v 特点: ٭ 读进程可共享同一对象。 ٭ 写进程不可共享同一对象。 进程管理
一、利用记录型信号量解决读者——写者问题 var rmutex, wmutex: semaphore: =1, 1; readcount: integer: =0; begin parbegin reader: begin repeat wait(rmutex); if readcount=0 then wait(wmutex); readcount: =readcount+1; signal(rmutex); … perform read operation 进程管理
一、利用记录型信号量解决读者——写者问题 perform read operation … wait(rmutex); readcount: =readcount-1; if readcount=0 then signal(wmutex); signal(rmutex); until false; end 进程管理
一、利用记录型信号量解决读者——写者问题 writer: begin repeat wait(wmutex) perform write operation; signal(wmutex) until false; end parend 进程管理
二、信号量集解决读者——写者问题(略) var RN integer; L, mx: semaphore: =RN, q; begin parbegin reader: begin repeat swait(L, 1, 1); swait(mx, 1, 0); … perform read operation; … ssignal(L, 1); until false; end writer: begin 进程管理
二、信号量集解决读者——写者问题(略) writer: begin repeat swait(mx, 1, 1; L, RN, 0); perform write operation; ssignal(mx, 1); until flase; end parend 进程管理
2. 5管程机制 v 引入原因: ٭ 为了避免凡要使用临界资源的进程都自备同步操作 wait(s)和signal(s). 将同步操作的机制和临界资源结合 到一起,形成管程。 v 2. 5. 1管程的基本概念 一、定义:一个数据结构和能为并发进程所执行的一组操作。 局部于管程的共享变量。 对该数据结构进程操作的一组过程。 对局部管程数据设置初值。 二、条件变量: x. y: x. wait; x. signal; x. queue 进程管理
2. 5. 2利用管程解决生产者——消费者问题 一、建立管程:PC 包括:二过程: (1)put(item)过程; (2)get(item)过程 一变量:count≥n时满;≤ 0 时空 初始: in=out=count=0 Type producer-consumer=monitor var in, out, count:integer; buffer: array [0, …, n-1] of item; notfull, notempty: condition; procedure entry put (item) procedure entry get (item) 进程管理
2. 5. 2利用管程解决生产者——消费者问题 Procedure entry put(item) begin if count ≥n then notfull. wait; buffer(in): =nextp; in: =(in+1)mod n count: =count+1; if notempty. queue then notempty. signal; end Procedure entry get(item) begin if count ≤ 0 then notempty. wait; nextc: =buffer(out); out: =(out+1)mod n count: =count-1; if notfull. queue then notfull. signal; end Begin in: =out: =0; count: =0 end 进程管理
2. 5. 2利用管程解决生产者——消费者问题 例: producer: begin repeat produce a item nextp PC. put (item); until false. End Consumer: begin repeat PC. get(item); Consume the item in nextc; Until false end 可见,由管程来实现后,进程的同步更简单明了。 进程管理
练习 v a, b 两点间是一段东西向的单行车道,现要设计一 个自动管理系统,管理规则如下:当ab间有车辆在 行驶时同方向的车可以同时驶入ab段,但另一方向 的车必须在ab段外等待;当ab之间无车时,到达a (或b)的车辆可以进入ab段,但不能从a,b点同 时驶入;当某方向在ab段行驶的车辆使出了ab段且 无车辆进入ab段时,应让另一方向等待的车辆进入 ab段行驶。请用wait, signal 具对ab段实现正确 管理。 进程管理
答: Semaphore s, mutexab, mutexba Pab: Wait(mutexab) Countab++ If countab=1 then wait(s); Signal(mutexab) …. . wait(mutexab) countab- -; if countab=0 then signal(s) signal(mutexab); 进程管理
答: Pba: wait(mutexba) countba=countba+1; If countba=1 then wait(s) wait(mutexba) enter; …… wait(mutexba) countba--; if countba=0 then signal(s) signal(mutexba); 进程管理
2. 6进程通信 v 概念:进程间的信息交换。 v 实例: ٭ 信号量机制(一种低级通信) 缺点:(1)效率低 (2)通信对用户不透明 ٭ 高级通信特点: ▪ 效率高,通信实现细节对用户透明 进程管理
2. 6. 1进程通信的类型 v 一、共享存贮器系统 . 1 ٭ 基于共享数据结构的通信方式: ▪ produce-consume中的缓冲区,低效,不透明。 ▪ 系统只提供了一共享存贮器,适于少量通信。 . 2 ٭ 基于共享存储区的通信方式: ▪ 系统提供:共享存储区。 ▪ 通信过程: –(1)向系统申请一个或多个分区 –(2)获得分区获后即可读/写. ▪ 特点:高效,速度快。 进程管理
2. 6. 1进程通信的类型 v 二、消息传递系统(可用于异种机) ٭ 信息单位:消息(报文) ٭ 是目前的主要通信方式,分为直接通信方式、间接 通信方式 ٭ 实现:一组通信命令(原语),具有透明性---> 同 步的实现。 v 三、管道通信 ٭ 管道:连接一个读进程和一个写进程之间通信的共 享文件。 ٭ 功能:大量的数据发收。 ٭ 注意: ▪ (1)互斥 ▪ (2)同步 ▪ (3)对方是否存在 进程管理
2. 6. 2直接/间接通信方式(消息通信的2种方式) v 一、直接 ٭ send(Receiver, message) ٭ receive(Sender, message) v 例:解决生产—消费问题。 repeat … produce an item in nextp; … send(consumer, nextp); until false; repeat receive( producer, nextc); … consumer the item in nextc; until false; 进程管理
2. 6. 2直接/间接通信方式(消息通信的2种方式) v 二、间接(可以实现非实时通信) ٭ 优点:在读/写时间上的随机性 ٭ 写进程――> 信箱(中间实体)――>读进程 ٭ 原语 )1( ٭ 信息的创建与撤消: ▪ 信箱名 属性(公用、私用、共享)(共享者 名字) )2( ٭ 消息的发送和接收 ▪ Send (mailbox, message) ▪ Receive (mailbox, message) 进程管理
2. 6. 2直接/间接通信方式(消息通信的2种方式) v 二、间接(可以实现非实时通信) ٭ 信箱类型 ▪ (1)私用:拥有者有读/写数,其它只有写 权,(单向)存在期=进程存在期。 ▪ (2)公用:系统创建,双向,存在期=系统 存在期。 ▪ (3)共享信箱:一般进程创建,并指明其 共享者,是双向。 ٭ 发送—接收进程之间的关系: ▪ (1)一对一关系; ▪ (2)多对一关系; ▪ (3)一对多关系; ▪ (4)多对多关系:公用信箱。 进程管理
2. 6. 3消息传递系统中的几个问题 v 一、通信链路: )1( ٭ 显式建立:(进程完成) )2( ٭ 隐式建立:(系统完成) ٭ 链路类型: ▪ (1)由连接方法分:点—点链路,多点链路。 ▪ (2)由通信方式分:单向、双向。 ▪ (3)由容量分:无容量(无缓冲区)、有(有缓冲区 )。 进程管理
2. 6. 3消息传递系统中的几个问题 v 二、消息格式: ٭ 消息头:含控制信息如:收/发进程名,消息长度、 类型、编号 ٭ 消息内容: ٭ 定长消息:系统开销小,用户不便(特别是传长消息 用户) ٭ 变长消息:开销大,用户方便。 进程管理
2. 6. 3消息传递系统中的几个问题 v 三、进程同步方式 . 1 ٭ 发送和接收进程阻塞(汇合) ▪ 用于紧密同步,无缓冲区时。 . 2 ٭ 发送进程不阻塞,接收进程阻塞(多个) ▪ 相当于接收进程(可能是多个)一直等待发送进程, 如:打印进程等待打印任务。 . 3 ٭ 发送/接收进程均不阻塞 ▪ 一般在发、收进程间有多个缓冲区时。 进程管理
2. 6. 4 消息缓冲队列通信机制 v 一、数据结构 v 1. 消息缓冲区 type message buffer =record sender: size: text: next: 指向下一指针 v 2. PCB中应增数据项: type pcb=record mq 消息队列指针 mutex 消息队列互斥信息量 sm 消息队列资源信息量(表资源消息数) 进程管理
2. 6. 4 消息缓冲队列通信机制 二、发送原语 procedure send(receiver, a) begin getbuf(a. size, i); i. sender: =a. sender; i. size: =a. size; i. text: =a. text; i. next: =0; getid(PCB set, receiver. j); wait(j. mutex); insert(j. mq, i); signal(j. mutex); signal(j. sm); end 进程管理
2. 6. 4 消息缓冲队列通信机制 v 三、接收原语 procedure receive(b) begin j: =internal name; wait(j. sm); wait(j. mutex); remove(j. mq, i); signal(j. mutex); b. sender: =i. sender; b. size: =i. size; b. text: =i. text; end 进程管理
2. 6. 4 消息缓冲队列通信机制 进程A send(B, a) a 发送区A sender: A size: 5 text: Hello PCB(B) 进程B mq mutex sm sender : A size : 5 text: hello next: 0 receive(b) b sender: A 接收区B size: 5 text: Hello 进程管理
练习 v 试说明如果使用send_mailbox和receive_mailbox 原 语实现打印文件的系统。欲打印的进程将要打印的文 件名发送到邮箱printer, 打印机假脱机将打印邮箱中 出现名字的任何文件 进程管理
//process wish to print Char filename[ ]; Status=send_mailbox(“printer”, filename); If (status< 0) { //failure} //print spooler char filename[ ] while (true) { status=receive_mailbox(“printer”, filename); if(status <0) {//failure} print(filename); }
2. 7线程 v 2. 7. 1线程的基本概念 v 1. 线程的引入 ٭ 减少并发执行时的时空开销,进程的创建、撤消、切 换较费时空,因它既是调度单位,又是资源拥有者。 ٭ 线程是系统独立调度和分派的基本单位,其基本上不 拥有系统资源,只有少量资源(IP,寄存器,栈), 但共享其所属进程所拥有的全部资源。 进程管理
2. 7线程 v 2. 7. 1线程的基本概念 v 2. 线程的属性 ٭ 轻型实体 ٭ 独立调度和分派的基本单位 ٭ 可并发实体 ٭ 共享进程资源 v 3. 线程的状态 ٭ 状态参数 ▪ 寄存器状态、堆栈、运行状态、优先级、线程专有存储器、 ▪ 信号屏蔽 ٭ 线程的运行状态 进程管理
2. 7线程 v 2. 7. 1线程的基本概念 v 4. 线程的创建和终止 v 5. 多线程中的进程 ٭ 拥有系统资源的基本单位,不再是一个开执行的实体。 进程管理
2. 7. 2线程的同步和通信 v 1. 互斥锁 ٭ 阻塞方式 ▪ lock(mutex) ▪ 访问 ▪ unlock(mutex) ٭ 非阻塞方式 ▪ if(trylock) then ▪ else 进程管理
2. 7. 2线程的同步和通信 v 2. 条件变量 ٭ 略 v 3. 信号量机制 ٭ 私用信号量(private semaphore) ▪ 作用域在一个进程中 ٭ 公用信号量(public semaphore) ▪ 作用于多个进程间 进程管理
2. 7. 3内核级和用户级线程 v 用户级线程不依赖于内核,内核级依赖内核,其创建、 撤消和切换都由内核实现,在内核中为其保留一张线程 控制块。 v 比较: v 1. 线程的调度和切换速度: ٭ 内核级线程切换类似于进程切换,但速度快于进程 切换。 ٭ 用户级线程切换通常发生在同一用户进程的诸线程 间,无需进入内核,更快。 进程管理
2. 7. 3内核级和用户级线程 v 2. 系统调用(用户级线程对内核是以进程为单位;这时 进入系统态,并阻塞调用者) ٭ 当一个进程含多个用户线程,其中某一个线程进行 系统调用,由于内核不知道这些线程的存在,因此 将进程阻塞。 ٭ 当一个进程含多个系统线程,其中某一线程进行系 统调用,则阻塞该线程,进程仍可运行。 v 3. 线程执行时间(用户级以用户进程为单位;由内核分 配) ٭ 用户级线程以进程为单位平均分配时间,对线程间 并发执行并不有利。 ٭ 系统级线程以线程为单位平均分配时间。 进程管理
2. 7. 3内核级和用户级线程 进程管理
思考 v 进程间通信和同一进程内线程间通信的效率? 进程管理
b0eeb32d2be8fdb2de259ae0047eede3.ppt