C 进程的通信与线程_第1页
C 进程的通信与线程_第2页
C 进程的通信与线程_第3页
C 进程的通信与线程_第4页
C 进程的通信与线程_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

会计学1C进程的通信与线程2023/1/172.5.1进程间通信的类型低级通信:只能传递状态和整数值(控制信息),包括进程互斥和同步所采用的信号量机制。优点是速度快。缺点是:传送信息量小:效率低,每次通信传递的信息量固定,若传递较多信息则需要进行多次通信。编程复杂:用户直接实现通信的细节(共享的数据结构、传送函数、互斥与同步),编程复杂,容易出错。高级通信:指用户可直接利用操作系统所提供的一组通信命令,高效地传送大量数据的一种通信方式。包括三类:共享存储器系统消息传送系统管道通信系统。返回第1页/共31页2023/1/17基于共享数据结构的通信方式没有屏蔽公用数据结构的设置以及同步处理等细节只能传递相对少量的数据基于共享存储区的通信方式在存储器中划出一块共享存储区,诸进程可通过对共享存储区中数据的读写来实现通信。通信前,先向系统申请获得共享存储区中的一个分区 shmget()由申请者把获得的共享存储分区链接到本进程上:将共享内存的物理区域映射到该进程的虚空间shmat()向读写普通存储器一样读写该公用存储分区2.5.2共享存储器系统第2页/共31页2023/1/17

A正文A数据

A栈

共享存储器

B正文

B数据

B栈进程A虚空间进程B虚空间内存空间返回基于共享存储区的通信方式第3页/共31页2023/1/172.5.3消息传递系统

消息传递系统是指:进程间的数据交换是以格式化的消息为单位的。消息传递系统分为直接通信方式和间接通信方式两种。1.直接通信方式

这是指发送进程利用OS提供的发送命令直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上。接收进程利用OS提供的接收命令直接从消息缓冲队列中取得消息。此时要求发送进程和接收进程都以显示的方式提供对方的标识符,通常系统提供下述两条通信原语:

Send(Receiver,message);Receive(Sender,message);或(Receive(message));

直接通信的实例-消息缓冲队列通信机制。第4页/共31页2023/1/172.直接通信的实例:

消息缓冲队列通信机制消息缓冲队列通信原理消息缓冲队列通信机制的原理是:由系统管理一组缓冲区(供所有进程使用),其中每个缓冲区可以存放一个消息。当发送进程要发送消息时先要向系统申请一个缓冲区,然后把消息写进去,接着把该缓冲区链接到接收进程的消息缓冲队列中。接收进程可以在适当的时候从消息缓冲队列中摘下消息缓冲区,读取消息,并释放该缓冲区。第5页/共31页2023/1/17消息缓冲队列通信的数据结构有:消息缓冲区 typemessagebuffer=record

sender;发送进程的标识符 size;消息长度 text;消息正文

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

end进程PCB中有关通信的扩充数据项

typePCB=record.mutex;消息缓冲队列互斥信号量;

Sm;消息缓冲队列资源信号量;

mq;消息缓冲队列首指针;.end消息缓冲队列通信机制第6页/共31页2023/1/17发送原语send(receiver,a){getbuf(a.size,i);i.sender=a.senderi.size=a.size;i.text=a.text;i.next=0;getid(PCBset,receiver,j);P(j.mutex); //消息链是临界资源,需互斥insert(j.mq,i);V(j.mutex);V(j.Sm);}消息缓冲队列通信机制第7页/共31页2023/1/17接收原语 receive(sender,b) {

j=internalname;P(j.Sm);//从消息链上申请一个消息

P(j.mutex);Remove(j.mq,i);V(j.mutex);b.sender=i.sender;b.size=i.size;b.text=i.text;

Releasebuf(i); }消息缓冲队列通信机制第8页/共31页2023/1/17.

mutexsmmq

send(B,a);sender:Asize:13text:Howareyou?Nextsender:Asize:5text:HelloNext:

sender:Asize:13text:Howareyou?Next:0receive(b);sender:Asize:5text:Hello进程B进程A进程BPCB消息缓冲队列通信机制的发送和接收第9页/共31页2023/1/17在间接通信情况,消息不直接从发送者发送到接收者,而是发送到暂存消息的共享数据结构组成的队列,这个实体称为信箱(mailbox,仅为相互通信的进程所有)。因此两个进程通信情况是,一个进程发送一个消息到某个信箱,而另一个进程从信箱中摘取消息。系统为信箱提供的原语:创建、撤销信箱、消息发送send(mailbox,message)和消息接收receive(mailbox,message)。间接通信的使用好处是增加了使用消息的灵活性。3.间接通信方式第10页/共31页2023/1/173.间接通信方式第11页/共31页2023/1/17发送原语 send(m,a){

P(m.sempty); P(m.mutex); m.box[m.number]=a; m.number++; V(m.letter); V(m.mutex); }3.间接通信方式第12页/共31页2023/1/17接收原语 receive(m,b){

P(m.sletter); P(m.mutex); b=m.box[1]; for(i=1;i<m.letter;i++)

m.box[i]=m.box[i+1]; m.number--; V(m.sletter); V(m.mutex); }3.间接通信方式第13页/共31页2023/1/17发送和接收原语直接通信原语为send(receiver,message)、receive(sender,message)间接通信原语为send(mailbox,message)、receive(mailbox,message)提供对方的标识符直接通信要求显示地提供对方的标识符间接通信无需显示提供对方的标识符,只需邮箱标识通信链路直接通信双方又且仅有一条通信链路间接通信可以一条可以多条,一条链路也可对应多个进程实时性直接通信通常只能提供实时通信间接通信方式既可实现实时通信,也可实现非实时通信4.直接通信方式和间接通信方式的比较返回第14页/共31页2023/1/172.5.4管道通信

UNIX系统在OS的发展上最重要的贡献之一便是该系统首创了管道(pipes)。管道是指用于连接一个读进程和一个写进程,以实现它们之间通信的共享文件,又称为pipe文件。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入管道,而接收管道输出的接收进程(即读进程)可从管道中接收数据。管道通信是基于文件系统形式的一种通信方式。管道机制必须提供以下协调能力确定对方是否存在互斥同步返回第15页/共31页2023/1/172.6线程为什么要引入线程线程和进程之间的关系2.6.1引入线程的好处2.6.2线程的概念2.6.3线程和进程间关系2.6.4线程和进程的比较2.6.5OS对线程的实现方式第16页/共31页2023/1/172.6.1引入线程的好处1.进程的两个基本属性:资源的拥有者:

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

进程是一个执行轨迹

以上两个属性构成进程并发执行的基础第17页/共31页2023/1/172.6.1引入线程的好处对进程必须完成的操作:创建进程撤消进程进程切换缺点:因为进程是一个资源拥有者,因而在进程的创建、撤消和切换中,系统必须为之付出较大的时空开销在系统中所设置的进程数目不宜过多,进程切换的频率也不宜过高,同时也限制了并发度的进一步提高

在操作系统中引入线程,是为了减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性第18页/共31页2023/1/172.线程的引入在操作系统中,进程的引入提高了计算机资源的利用效率。但在进一步提高进程的并发性时,人们发现进程切换开销占的比重越来越大,同时进程间通信的效率也受到限制线程的引入正是为了简化进程间的通信,以小的开销来提高进程内的并发程度线程:有时称轻量级进程,进程中的一个运行实体,是一个CPU调度单位,资源的拥有者还是进程或称任务第19页/共31页2023/1/172.6.1引入线程的好处线程的关键好处是从性能应用中得到的,在一个存在的进程中产生(或终止)一个线程比产生(或终止)一个进程化费少得多的时间类似地,在同一进程内二个线程间切换时间也要比二个进程切换时间小得多。因此假如一个应用或函数作为一组相关执行单元的应用,那末采用一组线程的集合比采用分开进程的集合要有效得多因为同一进程内的线程共享内存和文件,因此它们之间相互通信无须调用内核适合多处理机系统第20页/共31页2023/1/17例线程应用的例子是线程作为局部网上文件服务器。不同用户的文件请求使用的环境资源相同。当一个新的文件请求进入时,文件管理程序产生一个新的线程。因为一个服务器将处理许多文件请求,许多线程将在短时间内产生和撤消。假如服务器是多处理器,那末在同样进程内多个线程能在不同处理机上同时执行,在单处理机上线程结构同样有效第21页/共31页2023/1/17更多的多线程举例一个线程显示菜单,并读入用户输入;另一个线程执行用户命令考虑一个应用:由几个独立部分组成,这几个部分不需要顺序执行,则每个部分可以以线程方式实现当一个线程因I/O阻塞时,可以切换到同一应用的另一个线程第22页/共31页2023/1/172.6.2线程(Threaded)概念进程:资源分配单位(存储器、文件)和CPU调度(分派)单位。又称为"任务(task)"线程:作为CPU调度单位,而进程只作为其他资源分配单位。只拥有必不可少的资源,如:线程状态、寄存器上下文和栈同样具有就绪、阻塞和执行三种基本状态线程的优点:减小并发执行的时间和空间开销,因此容许在系统中建立更多的线程来提高并发程度。线程的创建时间比进程短;线程的终止时间比进程短;同进程内的线程切换时间比进程短;由于同进程内线程间共享内存和文件资源,可直接进行不通过内核的通信。返回第23页/共31页2023/1/17多线程(Multithreading)多线程是OS在一个进程内支持多个线程的能力。进程控制块PCB用户地址空间线程控制块TCB用户栈核心栈线程控制块TCB用户栈核心栈线程控制块TCB用户栈核心栈多线程进程模块线程A线程B线程C返回第24页/共31页2023/1/172.6.3线程和进程间关系返回第25页/共31页2023/1/172.6.4线程和进程的比较系统开销:线程是轻型实体,因此进程大,线程小调度:线程作为调度的基本单位,同进程中线程切换不引起进程切换,当不同进程的线程切换才引起进程切换;进程是资源分配的基本单位并发性:一个进程间的多个线程可并发拥有资源:线程仅拥有隶属进程的资源;进程是拥有资源的独立单位返回第26页/共31页2023/1/172.6.5OS对线程的实现方式所有线程管理由核心完成没有线程库,但对核心线程工具提供API核心

温馨提示

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

评论

0/150

提交评论