2.5进程通信—高级通信(1)一、进程通信的类型进程通信是指进程之间的信息交换。根据所交换的信息量的多少分为:低级通信进程之间交换的信息量较少且效率低。如进程同步和互斥。高级通信进程之间交换的信息量较多且效率高。又分为:2.5进程通信—高级通信(2)共享存储器系统指进程之间通过对共享某些数据结构或共享存储区读写来交换数据。消息传递系统指进程间的通信以消息为单位,程序员可通过通信原语实现通信,按其实现方式不同可分为:直接通信方式发送进程直接把消息发送给接收进程。间接通信方式发送进程把消息发送到某个中间实体(信箱),接收进程从中取得消息。2.5进程通信—高级通信(3)管道通信系统发送进程(写进程)以字符流形式将大量数据送入管道(管道:用于连接读进程和写进程以实现它们之间通信的共享文件),接收进程(读进程)从管道接收数据。一、共享存储器系统相互通信的进程通过共享数据结构和存储区进行通信,因而可进一步分为:基于共享数据结构的通信方式(低效,只适于传递少量数据)基于共享存储区的通信方式。为了传送大量数据,在存储区中划出一块共享存储区,各个进程可通过对共享存储区进行读或写数据实现通信。二、消息传递系统--直接通信方式(消息缓冲通信)(1)发送进程利用OS所提供的发送命令,直接把消息发送给接收进程。要求:发送进程和接收进程都以显式方式提供对方的标识符。系统提供的两条通信原语:Send(Receiver,message);发送一个消息给接收进程;Receive(Sender,message);接收Sender发来的消息;二、消息传递系统--直接通信方式(消息缓冲通信)(2)生产者-消费者问题的解决repeat...Produceaniteminnextp;...Send(consumer,nextp);untilfalse;repeat...Receive(producer,nextc);...consumetheiteminnextc;untilfalse;二、消息传递系统---间接通信方式(信箱通信)(1)发送进程把消息发送到某个中间实体(信箱),接收进程从中取得消息。系统提供的若干条原语信箱创建和撤消原语两条通信原语Send(mailbox,message)将一个消息发送给指定信箱;Receive(mailbox,message)从指定信箱中接收一个消息;信箱的分类:私用信箱(进程为自己创建)、公用信箱(操作系统创建)、共享信箱(由某进程创建,指明是共享的)二、消息传递系统---间接通信方式(信箱通信)(2)在利用信箱通信时,在发送进程和接收进程之间,存在着四种关系:一对一关系:即可以为发送进程和接收进程建立一条专用的通信链路;多对一关系:允许提供服务的进程与多个用户进程进行交互,也称客户/服务器交互;一对多关系:允许一个发送进程与多个接收进程交互,使发送进程用广播的形式,发送消息;多对多关系:允许建立一个公用信箱,让多个进程都能向信箱投递消息,也可取走属于自己的消息。三、消息传递系统实现中的若干问题(1)通信链路建立通信链路(显式建立链路、隐式建立链路)通信链路的连接方法(点-点、多点)通信方式(单向、双向)通信链路的容量(无容量、有容量)三、消息传递系统实现中的若干问题(2)消息格式消息头和消息正文进程同步方式发送进程阻塞,接收进程阻塞(紧密同步,无缓冲)发送进程不阻塞,接收进程阻塞(应用最广)发送进程和接收进程均不阻塞(较常见,消息队列)四、消息缓冲队列通信机制(1)消息缓冲区Typemessagebuffer=recordsender:发送消息的进程名或标识符size:发送的消息长度text:发送的消息正文next-ptr:指向下一个消息缓冲区的指针end在进程的PCB中涉及通信的数据结构mq:消息队列队首指针mutex:消息队列互斥信号量,初值为1sm:表示接收进程消息队列上消息的个数,初值为0,是控制收发进程同步的信号量四、消息缓冲队列通信机制(2)发送原语send申请一个消息缓冲区,把发送区内容复制到这个缓冲区中;找到接收进程的PCB,执行互斥操作P(mutex);把缓冲区挂到接收进程消息队列的尾部,执行V(mutex),然后执行V(sm),即消息数加1;接收原语receive执行P(sm),查看是否有信件;执行互斥操作P(mutex),从消息队列中摘下第一个消息,执行V(mutex);把消息缓冲区内容复制到接收区,释放消息缓冲区四、消息缓冲队列通信机制(3)发送进程名:A信件长:5正文:ABCDESend(B,发送区首址)发送区消息队列首指针mutexsm发送进程名:A信件长:5正文:ABCDE后继信件缓冲指针0进程B的PCB发送进程名:A信件长:5正文:ABCDEreceive(接收区首址)接收区进程A进程B2.6线程(1)20世纪80年代中期,出现了比进程更小的能独立运行的基本单位----线程线程的引入引入进程的目的使多个程序并发执行改善资源利用率,提高系统吞吐量2.6线程(2)引入线程的目的减少程序并发执行时所付出的时空开销使操作系统具有更好的并发性从进程的两个基本属性(拥有资源的独立单位、可独立调度和分派的基本单位)来进一步说明引入线程的目的一、线程的基本概念(线程的定义)线程的定义线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程基本上自己不拥有系统资源,只拥有少部分在运行中必不可少的资源,但它可与同属一个进程中的其它线程共享进程所拥有的全部资源。一、线程的基本概念(线程的定义)一个线程可以创建和撤消另一个线程同一个进程中的多个线程可以并发地执行当一个线程改变了存储器中的一个数据项时,在其它线程访问这一项时它们能够看到变化后的结果如果一个线程为读操作打开一个文件时,同一个进程中的其它线程也能够从该文件中读。一、线程的基本概念(线程的属性)线程的属性线程是轻型实体。基本上不拥有系统资源,只有一点必不可少的、能保证独立运行的资源。线程是独立调度和分派的基本单位。可并发执行。一个进程中的多个线程可并发执行;不同进程中的线程也能并发执行。共享进程资源。同一进程中的各个线程,都可以共享该进程所拥有的资源。进程线程引入目的并发性基本属性(调度)基本状态拥有资源系统开销系统操作存在标志关系一、线程的基本概念(线程和进程的比较)能并发执行,提高资源的利用率和系统吞吐量.提高并发执行的程度,进一步提高资源的利用率和系统吞吐量.较低较高资源拥有的基本单位—进程独立调度/分派的基本单位—进程资源拥有的基本单位—进程独立调度/分派的基本单位—线程就绪;执行;等待就绪;执行;等待资源拥有的基本单位—进程资源拥有的基本单位—进程创建/撤消/切换时空开销较大创建/撤消/切换时空开销较小创建,撤消,切换创建,撤消,切换进程控制块PCB进程控制块PCB,线程控制块TCB单进程单线程;单进程多线程;多进程单线程;多进程多线程一、线程的基本概念(线程和进程的比较)DataProcessStackProgramOperatingSystemThreadThreadThreadStack…StackProcessisaninfrastructureinwhichexecutiontakesplace(addressspace+resources)Threadisaprograminexecutionwithinaprocesscontext–eachthreadhasitsownstack一、线程的基本概念(线程和进程的比较)二、多线程(1)指OS支持在一个进程中执行多个线程的能力传统的每个进程中只有一个线程在执行MS-DOS是支持单用户进程和单线程的OSUNIX支持多用户进程,但只支持每个进程一个线程(即多进程单线程)单进程多线程的例子:Java运行环境多进程多线程的例子:Windows2000二、多线程(2)多线程OS中进程的属性作为系统资源分配的单位可包括多个线程。至少包括一个线程,这些线程可并发执行。OS中的所有线程都只能属于某一个特定的进程进程不是一个可执行的实体,线程是作为独立运行的基本单位三、线程间的同步(1)互斥锁比较简单的、用于实现线程间对资源互斥访问的机制条件变量为避免互斥锁造成的死锁问题,在创建互斥锁时就联系着一个条件变量单纯的互斥锁用于短期锁定,用来保证互斥进入CS条件变量用于线程的长期等待,直到所等资源可用三、线程间的同步(2)信号量机制私用信号量(属于特定的进程所有,OS不知其存在)公用信号量(系统信号量)多读、单写锁四、线程的实现方式(1)内核支持线程(KST-KernelSupportedThreads)如Macintosh和OS/2操作系统用户级线程(ULT-UserLevelThreads)如一些数据库管理系统(如Infomix)组合方式把ULT和KST两种方式进行组合,提供了组合方式ULT/KST线程如Solaris操作系统内核支持线程KST用户级线程ULT管理由操作系统内核进行管理。全部由用户程序完成,操作系统内核只对进程进行管理调度单位线程进程切换速度由内核完成,速度较慢同一进程各线程间切换无需内核支持,速度较快系统调用行为内核只看作该线程的行为内核看作是整个用户进程的行为阻塞线程用户进程优点对多处理器,可同时调度同一进程的多个线程,速度较快;阻塞是在线程一级线程切换不调用内核,切换速度较快;调度算法可由应用程序定缺点同一进程内的线程切换速度慢阻塞在用户进程一级四、线程的实现方式(2)四、线程的实现方式(3)第8讲作业P83页:第33-43题