操作系统-第2章(3)(第四版)剖析

上传人:今*** 文档编号:107640650 上传时间:2019-10-20 格式:PPT 页数:46 大小:1.11MB
返回 下载 相关 举报
操作系统-第2章(3)(第四版)剖析_第1页
第1页 / 共46页
操作系统-第2章(3)(第四版)剖析_第2页
第2页 / 共46页
操作系统-第2章(3)(第四版)剖析_第3页
第3页 / 共46页
操作系统-第2章(3)(第四版)剖析_第4页
第4页 / 共46页
操作系统-第2章(3)(第四版)剖析_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《操作系统-第2章(3)(第四版)剖析》由会员分享,可在线阅读,更多相关《操作系统-第2章(3)(第四版)剖析(46页珍藏版)》请在金锄头文库上搜索。

1、2.5 进 程 通 信,进程通信:进程间的信息交换。 进程之间,需要交换一定数量的信息,以便协调一致共同完成指定的任务。如输入进程、计算进程、打印进程; 进程之间交换的信息量可多可少,多则成百上千个数据,少则仅仅是一个状态或一个信号。 进程通信方式: 低级通信方式:传送一个或几个字节的控制信息。 如:锁机制(Lock(L)、unLock(L)和信号量机制(P(S)、V(S)。 缺点: 效率低;通信对用户不透明(用户需要管理); 高级通信方式:以较高的效率,交换大批量的数据,隐藏细节。 如:消息缓冲机制和信箱机制。 Send / Receive原语(高级通讯原语),一、进程通信的类型(高级通信机

2、制) 1共享存储器系统 1)基于共享数据结构方式:,公用数据结构,生产者,消费者,有界缓冲区,缺点:效率低;对程序员不透明;传送少量数据;,OS:提供共享存储器。,程序员:设置缓冲区;负责进程同步;,2)基于共享存储区方式:,共 享 存 储 区,进程:读、写,进程,申请,分区,指定,分区关键字,连接,本进程,读写,2. 消息通信方式 进程间的数据交换以消息(message)或报文为单位,程序员利用一组通信命令(原语)来实现通信,可分为直接、间接通信方式。 优点:大量数据传送;隐藏通讯的实现细节; 3.管道通信方式(Pipe)(Unix系统) 也称共享文件方式,基于文件系统,利用一个打开的共享文

3、件连接两个相互通信的进程,文件作为缓冲传输介质。,字符流方式写入读出;先进先出顺序。,为了协调双方通信,管道通信必须提供三方面的协调能力: 、互斥 2 、同步、3、对方是否存在。,二、消息传递通信的实现方法 系统为进程提供了两个高级通讯原语Send和Receive。要进行消息传递时执行Send ,当接收者要接收消息时执行Receive。,1直接通信方式(通信时不需要第三者) 发送进程利用OS所提供的发送命令,直接把消息发送给目标进程。 要求:发送进程和接收进程都以显式方式提供对方的标识符。 通信命令:(原语) Send(Receiver,message): 发送一个消息给接收进程; Recei

4、ve(Sender,message): 接收Sender发来的消息; 例:原语Send(P2,m1) 表示将消息m1发送给接收进程P2; 原语Receive(P1,m1) 表示接收由P1发来的消息m1。 形式: 对称形式:一对一 非对称形式:多对一 (顾客/服务员) 如:提供打印服务的进程; Receive (id,message); 有缓冲(有界,无界),无缓冲;,2. 消息缓冲队列通信机制(直接通信),消息缓冲通信:是一种直接通信方式,一种可直接以较高的效率传递较多数据的信息交换方式,被广泛应用于本地进程之间的通信。 每当发送进程欲发送消息时,便形成一个消息缓冲区,其结构如下:,typed

5、ef struct message buffer int sender; 发送者进程标识符 int size; 消息长度 char *text; 消息正文 struct message_buffer *next 指向下一个消息缓冲区的指针 ;,消息缓冲区是内存中的一个区域,其中可以存放一条消息。 发送进程可以把消息填写到消息缓冲区中,并把该消息缓冲区插入到接收进程的消息链上,以待接收进程进行加工处理。,为此,PCB中还应该增加如下的数据项: 1) mq :消息队列头指针,初值为空。 由于接收进程可能会收到几个进程发来的消息,故应将所有的消息缓冲区链成一个队列,其队头通过在接收进程PCB中设置队

6、首指针mq来指出。,2) mutex :消息队列互斥信号量,初值为1。 消息队列属于临界资源,故在PCB中设置了互斥信号量mutex,每当对消息链操作之前和结束操作之后,应在mutex上分别执行wait操作和signal操作。,3) sm :消息队列同步计数信号量(消息队列资源信号量)。初值为0。 当发送进程发来一个消息,在此信号量上执行signal(sm);而当接收进程从消息队列上欲取走一个消息时,先对信号量执行wait(sm),如果有消息,则从消息链中取走mq所指出的第一个消息。,发送进程在发送消息之前,应先在自己的内存空间设置一个发送区,把欲发送的消息正文以及接收进程标识符id和消息长度

7、填入其中,然后用发送原语构造消息并把消息发送出去; 接收进程在接收消息之前,在本进程的内存空间中设置一个接收区,然后用接收原语接收消息。,(1) 发送原语:send(receiver,a) a为发送区开始地址。 功能:把消息从发送区复制到消息缓冲区,并将它挂到接收进程消息队列的末尾。如果该接收者正因等待消息而处于阻塞状态,则唤醒该进程。,void send(receiver,a) getbuf(a.size,i); 根据a.size(正文大小)申请缓冲区; i.sender= a.sender; 将发送区a中的信息复制到消息缓冲区i中; i.size=a.size; copy(i.text ,

8、 a.text); i.next=0; getid(PCB set,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,然

9、后,释放消息缓冲区。,void receive(b) j= internal name; 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消息缓

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

11、件数; 等信箱队列的首指针;( 若发送信件时信箱已满,则发送进程被置为“等信箱”状态,直到信箱有空时才被释放; 等信件队列的首指针;(若取信件时信箱中无信,则接收进程被置为“等信件”状态,直到有信件时才被释放) ; 信箱体由若干格子组成,每一个格子可以存放一个信件。 信箱格子的大小和数量在信箱创建时确定。,2)信箱创建、撤消、消息发送、接收原语,信箱的创建和撤消。 信箱可以由操作系统创建,也可以由用户创建,创建者是信箱的拥有者。因此,可以根据创建者的不同将信箱分为私用信箱、公用信箱和共享信箱等类型。 (2) 消息的发送和接收。 Send(mailbox,message): 将一个消息发送到指定

12、信箱; Receive(mailbox,message): 从指定信箱中接收一个消息;,3)信箱分类,4)信箱通信发送和接收对应关系,发送,接收,专用:一对一;不干扰,发送,接收,一对多;广播方式,发送,接收,多对一;C/S(客户/服务),发送,接收,多对多;公用信箱,进程通信小结: 1、共享存储器系统 基于共享数据数据结构方式:程序员负责; 基于共享存储区方式:OS负责; 2、消息通信方式Message单位 直接通信方式:指名发送、接收者标识符。 Send、Receiver 原语; 有缓冲:消息缓冲队列通信机制;(重点) 间接通信方式:中介媒体 信箱通信: 信箱:信箱头、信箱体;创建、撤消、

13、发送、接收、分类。 3、管道通信共享文件方式Unix系统 字符流输入、输出。,2.6 线 程,一、线程的基本概念,进程的概念和结构是传统操作系统工作的基础。但是,随着计算机体系结构从早期的单处理机结构发展到目前的多处理机结构,在多任务的环境中,为了减少处理机的空转时间以及处理机调度切换时的时间和空间开销,提高系统的并行能力,因此产生了更小的控制单位:线程。,补充: 多线程的概念首先是在多处理机的并行处理中提出来的。传统的多处理机由若干台处理机组成,每台处理机每次运行单个现场,即每台处理机有一个有限硬件资源的单一控制线路。在这样的多处理机系统中,在进行远程访问期间会出现等待现象,处理机在这段时间

14、间隔内处于空闲状态。为了提高处理机的并行操作能力,提出多线程的概念。在每台处理机上建立多个运行现场,这样每台处理机的有多个控制线路,为解决处理机长时间等待的问题提供了一种有效的机制。一个控制线路就是一个线程,线程可以用一个现场表示,现场由程序计数器(PC)、寄存器组和所要求的现场状态状态字组成。,1线程的引入原因(线程为进程的一条执行轨迹) 进程独立性的两个基本属性: 资源分配的单位:给每个进程分配一虚拟地址空间,保存进程映像,控制一些资源(文件,I/O设备),有状态、优先级、调度。 调度单位:进程是一个执行轨迹。 以上两个属性构成进程并发执行的基础。 进程两个属性分开的原由: 1) 从CPU

15、执行所必须的硬件现场来考察,只包含程序计数器、程序状态字、 执行堆栈、通用寄存器组等。PCB中的绝大多数表目与CPU执行程序代码是没有关系的。 2) 进程切换系统开销较大(数据和程序的地址空间)。 3)对进程系统必须完成的操作:创建进程;撤消进程; 进程切换; 缺点:时间空间开销大,限制并发度的提高。 在操作系统中,进程的引入提高了计算机资源的利用效率。但在进一步提高进程的并发性时,人们发现进程切换开销占的比重越来越大,同时进程间通信的效率也受到限制。 线程的引入正是为了简化进程间的通信,以小的开销来提高进程内的并发程度。,操作系统将进程独立性的两个属性分别赋予了两个不同实体: 拥有资源所有权

16、的仍称为进程,而调度的单位称为线程,或轻量级进程。,由于同一个进程多个线程共享同一地址空间,带来了系统时/空管理的改善。,2. 线程结构与线程控制块TCB,线程控制块TCB,数据的修改,其他线程均可见。,反映CPU现场信息。,单进程 多线程,单进程 单线程,图: 线程及线程控制块,TCB控制线程运行的。,3. 线程的特点,是进程的一个实体,可作为系统独立调度和分派的基本单位。 不拥有系统资源(只拥有从属进程的全部资源,资源是分配给进程)。 一个进程中的多个线程可并发执行。(进程可创建线程执行同一程序的不同部分) 系统开销小、切换快。(进程的多个线程都在进程的地址空间活动) 4. 线程和进程的关系 单进程、单线程 单进程、多线程 多进程、一个进程一个线程 多进程、一个进程多个线程,非常重要,5.引入线程的好处 创建一个新线程花费时间少(结束亦如此)。 两个线程的切换花费时间少。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号