操作系统-第2章(3)(第四版)_第1页
操作系统-第2章(3)(第四版)_第2页
操作系统-第2章(3)(第四版)_第3页
操作系统-第2章(3)(第四版)_第4页
操作系统-第2章(3)(第四版)_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

2.5进程通信

进程通信:进程间的信息交换。进程之间,需要交换一定数量的信息,以便协调一致共同完成指定的任务。如输入进程、计算进程、打印进程;进程之间交换的信息量可多可少,多则成百上千个数据,少则仅仅是一个状态或一个信号。

进程通信方式:

低级通信方式:传送一个或几个字节的控制信息。如:锁机制(Lock(L)、unLock(L)和信号量机制(P(S)、V(S))。

缺点:效率低;通信对用户不透明(用户需要管理);

高级通信方式:以较高的效率,交换大批量的数据,隐藏细节。如:消息缓冲机制和信箱机制。

Send/Receive原语(高级通讯原语)一、进程通信的类型(高级通信机制)1.共享存储器系统1)基于共享数据结构方式:公用数据结构生产者消费者有界缓冲区

缺点:效率低;对程序员不透明;传送少量数据;OS:提供共享存储器。程序员:设置缓冲区;负责进程同步;2)基于共享存储区方式:共享存储区进程:读、写进程申请分区指定分区关键字连接本进程读写2.消息通信方式进程间的数据交换以消息(message)或报文为单位,程序员利用一组通信命令(原语)来实现通信,可分为直接、间接通信方式。

优点:大量数据传送;隐藏通讯的实现细节;

3.管道通信方式(Pipe)(Unix系统)也称共享文件方式,基于文件系统,利用一个打开的共享文件连接两个相互通信的进程,文件作为缓冲传输介质。

字符流方式写入读出;先进先出顺序。发送进程接收进程

为了协调双方通信,管道通信必须提供三方面的协调能力:1、互斥2、同步、3、对方是否存在。二、消息传递通信的实现方法

系统为进程提供了两个高级通讯原语Send和Receive。要进行消息传递时执行Send,当接收者要接收消息时执行Receive。

1.直接通信方式(通信时不需要第三者)发送进程利用OS所提供的发送命令,直接把消息发送给目标进程。

要求:发送进程和接收进程都以显式方式提供对方的标识符。通信命令:(原语)Send(Receiver,message):发送一个消息给接收进程;

Receive(Sender,message):接收Sender发来的消息;例:原语Send(P2,m1)表示将消息m1发送给接收进程P2;原语Receive(P1,m1)表示接收由P1发来的消息m1。

形式:

对称形式:一对一非对称形式:多对一(顾客/服务员)如:提供打印服务的进程;Receive(id,message);有缓冲(有界,无界),无缓冲;2.消息缓冲队列通信机制(直接通信)

消息缓冲通信:是一种直接通信方式,一种可直接以较高的效率传递较多数据的信息交换方式,被广泛应用于本地进程之间的通信。

每当发送进程欲发送消息时,便形成一个消息缓冲区,其结构如下:

typedefstructmessagebuffer{

intsender;发送者进程标识符

intsize;消息长度

char*text;消息正文

structmessage_buffer*next指向下一个消息缓冲区的指针

};

消息缓冲区是内存中的一个区域,其中可以存放一条消息。发送进程可以把消息填写到消息缓冲区中,并把该消息缓冲区插入到接收进程的消息链上,以待接收进程进行加工处理。为此,PCB中还应该增加如下的数据项:1)mq

:消息队列头指针,初值为空。由于接收进程可能会收到几个进程发来的消息,故应将所有的消息缓冲区链成一个队列,其队头通过在接收进程PCB中设置队首指针mq来指出。2)mutex:消息队列互斥信号量,初值为1。消息队列属于临界资源,故在PCB中设置了互斥信号量mutex,每当对消息链操作之前和结束操作之后,应在mutex上分别执行wait操作和signal操作。3)sm:消息队列同步计数信号量(消息队列资源信号量)。初值为0。当发送进程发来一个消息,在此信号量上执行signal(sm);而当接收进程从消息队列上欲取走一个消息时,先对信号量执行wait(sm),如果有消息,则从消息链中取走mq所指出的第一个消息。

发送进程在发送消息之前,应先在自己的内存空间设置一个发送区,把欲发送的消息正文以及接收进程标识符id和消息长度填入其中,然后用发送原语构造消息并把消息发送出去;

接收进程在接收消息之前,在本进程的内存空间中设置一个接收区,然后用接收原语接收消息。(1)发送原语:send(receiver,a)a为发送区开始地址。

功能:把消息从发送区复制到消息缓冲区,并将它挂到接收进程消息队列的末尾。如果该接收者正因等待消息而处于阻塞状态,则唤醒该进程。

voidsend(receiver,a)

{

getbuf(a.size,i);根据a.size(正文大小)申请缓冲区;

i.sender=a.sender;将发送区a中的信息复制到消息缓冲区i中;

i.size=a.size;

copy(i.text,a.text);

i.next=0;

getid(PCBset,receiver.j);获得接收进程内部标识符;

wait(j.mutex);

封锁消息队列;

insert(&j.mq,i);将消息缓冲区(i)插入消息队列(j);

signal(j.mutex);解锁消息队列;解锁消息队列

signal(j.sm);

j消息队列资源信号量加1;

}互斥访问(2)接收原语:receive(b)b为接收区开始地址查看(j)消息链中计数信号量(sm)来获知有待处理的消息否?若无,则接收进程插入消息链的阻塞队列;若有消息,则把消息链上的第一个消息摘下,将消息的内容复制到进程j的接收区b,然后,释放消息缓冲区。voidreceive(b)

{

j=internalname;j为接收进程内部的标识符;

wait(j.sm);判断有无待处理的消息;如j.sm=0,则阻塞;否则继续执行;

wait(j.mutex);

remove(j.mq,i);将消息队列中第一个消息移出;j消息缓冲队列的队首

signal(j.mutex);

b.sender=i.sender;将消息缓冲区i中的信息复制到接收区b;

b.size=i.size;

copy(b.text,i.text);releasebuf(i);

}互斥访问思考:mutex,sm是什么信号量?小结:接收进程j消息缓冲队列j的PCB中mqj的PCB中sm表示数量发送进程Size:5Text:helloSender:A发送区拷贝Size:5Text:helloSender:A消息缓冲区i(内存)接收进程Size:5Text:helloSender:A接收区摘下并拷贝链接3.间接通信方式(信箱通信)发送进程发消息时不指定接收进程的名字,需要借助于一个中间媒体,即信箱来进行,因此称之为间接通信方式。1)信箱的数据结构间接通信所利用的信箱是一种数据结构,它由信箱头和信箱体两部分组成。其中:信箱头是对信箱的描述,信箱头包括如下信息:信箱标识符;信箱大小;已存放的信件数;

等信箱队列的首指针;(

若发送信件时信箱已满,则发送进程被置为“等信箱”状态,直到信箱有空时才被释放;

等信件队列的首指针;(若取信件时信箱中无信,则接收进程被置为“等信件”状态,直到有信件时才被释放);

信箱体由若干格子组成,每一个格子可以存放一个信件。信箱格子的大小和数量在信箱创建时确定。发送

接收

信箱头格子1格子2格子3

┅AB发送进程接收进程信箱体2)信箱创建、撤消、消息发送、接收原语信箱的创建和撤消。信箱可以由操作系统创建,也可以由用户创建,创建者是信箱的拥有者。因此,可以根据创建者的不同将信箱分为私用信箱、公用信箱和共享信箱等类型。(2)消息的发送和接收。

Send(mailbox,message):将一个消息发送到指定信箱;

Receive(mailbox,message):从指定信箱中接收一个消息;3)信箱分类信箱种类创建通信方式实现生命期私用用户拥有者读取,其它用户只能发送。单向通信链路用户结束则消失公用OS可发送可读取双向通信链路OS运行期始终存在共享进程拥有和共享者可读取,其它只能发送。双向进程结束终止4)信箱通信发送和接收对应关系发送接收专用:一对一;不干扰发送接收一对多;广播方式发送接收多对一;C/S(客户/服务)发送接收多对多;公用信箱进程通信小结:

1、共享存储器系统基于共享数据数据结构方式:程序员负责;基于共享存储区方式:OS负责;

2、消息通信方式—Message单位直接通信方式:指名发送、接收者标识符。

Send、Receiver原语;有缓冲:消息缓冲队列通信机制;(重点)间接通信方式:中介媒体信箱通信:信箱:信箱头、信箱体;创建、撤消、发送、接收、分类。

3、管道通信—共享文件方式—Unix系统字符流输入、输出。2.6线程一、线程的基本概念

进程的概念和结构是传统操作系统工作的基础。但是,随着计算机体系结构从早期的单处理机结构发展到目前的多处理机结构,在多任务的环境中,为了减少处理机的空转时间以及处理机调度切换时的时间和空间开销,提高系统的并行能力,因此产生了更小的控制单位:线程。补充:

多线程的概念首先是在多处理机的并行处理中提出来的。传统的多处理机由若干台处理机组成,每台处理机每次运行单个现场,即每台处理机有一个有限硬件资源的单一控制线路。在这样的多处理机系统中,在进行远程访问期间会出现等待现象,处理机在这段时间间隔内处于空闲状态。为了提高处理机的并行操作能力,提出多线程的概念。在每台处理机上建立多个运行现场,这样每台处理机的有多个控制线路,为解决处理机长时间等待的问题提供了一种有效的机制。一个控制线路就是一个线程,线程可以用一个现场表示,现场由程序计数器(PC)、寄存器组和所要求的现场状态状态字组成。1.线程的引入原因(线程为进程的一条执行轨迹)

进程独立性的两个基本属性:

资源分配的单位:给每个进程分配一虚拟地址空间,保存进程映像,控制一些资源(文件,I/O设备),有状态、优先级、调度。

调度单位:进程是一个执行轨迹。以上两个属性构成进程并发执行的基础。

进程两个属性分开的原由:

1)从CPU执行所必须的硬件现场来考察,只包含程序计数器、程序状态字、执行堆栈、通用寄存器组等。PCB中的绝大多数表目与CPU执行程序代码是没有关系的。

2)进程切换系统开销较大(数据和程序的地址空间)。

3)对进程系统必须完成的操作:创建进程;撤消进程;进程切换;

缺点:时间空间开销大,限制并发度的提高。在操作系统中,进程的引入提高了计算机资源的利用效率。但在进一步提高进程的并发性时,人们发现进程切换开销占的比重越来越大,同时进程间通信的效率也受到限制。线程的引入正是为了简化进程间的通信,以小的开销来提高进程内的并发程度。

操作系统将进程独立性的两个属性分别赋予了两个不同实体:拥有资源所有权的仍称为进程,而调度的单位称为线程,或轻量级进程。

由于同一个进程多个线程共享同一地址空间,带来了系统时/空管理的改善。2.线程结构与线程控制块TCB

执行堆栈、程序计数器、通用寄存器组、状态标记线程线程控制块TCB进程地址空间数据的修改,其他线程均可见。反映CPU现场信息。

单进程多线程单进程单线程线程标识线程号处理机状态信息(现场)通用寄存器指令计数器程序状态字栈指针线程调度信息线程状态线程优先数等待原因调度算法参数等图:线程及线程控制块TCB控制线程运行的。3.线程的特点是进程的一个实体,可作为系统独立调度和分派的基本单位。不拥有系统资源(只拥有从属进程的全部资源,资源是分配给进程)。一个进程中的多个线程可并发执行。(进程可创建线程执行同一程序的不同部分)系统开销小、切换快。(进程的多个线程都在进程的地址空间活动)4.线程和进程的关系单进程、单线程单进程、多线程多进程、一个进程一个线程多进程、一个进程多个线程用户栈系统栈PCB数据程序单线程进程模型寄存器PCB数据程序多线程进程模型用户栈系统栈

TCB寄存器用户栈系统栈

TCB寄存器用户栈系统栈

TCB寄存器线程1线程2线程3进程进程非常重要5.引入线程的好处创建一个新线程花费时间少(结束亦如此)。两个线程的切换花费时间少。(如果机器设有“存储[恢复]所有寄存器”指令,则整个切换过程用几条指令即可完成)。线程之间通信效率要高于进程之间的通信效率。进程间通信要内核介入,而同一进程多个线程共享同一地址空间,所以通信无须内核介入。适合多处理机系统。

6.线程与进程的比较

调度性:线程作为调度的基本单位,同进程中线程切换不引起进程切换,当不同进程的线程切换才引起进程切换;进程作为拥有资源的基本单位。

并发性:一个进程间的多个线程可并发。

拥有资源:线程仅拥有隶属进程的资源;进程是拥有资源的独立单位。

系统开销:进程大;线程小。

补充:由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等,因此付出的开销远大于创建或撤销线程时的开销。进程切换时,涉及当前执行进程CPU环境的保存及新调度到进程环境的设置,而线程切换时只需保存和设置少量寄存器的内容,开销很小。此外,由于同一进程的多个线程共享进程的地址空间,这些线程之间的同步和通信非常容易,甚至无需操作系统的干预。

地址空间和其他资源(如打开的文件):进程的地址空间之间相互独立,同一进程的线程间共享进程的资源,某进程内的线程对于其他进程不可见。

通信方面:进程间通信需要进程同步和互斥手段辅助,以保证数据一致性,而线程间可以直接读/写进程数据段(如全局变量)来进行通信。

7.多线程OS中的进程属性

(1)作为系统资源分配的单位。

(2)可包括多个线程。所有线程都只能属于某一个特定进程。

(3)进程不是一个可执行的实体。例:进程处于“执行”状态,即进程中的某线程正在执行。挂起某个进程,即该进程中的所有线程也都将被挂起。

8.线程的属性

(1)线程是一个轻型实体,它不拥有系统资源,但每个线程都应有一个唯一的标识符和线程控制块(TCB),线程控制块中记录了线程执行的寄存器和栈等现场状态。

(2)不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用时,操作系统为它们创建不同的线程。

(3)同一进程中的各个线程共享该进程所拥有的资源。

(4)线程是处理机的独立调度单位,多个线程可以并发执行的。在单CPU的计算机系统中,各线程可交替地占用CPU;在多CPU的计算机系统中,各线程可同时占用不同的CPU,若各个CPU同时为一个进程内的各线程服务,则可以缩短进程的处理时间。

(5)一个线程被创建后便开始了它的生命周期,直至终止,线程在生命周期内会进行阻塞态、就绪态和运行态等各种状态变化。9.线程的状态

(1)状态参数。用线程标识符和一组状态参数描述。①寄存器状态,PC;②堆栈,局部变量和返回地址;③线程运行状态,何种运行状态;④优先级,执行的优先程度;⑤线程专有存储器,保存线程自己的局部变量拷贝;⑥信号屏蔽,即对某些信号加以屏蔽。

(2)线程运行状态。三种基本状态:①执行状态;②就绪状态状态;③阻塞状态,10.线程的创建和终止

多线程OS,启动应用程序,仅有一个线程执行(“初始化线程”),之后可创建若干个线程。

创建:线程创建函数(或系统调用);相应的参数。

生命期:有一定;

终止:

1)自愿退出:完成了自己的工作;

2)异常终止:运行中出现错误、被其它线程强行终止;线程中止后并不立即释放它占有的资源,只有当进程中的其它线程执行了分离函数后,被终止的线程才与资源分离。已被终止但尚未释放资源的线程,仍可以被需要它的线程所调用,恢复重新运行,通过“等待线程终止”的连接命令。例题:1.在支持多线程的系统中,进程P创建的若干个线程不能共享的是(

)。

A.进程P的代码段

B.进程P中打开的文件

C.进程P的全局变量

D.进程P中某线程的栈指针下列关于进程和线程的叙述中,正确的是()。不管系统是否支持线程,进程都是资源分配的基本单位线程是资源分配的基本单位,进程是调度的基本单位系统级线程和用户级线程的切换都需要内核的支持同一进程中的各个线程拥有各自不同的地址空间下面的叙述中,正确的是()。引入线程后,处理器只能在线程间切换。引入线程后,处理器仍在进程间切换。线程的切换,不会引起进程的切换。线程的切换,可能引起进程的切换。二、线程的实现机制

用户级线程内核支持线程两者结合方法1.内核支持线程(KST)

通常的进程(系统、用户):创建、撤消,I/O操作,切换,利用系统调用进入内核,在内核的支持下实现的。进程需要OS内核的支持,与内核紧密相关的。

内核支持线程KST(KernelSupportedThreads),也是在内核的支持下运行的,创建、撤消和切换等也是依靠内核,在内核空间实现的。内核空间为每一个内核支持线程设置了一个线程控制块,内核是根据该控制块而感知某线程的存在,并对其加以控制。内核支持线程的优点和缺点

优点:

对多处理器,核心可以同时调度同一进程的多个线程。

阻塞是在线程一级完成。

核心例程是多线程的。

缺点:

在同一进程内的线程切换调用内核,导致速度下降。(用户的线程)

2.用户级线程(ULT)仅存在于用户空间中。

由应用程序完成所有线程的管理;创建、撤消、同步与通信。通过线程库(用户空间);一组管理线程的过程;核心不知道线程的存在。线程切换不需要核心态特权。调度是应用特定的。

调度仍是以进程为单位进行的。

用户级线程的优点和缺点优点:线程切换不调用核心,切换速度快。调度是应用程序特定的:可以选择最好的算法。ULT可运行在任何操作系统上(只需要线程库;作用于用户态)。缺点:大多数系统调用是阻塞的,因此核心阻塞进程,故进程中所有线程将被阻塞。核心只将处理器分配给进程,同一进程中的两个线程不能同时运行于两个处理器上。(多用户应用程序不能利用多处理机技术)

3.ULT和KST结合方法线程创建在用户空间完成。大量线程调度和同步在用户空间完成。程序员可以调整KST的数量。例子:Solaris三、线程的实现—何种形式的线程都要直接或间接使用内核1.内核支持线程的实现任务数据区进程创建PTDATCB#1

线程ID、优先级、线程运行的CPU状态等;存在于内核空间;线程进程创建分配内核支持线程的创建、撤消均与进程的相类似;内核支持线程的调度和切换与进程的调度和切换十分相似;2.用户级线程的实现用户级线程是在用户空间实现的。所有的用户级线程都具有相同的结构,它们都运行在一个中间系统的上面。

实现的中间系统:运行时系统;内核控制线程。

线程线程线程用户空间内核中间系统1)运行时系统(RuntimeSystem)

所谓“运行时系统”,实质上是用于管理和控制线程的函数(过程)的集合。用这些函数使用户级线程与内核无关。

包括:创建、撤消、线程同步和通信、调度函数等。函数驻留在用户空间,用户级线程与内核之间的接口。线程线程线程用户空间内核中间系统函数

线程的切换无需进入内核,切换操作简单,切换速度非常快。

2)内核控制线程--轻型进程LWP(LightWeightProcess)

LWP的数据结构:标识符、优先级、状态,栈、局部存储区等。

LWP可通过系统调用来获得内核提供的服务。当一个用户级线程运行时,只要将它连接到一个LWP上,此时它便具有了内核支持线程的所有属性。图2-16利用轻型进程作为中间系统

只看见LWP线程小结:

1、线程基本概念

(线程是进程内一个可调度的实体。)

1)线程引入原因为了简化进程间的通信,以小的开销来提高进程内的并发程度。

2)支持线程的OS中,线程是调度的单位;进程是资源分配的单位。

3)线程与进程的比较、线程的好处。

2、线程的实现机制

1)内核支持线程:存于内核、创、撤、转换OS控制;调度以线程为单位;阻塞是在线程一级;实现方式:创建时分配TCB;

2)用户级线程:存于用户态;应用程序负责创、撤、切换;切换速度快;调度以进程为单位;阻塞是进程一级。实现方式:中间系统运行时系统:一组函数和过程;内核控制线程(LWP):轻型进程通过系统调用获得内核服务。

进程通信小结:

进程通信是指进程之间的信息交换。根据所交换的信息量的多少分为

温馨提示

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

评论

0/150

提交评论