操作系统第二章进程管理_第1页
操作系统第二章进程管理_第2页
操作系统第二章进程管理_第3页
操作系统第二章进程管理_第4页
操作系统第二章进程管理_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、进 程 管 理第 二 章1为了描述程序在并发执行时对系统资源的共享,我们需要一个描述程序执行时动态特征的概念,这就是进程。在本章中,我们将讨论进程概念、进程控制和进程间关系。本章的学习目的是使学生建立起进程的概念。进程、线程是操作系统中最重要的内容,在多道并发系统内,应用程序都是以进程或线程的形式参与系统的并发执行的。通过本章学习应掌握进程的定义和特征,深入理解进程的基本状态以及状态转换,进程与程序的区别;掌握进程的同步与互斥,能够灵活运用信号量描述同步问题;了解进程通信的类型;了解管程的定义及如何利用管程解决一些经典的同步问题,了解线程的概念。学习的目的和要求2主 要 内 容进程的基本概念进

2、程控制进程同步经典进程同步问题管程机制进程通信线程 由于进程是操作系统中最重要的基本概念,因此本章也就成为全书中最重要的一章。在本章中,主要讲述进程和线程的基本概念,具体包括进程的基本概念,进程的控制与同步,经典的进程同步问题,进程间通信和线程等内容。3程序的顺序执行和并发执行进程的定义和特征进程的状态转换进程的描述2.1 进程的基本概念42.1.1 程序的顺序执行和并发执行程序的执行有两种方式:顺序执行和并发执行。顺序执行是单道批处理系统的执行方式,也用于简单的单片机系统;现在的操作系统多为并发执行,具有许多新的特征。引入并发执行的目的是为了提高资源利用率。并发环境:在一定时间内物理机器上有

3、两个或两个以上的程序处于开始运行但尚未结束的状态,并且次序不是事先确定的。5顺序执行的特征:(前趋图)顺序性:按照程序结构所指定的次序(可能有分支或循环)封闭性:独占全部资源,计算机的状态只由于该程序的控制逻辑所决定可再现性:初始条件相同则结果相同。如:可通过空指令控制时间关系。并发执行的特征间断(异步)性:走走停停,一个程序可能走到中途停下来,失去原有的时序关系;失去封闭性:共享资源,受其他程序的控制逻辑的影响。如:一个程序写到存储器中的数据可能被另一个程序修改,失去原有的不变特征。失去可再现性:失去封闭性 失去可再现性;外界环境在程序的两次执行期间发生变化,失去原有的可重复特征。62.1.

4、2 进程的定义和特征进程的定义 具有独立功能的程序在一个数据集合上的一次动态执行过程,是系统进行资源分配和调度的基本单位。7进程的特征结构特征:代码段、数据段和核心段(在地址空间中);程序文件中通常也划分了代码段和数据段,而核心段通常就是OS核心(由各个进程共享,包括各进程的PCB)程序 + 数据 + PCB动态性:进程具有动态的地址空间(数量和内容),地址空间上包括:代码(指令执行和CPU状态的改变)数据(变量的生成和赋值)系统控制信息(进程控制块的生成和删除)独立性:各进程的地址空间相互独立,除非采用进程间通信手段;并发性:任何进程都可以和其他进程一起向前推进;异步性:每个进程以相对独立的

5、、不可预知的速度向前推进(万马奔腾)8进程与程序的区别进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制。进程是暂时的,程序的永久的:进程是一个状态变化的过程,有生命周期;程序则没有,可长久保存。进程与程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)。进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。92.1.3 进程的状态及其转换 三种基本状态就绪状态执行状态阻塞状态RunningReadyBlockedDispatchTimeoutEve

6、ntWaitEventOccurs三状态进程模型(状态变迁)10三状态进程模型(单队列结构)11三状态进程模型(多队列结构)12三种基本状态运行状态(Running):占用处理机资源;处于此状态的进程的数目小于等于CPU的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的idle进程(相当于空操作)。就绪状态(Ready):进程已获得除处理机外的所需资源,等待分配处理机资源;只要分配CPU就可执行。可以按多个优先级来划分队列,如:时间片用完低优,I/O完成中优,页面调入完成高优阻塞状态(Blocked):由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前

7、无法继续执行。该事件发生前即使把处理机分配给该进程,也无法运行。如:等待I/O操作的完成。13其他状态创建状态(New):进程刚创建,但还不能运行(一种可能的原因是OS对并发进程数的限制);如:分配和建立PCB表项(可能有数目限制)、建立资源表格(如打开文件表)并分配资源,加载程序并建立地址空间表。结束状态(Exit):进程已结束运行,回收除PCB之外的其他资源,并让其他进程从PCB中收集有关信息(如记帐,将退出码exit code传递给父进程)。1415挂起状态 如:系统中可运行的进程太多,CPU负担太重,OS可使一些就绪进程处于挂起状态,不能参与CPU的调度,让少一点的进程参与调度,可使这

8、些进程尽快完成,以减小负担。然后把这些被挂起的进程解挂,让它们参与CPU的竞争,这样做主要是:调节负载对换父进程请求终端用户请求操作系统的需要16活动挂起事件发生事件发生等待事件挂起调度超时释放活动挂起17进程状态的转换创建新进程:创建一个新进程,以运行一个程序。可能的原因为:用户登录、OS创建以提供某项服务、批处理作业。收容(Admit, 也称为提交):收容一个新进程,进入就绪状态。由于性能、内存、进程总数等原因,系统会限制并发进程总数。调度运行(Dispatch):从就绪进程表中选择一个进程,进入运行状态;18释放(Release):由于进程完成或失败而中止进程运行,进入结束状态;运行到结

9、束:分为正常退出Exit和异常退出abort(执行超时或内存不够,非法指令或地址,I/O失败,被其他进程所终止)就绪或阻塞到结束:可能的原因有:父进程可在任何时间中止子进程;超时(Timeout):由于用完时间片或高优先进程就绪(被抢先)等导致进程暂停运行;事件等待(Event Wait):进程要求的事件未出现而进入阻塞;可能的原因包括:申请系统服务或资源、通信、I/O操作等;事件出现(Event Occurs):进程等待的事件出现;如:操作完成、申请成功等;19 2.1.4 进程控制块(PCB, process control block)每个进程在OS中的登记表项(可能有总数目限制),OS

10、据此对进程进行控制和管理(PCB中的内容会动态改变),不同OS则不同处于核心段,用户不能由应用程序自身的代码来直接访问,而要通过系统调用,或通过UNIX中的进程文件系统(/proc)直接访问进程映象(image)。文件名为进程标识(如:00316),权限为创建者可读写。进程控制块是OS为了管理而设置的一个专门的数据结构,用它来记录进程的外部特征,描述进程的动态变化过程。20进程控制块的内容进程描述信息:进程标识符(process ID),唯一,通常是一个整数;进程名,通常基于可执行文件名(不唯一);用户标识符(user ID);进程组关系(process group)处理机状态:寄存器值(通用

11、、程序计数器PC、状态PSW,地址包括栈指针)进程调度信息:当前状态;优先级(priority);阻塞原因;进程控制信息:代码执行入口地址、程序的外存地址、链接指针;资源清单;运行统计信息(执行时间、页面调度);进程间同步和通信;21进程控制块的结构图22PCB的组织方式 系统把所有的PCB组织在一起,并把他们放在内存的固定区域,就构成了PCB表。PCB表的大小决定了系统中最多可同时存在的进程的个数,称为系统的并发度。链接方式:同一状态的进程其PCB成一链表,多个状态对应多个不同的链表各状态的进程形成不同的链表:就绪链表、阻塞链表索引方式:同一状态的进程归入一个index表(由index指向P

12、CB),多个状态对应多个不同的index表各状态的进行形成不同的索引表:就绪索引表、阻塞索引表232.2 进程控制2.2.1 进程控制的功能2.2.2 进程的创建与终止2.2.3 进程的阻塞与唤醒2.2.4 进程的挂起与激活242.2.1 进程控制的功能完成进程状态的转换原语(primitive):由若干条指令构成的“原子操作(atomic operation)”过程,作为一个整体而不可分割要么全都完成,要么全都不做。许多系统调用就是原语。进 程 图252.2.2 进程的创建和终止创 建进程何时创建?提交一个批处理作业用户登录由OS创建,用以向一用户提供服务( 如:打印文件) 由已存在的一进程

13、创建(应用请求)一个用户程序可创建成多个进程26进程的创建过程?创建一个PCB,赋予一个统一进程标识符为进程映象分配空间初始化进程控制块许多默认值 (如: 状态为 New,无I/O设备或文件.)设置相应的链接如: 把新进程加到就绪队列的链表中27终止进程何时中止? p36也称为“退出”或主程序返回进程终止的原因进程的终止过程:收回进程所占有的资源,撤消该进程的PCB释放内外存空间关闭所有打开文件释放共享内存段和各种锁定lock282.2.3 进程阻塞和进程唤醒一个在CPU上运行的进程如果要等待某一事件(如等待I/O操作的结束),应主动进入阻塞状态以让出CPU;当一个阻塞进程所等待的事件出现(如

14、I/O操作完成)时,应由当前正在CPU上运行的进程将其唤醒并使其重新进入就绪队列等待调度运行。 进程阻塞的原因与过程:p36-p37进程唤醒过程:p37292.2.4 进程的挂起与激活进程的“挂起”是操作系统为了改善系统性能而采取的一种强制性措施,不是进程的主动行为,这是它与“阻塞”的不同之处;另外,被挂起的进程可以处于静态就绪、静态阻塞等不同状态,这也与“阻塞”是一种确定的状态不同;被挂起的进程和入睡的进程的相同之处是它们都不能被调度到CPU上运行。 导致一个或一批进程被挂起的原因消除之后,还是由操作系统将这些进程激活。 进程的激活过程302.3 进程互斥和同步2.3.1 进程互斥2.3.2

15、 信号量(semaphore)2.3.3 进程互斥和同步举例312.3.1 进程互斥2.3.1.1临界资源2.3.1.2临界区的访问过程2.3.1.3同步机制应遵循的准则322.3.1.1临界资源多道程序环境进程之间存在资源共享,进程的运行时间受影响硬件或软件(如外设、共享代码段、共享数据结构),多个进程在对其进行访问时(关键是进行写入或修改),必须互斥地进行有些共享资源可以同时访问,如只读数据在计算机系统中,虽然多个进程可以共享系统中的各种资源,然而许多资源一次只能为一个进程所使用,把一次只允许一个进程使用的资源成为临界资源。许多物理设备都属于临界资源,如打印机、绘图机等,除物理设备外,还有

16、许多变量、数据等都可以被若干进程共享,它们也属于临界资源。学习时应理解这种资源所采取的共享方式。 33进程互斥是指进程之间互相排斥地使用临界资源,即你在使用时我不能使用,我在使用时你不能使用。进程同步,指系统中多个进程中发生的事件存在某种时序关系,需要相互合作,共同完成一项任务。具体说,一个进程运行到某一点时要求另一伙伴进程为它提供消息,在未获得消息之前,该进程处于等待状态,获得消息后被唤醒进入就绪态。因此,进程互斥也是一致同步,因为它也是进程之间的一致协调。公汽上司机与售票员之间进程间资源访问冲突共享变量的修改冲突操作顺序冲突进程间的制约关系间接制约:进行竞争独占分配到的部分或全部共享资源,

17、“互斥”。进程间要通过某种中介发生联系,是无意识安排的直接制约:进行协作等待来自其他进程的信息,“同步”。进程间的相互联系是有意识的安排的34共享变量的修改冲突35362.3.1.2临界区的访问过程每个进程中,访问临界资源的那段代码称为临界区。一个程序片段的集合,这些程序片段分散在不同的进程中,对某个共享的数据结构(共享资源)进行操作为了保证临界资源的正确使用,可以把临界资源的访问过程分成进入区、临界区、推出区和剩余区四个部分。为了实现进程互斥地访问临界资源,诸进程不能同时进入自己的临界区。学习时应了解用什么样的机制方能保证进程互斥地进入自己的临界区。37临界区(critical sectio

18、n):进程中访问临界资源的一段代码。进入区(entry section):在进入临界区之前,检查可否进入临界区的一段代码。如果可以进入临界区,通常设置相应正在访问临界区标志退出区(exit section):用于将正在访问临界区标志清除。剩余区(remainder section):代码中的其余部分。382.3.1.3 同步机制应遵循的准则空闲则入:其他进程均不处于临界区;忙则等待:已有进程处于其临界区;有限等待:等待进入临界区的进程不能死等;让权等待:不能进入临界区的进程,应释放CPU(如转换到阻塞状态)392.3.2 信号量(semaphore)信号量是一种用来解互斥、同步问题的数据结构。

19、信号量又分整型和记录型两种基本类型。对信号量可以施加wait操作(又称P操作)和signal操作(又称V操作),以用来解互斥、同步问题。信号量代表可用资源实体的数量。1965年,由荷兰学者Dijkstra提出(所以P、V分别是荷兰语的 pass (proberen)和increment (verhogen)),是一种卓有成效的进程同步机制。402.3.2.1 整型信号量和P、V原语S 表示资源的数量P 原语: 对应着wait操作 S = S - 1; /表示申请一个资源; if (S 0) /表示没有空闲资源; 将该进程置入到与该信号量对应的等待队列中; 阻塞该进程; 41V原语通常唤醒进程等

20、待队列中的头一个进程V 原语:对应着signal操作+ S;/表示释放一个资源;if (S = 0)/表示有进程处于阻塞状态; 从等待队列中唤醒一个等待进程; 将该进程置入就绪队列中;422.3.2.2 记录型信号量是一个数据结构定义如下: struc semaphore int value;pointer_PCB queue; 信号量说明: semaphore S;43记录型信号量的P、V原语P 原语 S.value = S.value ; if (S.value 0) 该进程状态置为等待状态 将该进程的PCB插入相应的等待队列末尾S.queue; V 原语 S.value = S.valu

21、e +; if (S.value = 0) 唤醒相应等待队列S.queue中等待的一个进程 改变其状态为就绪态 并将其插入就绪队列 442.3.2.3 AND型信号量及信号量集AND型信号量AND型信号量集是指同时需要多种资源且每种占用一个时的信号量操作对若干个临界资源采取原子操作方式分配在wait操作中,增加了“AND同步”(或“同时wait操作”)AND型信号量集 P 原语为 SwaitAND型信号量集 V 原语为 Ssignal信号量集一般信号量集是指同时需要多种资源、每种占用的数目不同、且可分配的资源还存在一个临界值时的信号量处理 (一次需要N个某类临界资源时,就要进行N次wait操作

22、低效又可能死锁)一般信号量集的基本思路就是在AND型信号量集的基础上进行扩充,在一次原语操作中完成所有的资源申请45为临界资源设置一个互斥信号量mutex (MUTual Exclusion),其初值为1;在每个进程中将临界区代码置于P(mutex)和V(mutex)原语之间必须成对使用P和V原语:遗漏P原语则不能保证互斥访问,遗漏V原语则不能在使用临界资源之后将其释放(给其他等待的进程);P、V原语不能次序错误、重复或遗漏remainder sectionV(mutex);critical sectionP(mutex);2.3.3 信号量的应用2.3.3.1 利用信号量实现互斥462.3.

23、3.2 利用信号量实现前趋关系前趋关系:并发执行的进程P1和P2中,分别有代码S1和S2,要求S1在S2开始前完成;为每个前趋关系设置一个互斥信号量S,其初值为0P2P1S1S2V(S);P(S);472.4 经典进程的同步问题2.4.1 生产者消费者问题PCP (the producer-consumer problem)问题描述:若干进程通过有限的共享缓冲区交换数据。其中,“生产者”进程不断写入,而“消费者”进程不断读出;共享缓冲区共有N个;任何时刻只能有一个进程可对共享缓冲区进行操作实例:消息缓冲通信消费者生产者48 同步问题: 生产者进程不能往“满”的缓冲区中放产品,消费者进程不能从“

24、空”的缓冲区中取产品生产者消费者放消息取消息nn个缓冲区(Buffer)ij49ConsumerProducer采用信号量机制:full是满数目,初值为0,empty是空数目,初值为N。实际上,full和empty是同一个含义:full + empty = Nmutex用于访问缓冲区时的互斥,初值是1 每个进程中各个P操作的次序是重要的:先检查资源数目,再检查是否互斥否则可能死锁(为什么?)out = 0;while (true) P(full); P(mutex); 从Bufferout取产品; out = (out +1) % n; V(mutex); V(empty); 消费产品;in

25、= 0;while (true) 生产产品; P(empty); P(mutex); 往Buffer in放产品; in = (in +1) % n; V(mutex); V(full); ;502.4.2 哲学家进餐问题DPP(the dining philosophers problem)问题描述:(由Dijkstra首先提出并解决)5个哲学家围绕一张圆桌而坐,桌子上放着5支筷子,每两个哲学家之间放一支;哲学家的动作包括思考和进餐,进餐时需要同时拿起他左边和右边的两支筷子,思考时则同时将两支筷子放回原处。如何保证哲学家们的动作有序进行?如:不出现相邻者同时要求进餐;不出现有人永远拿不到筷子

26、;实例:进程对多种类型资源的竞争使用51Var chopstick: array0.4 of semaphore;Var mutex: semaphore; chopstick0:= chopstick1:= chopstick2:= chopstick3:= chopstick4:=1; mutex:=1;PARBEGIN repeat thinking; P(mutex); P(chopsticki); P(chopsticki mod 5) V(mutex); Eating; V(chopsticki); V(chopsticki mod 5); until falsePAREND 基本

27、思想:当一哲学家未拿起其左右两边的筷子之前,不允许别的哲学家拿筷子,这样就不会出现循环等待的局面,从而避免了死锁的发生522.4.3 读者写者问题RWP(the readers-writers problem)问题描述:对共享资源的读写操作,任一时刻“写者”最多只允许一个,而“读者”则允许多个“读写” 互斥,“写写” 互斥,“读读” 允许实例:共享文件的读写53采用信号量机制:Wmutex表示允许写,初值是1。公共变量Readcount表示“正在读”的进程数,初值是0;Rmutex表示对Readcount的互斥操作,初值是1。P(Rmutex); if (Readcount = = 0)P(W

28、mutex); +Readcount;V(Rmutex); do reading;P(Rmutex); -Readcount; if (Readcount = = 0)V(Wmutex);V(Rmutex);ReaderP(Wmutex); do writing;V(Wmutex);Writer54The Sleeping Barber Problem问题描述:理发店有一位理发师和一把理发椅,理发时顾客坐在此椅上,不理发时理发师在此椅上睡觉。室内还有N 张椅子,供顾客等待理发时用。当一顾客走进理发店后发现椅子上坐满了人,则离开理发店;若理发师正为他人理发,则找个空位坐下等待;若理发师正在休息(

29、睡眠),则要求他为自己理发。 思考:解此问题的同步算法?55用P、V操作解决司机与售票员的问题司机进程:while (true)启动车辆正常驾驶到站停车售票员进程:while (true)关门售票开门562.5 管程机制2.5.1 管程的引入1973年,Hoare和Hanson所提出;其基本思想是把信号量及其操作原语封装在一个对象内部。即:将共享变量以及对共享变量能够进行的所有操作集中在一个模块中。管程的定义:管程是关于共享资源的数据结构及一组针对该资源的操作过程所构成的软件模块。管程是管理共享资源(通过数据结构)的软件实体。它由共享数据、一组操作过程、条件队列和初始化代码等四部分组成。57在

30、未引入管程之前,进程间的同步、互斥问题是由程序员用信号量机制实现的(例如,在临界区的前后插入P、V操作)。由于信号量的控制分布在整个程序中,其正确性分析很困难。 所以,由程序员处理同步、互斥问题有可能产生种种人为的错误。相比之下,管程比信号量好控制。管程可以函数库的形式实现。管程主要是管理对共享数据的操作和使用,即把对共享数据互斥使用的控制这一任务从程序员身上卸下来,而把这一至关重要的任务交由编译程序去完成, 这样既方便了编程,又不会产生人为的同步、互斥上的错误。58管程是管理进程间同步的机制,它保证进程互斥地访问共享变量,并方便地阻塞和唤醒进程,更简便、更可靠地解决进程之间的同步、互斥问题。

31、这就是在操作系统中引入管程的主要目的。管程可增强模块的独立性:系统按资源管理的观点分解成若干模块,用数据表示抽象系统资源,同时分析了共享资源和专用资源在管理上的差别,按不同的管理方式定义模块的类型和结构,使同步操作相对集中,从而增加了模块的相对独立性。一个操作系统或并发程序由若干个这样的模块所构成,一个模块通常较短,模块之间关系清晰。提高代码的可读性,便于修改和维护,正确性易于保证。59管程的实现要素管程中的共享变量在管程外部是不可见的,外部只能通过调用管程中所说明的外部过程(函数)来间接地访问管程中的共享变量;为了保证管程共享变量的数据完整性,规定管程互斥进入。假如一个系统已经有了P、V操作

32、这种同步机制,则可用P、V操作构造管程60条件变量(condition)由于管程通常是用于管理资源的,因而在管程内部,应当存在某种等待机制。当进入管程的进程因资源被占用等原因不能继续运行时使其等待。为此在管程内部可以说明和使用一种特殊类型的变量条件变量。条件变量实际上是一个指针,它可以指向空,也可以指向一个由进程控制块构成的队列的头部,每个队列表示一种等待原因,并不取具体数值相当于每个原因对应一个队列。为了将管程用于并发进程中,管程必须拥有同步手段。管程可以使用条件变量支持同步,这些变量保存在管程中并且只能在管程内部访问。61对于条件变量,可以执行X.wait和X.signal两个原语来操作条

33、件变量以实现同步:X.wait(c):调用进程在条件 c 上阻塞,管程现在可被其他进程使用;X.signal(c):在条件 c 上被阻塞的进程被再次执行。如果有这样的进程,就选择其中一个执行,否则就什么也不做。若进程P唤醒进程Q,则随后可有两种执行方式(进程P、Q都是管程中的进程)P等待,直到执行Q离开管程或下一次等待。Hoare采用。Q送入Ready队列,直到执行P离开管程或下一次等待。1980年,Lampson和Redell采用。利用管程解决生产者消费者问题622.6 进程间通信(IPC, INTER-PROCESS COMMUNICATION)进程通信,是指进程之间交换信息。从这个意义上

34、讲,进程之间的同步、互斥也是一种信息交换,也是一种通信。但是,这里所说的“通信”是指进程之间交换较多的信息这样一种情况,特别是在由数据相关和有合作关系的进程之间,这种信息交换是十分必要和数量较大的。进程间通信是协调解决多个进程之间的约束关系,实现进程共同进展的关键技术,是多道系统中控制进程并发执行必不可少的机制。632.6.1 进程间通信的类型共享存储器系统基于共享数据结构的通信方式:只能传递状态和整数值(控制信息),包括进程互斥和同步所采用的信号量机制。速度快,但传送信息量小,编程复杂。低级通信基于共享存储区的通信方式:能够传送任意数量的数据。高级通信消息传递 系统在消息传递系统中,进程间的

35、数据交换以消息为单位,用户直接利用系统提供的一组通信命令(原语)来实现通信。 管道通信管道是一条在进程间以字节流方式传送的通信通道。它由OS核心的缓冲区(通常几十KB)来实现,是单向的;在实质上,是一个有OS维护的特殊共享文件,常用于命令行所指定的输入输出重定向和管道命令。在使用管道前要建立相应的管道,然后才可使用。64UNIX管道通过pipe系统调用创建无名管道,得到两个文件描述符,分别用于写和读。int pipe(int fd2);文件描述符fd0为读端,fd1为写端;通过系统调用write和read进行管道的写和读;进程间双向通信,通常需要两个管道;只适用于父子进程之间或父进程安排的各个

36、子进程之间;UNIX中的有名管道,可通过mknod系统调用建立:指定mode为S_IFIFOint mknod(const char *path, mode_t mode, dev_t dev);65直接通信:信息直接传递给接收方,如管道。在发送时,指定接收方的地址或标识,也可以指定多个接收方或广播式地址, Send(Receiver, message);在接收时,允许接收来自任意发送方的消息,并在读出消息的同时获取发送方的地址, Receive(Sender,message)。间接通信:借助于收发双方进程之外的共享数据结构作为通信中转,如消息队列。这种数据结构称为缓冲区或信箱。通常收方和发方

37、的数目可以是任意的。2.6.2 进程的通信方式662.6.3 高级通信的特征通信链路(communication link):点对点/多点/广播单向/双向有容量(链路带缓冲区)/无容量(发送方和接收方需自备缓冲区)消息的格式:字节流(byte stream):各次发送之间的分界,在接收时不被保留,没有格式;报文(datagram/message):各次发送之间的分界,在接收时被保留,通常有格式(如表示类型),定长/不定长报文,可靠报文/不可靠报文。进程同步方式发送阻塞(直到被链路容量或接收方所接受)和不阻塞(失败时立即返回)接收阻塞(直到有数据可读)和不阻塞(无数据时立即返回)由事件驱动收发:

38、在允许发送或有数据可读时,才做发送和接收操作67 消息(message) 与窗口系统中的“消息”不同。通常是不定长数据块。消息的发送不需要接收方准备好,随时可发送。 相应的数据结构 Type message buffer = record sender size text next end2.6.4 消息缓冲机制68UNIX消息消息队列(message queue):每个message不定长,由类型(type)和正文(text)组成UNIX消息队列API:msgget依据用户给出的整数值key,创建新消息队列或打开现有消息队列,返回一个消息队列ID;msgsnd发送消息;msgrcv接收消息,

39、可以指定消息类型;没有消息时,返回-1;msgctl对消息队列进行控制,如删除消息队列;通过指定多种消息类型,可以在一个消息队列中建立多个虚拟信道注意:消息队列不随创建它的进程的终止而自动撤销,必须用msgctl(msgqid, IPC_RMID, 0)。另外,msgget获得消息队列ID之后,fork创建子进程,在子进程中能继承该消息队列ID而不必再一次msgget。692.7 线程“线程”(Thread)也叫轻进程,是进程中的一个实体,是被系统独立调度运行的基本单位。在有线程的系统中,进程只有一种身份系统分配资源的基本单位,而另一种身份系统调度运行的基本单位,则交给了线程。在有进程的操作系

40、统中再引入线程,是为了减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性。线程的创建时间比进程短;线程的终止时间比进程短;同进程内的线程切换时间比进程短;由于同进程内线程间共享内存和文件资源,可直接进行不通过内核的通信;70进程:资源分配单位(存储器、文件)和CPU调度(分派)单位。又称为任务(task)线程:作为CPU调度单位,而进程只作为其他资源分配单位。只拥有必不可少的资源,如:线程状态、寄存器上下文和栈同样具有就绪、阻塞和执行三种基本状态与进程类似,线程也需要一个称为“线程控制块”TCB的数据结构来记录其运行过程中的动态信息。TCB一般包括线程标识符、该线程的寄存器组、所使

41、用的系统栈以及用于线程调度的信息(如线程的状态、优先权等)等内容。712.7.1 线程的基本概念通常,当一个进程内具有多个线程时,线程的程序是其所属进程程序的一部分,它们共享同一地址空间,通常是更小的运行单位;而且,线程基本上不拥有系统资源,只需要一点在运行时不可缺少的硬件,如程序计数器、若干CPU寄存器和少量的栈空间等。因此,它在创建(不必分配系统资源)、撤消(不必回收系统资源)、切换(不必保存和恢复如进程那么多的“现场”信息,如地址映射寄存器的软拷贝等)等缓解所需的时空开销都比进程要少得多和小得多。此外,由于同一个进程中的多个线程具有相同的地址空间,故它们之间的同步与通信的实现,也变得比较容易。线程的引入可进一步提高系统的并发性。例如,一个建筑工程(看作一个“进程”)有许多包工队(每个包工队看作一个“线程”),当整个工程作为一个“进程”运行时,只要有一种资源(例如水泥)得不到满足,整个工程就得停下来(这是“进程”的管理原则)。但是,没有水泥只应影响到泥工队的工作,而不应影响到只需要木材的木工队的工作。因此,当每个包工队都当作一个可独立运行的“线程”时,当泥工队不能工作,还可调度木工队或其他的包工队工作。这就提高了系统的并发性。 72A word processor wit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论