目录

  • 1 第一章操作系统引论
    • 1.1 第一课时 123节
    • 1.2 第二课时 45节
  • 2 第二章进程的描述与控制
    • 2.1 第一课时 12节
    • 2.2 第二课时 3节
    • 2.3 第三课时 4节
    • 2.4 第四课时 5节
    • 2.5 第五课时 6节
    • 2.6 第六课时 78节
    • 2.7 第七课时  习题
  • 3 第三章处理机调度与死锁
    • 3.1 第一课时1、2节
    • 3.2 第二课时3节
    • 3.3 第三课时4节
    • 3.4 第五课时5、6节
    • 3.5 第六课时7、8节
    • 3.6 第七课时习题
  • 4 第四章存储器管理
    • 4.1 第一课时1,2节
    • 4.2 第二课时3节
    • 4.3 第三课时4,5节
    • 4.4 第四课时6节
  • 5 第五章虚拟内存
    • 5.1 5.1、5.2
    • 5.2 5.3
    • 5.3 5.4、5.5
  • 6 第六章 设备管理
    • 6.1 第一课时1、2节
    • 6.2 第二课时3、4节
    • 6.3 第三课时5、6节
    • 6.4 第四课时7节8节(一)
    • 6.5 第五课时8节(二)
  • 7 文件管理
    • 7.1 第一课时1、2节
    • 7.2 第二课时3、4节
    • 7.3 第三课时5节
  • 8 磁盘管理
    • 8.1 第一课时1节
    • 8.2 第二课时2、3节
    • 8.3 第三课时4、5节
第五课时 6节

2.6 

2.6.1进程通信的类型

1.共享存储器系统

(1)基于共享数据结构的通信方式。

     诸进程公用某些数据结构,以实现信息交换。如P—C问题利用有界缓冲区这种数据结构来实现通信。实质是低级通信。

(2) 基于共享存储区的通信方式。

    存储器中划出一块共享存储区,诸进程可通过对共享存储区中数据的读或写来实现通信。

2.消息传递系统

 当前应用最为广泛的一种通信机制。

  进程间通信单位:格式化的消息(报文)

  实现过程:利用OS提供的一组通信原语。

  优点:能实现大量数据的传递,隐藏通信细节,使通信过程对用户是透明的。

   微内核操作系统中,微内核与服务器之间的通信都采用消息传递机制。

消息传递分为直接通信、间接通信方式两种。

3.管道通信(最早出现于UNIX系统)

为了协调双方的通信,管道机制必须提供以下三方面的协调能力:

  (1)互斥:两进程互斥访问pipe

(2)同步:

  写进程写入一定数据后等待读进程读数据;

  读进程读完数据后等待写进程向pipe写数据;

(3)pipe两端都有进程才能进行通信。

2.6.2消息传递通信的实现方法

1.直接通信方式

源进程利用OS所提供的发送命令,直接把消息发送给目标进程。

   发送进程和接收进程都以显式方式提供对方的标识符。

发送原语:Send(Receivermessage)

接收原语:Receive(Sendermessage)

例如,原语Send(P2m1)

      原语Receive(P1m1)

在某些情况下,接收进程可与多个发送进程通信,因此,它不可能事先指定发送进程。对于这样的应用,接收原语可表示为:

Receive(idmessage)

可以利用直接通信原语来解决PC问题。

  P进程生产消息后,用Send原语发送给C进程;而C进程则利用Receive原语来得到一个消息。通信过程可分别描述如下:

P:  repeat

      produce an item in nextp

    send(consumernextp)

    until false

C: repeat

   receive(producernextc); 

   consume the item in nextc

   until false

2.间接通信方式

 利用第三方来传递消息,以实现实时、非实时的信息传递。第三方称为信箱。  

OS提供的信箱原语:

(1)信箱的创建和撤消。

   信箱创建原语建立一个新信箱。

   需创建的信箱信息:信箱名字、信箱属性(公用、私用或共享);对于共享信箱,还应给出共享者的名字。

   信箱撤消原语撤消信箱。

(2)消息的发送和接收。

  发送原语:Send(mailboxmessage)   

  接收原语Receive(mailboxmessage)

 信箱可由操作系统创建,也可由用户进程创建,据此,可把信箱分为以下三类。

   1) 私用信箱

 由进程自身创建,多进程可向其发信息,但只能由创建者读取信息,有生命周期。

  私用信箱采用单向通信链路实现。

2)共享信箱

   由进程创建,需指明共享者名字。指定的共享者可从信箱中取属于自己的信息。 

3) 公用信箱

   由操作系统创建,提供给系统中的所有核准进程使用。核准进程既可发送消息也可读取自己的消息。

   采用双向通信链路的信箱来实现。

   通常,公用信箱在系统运行期间始终存在。

用信箱通信时发送、接收进程间的关系:  

(1)111发送1接收,二者通过单向通信链路通信,整个过程不受干扰。

(2)1对多:1发送多接收,发送进程采用广播方式向多个接收者发送消息。

(3)多对1:多发送1接收,如私有信箱。

(4)多对多关系:如公用信箱。

2.5.3消息传递系统实现中的

  若干问题

1.通信链路

2.消息的格式

 单机消息格式比较简单;网络环境下消息格式比较复杂。

3.进程同步方式

 进程通信时,发送进程、接收进程,都存在两种可能性状态,即发送(接收),或者阻塞。二者间可能有以下三种情况:

(1) 二者均阻塞。

  两进程平时都处于阻塞状态,直到有消息传递时才被唤醒。

  此时进程之间紧密同步,即二者是无容连接。这种同步方式称为汇合。

(2)发送进程不阻塞,接收进程阻塞。

  应用最广的同步方式。

  发送进程可以尽快地把一个或多个消息发送给多个目标;而接收进程平时则处于阻塞状态,直到发送进程发来消息时才被唤醒。如打印服务。

(3)发送进程和接收进程均不阻塞。

   也较常见。一般二者间为有容连接。

   例如,在发送进程和接收进程之间联系着一个消息队列。

   发送进程可以连续地向消息队列中发送消息;接收进程也可以连续地从消息队列中取得消息。

   只有当消息队列满时,发送进程才会阻塞;只有当消息队列中的消息空时,接收进程才会阻塞。

2.6.4消息缓冲队列通信机制

 1) 消息缓冲区

  消息缓冲区描述如下:

typemessage buffer=record

  sender       ;发送者进程标识符

  size消息长度

text消息正文

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

end

2)  PCB中有关通信的数据项

  在PCB中应增加的数据项可描述如下:

typeprocesscontrol block=record

mq消息队列队首

             mutex消息队列互斥信号量

sm消息队列资源信号量

end

2.发送原语

 1)先在自己的内存空间设置一发送区a

 2)把待发送的消息正文、发送进程标识符、  

   消息长度等信息填入其中

 3)然后调用发送原语,把消息发送给目标

   (接收)进程。

   ①根据发送区a中所设置的消息长度a.size来申请一缓冲区i

   ②把发送区a中的信息复制到缓冲区i中;   

   ③获得接收进程的内部标识符j

   ④将i挂在j.mq上。

发送原语可描述如下:


3.接收原语

1)调用接收原语receive(b)

  2)从自己的消息缓冲队列mq中摘下第一个消息缓冲区i

  3)将其中的数据复制到以b为首址的指定消息接收区内。