当前位置:文档之家› 西北工业大学_操作系统_实验七_

西北工业大学_操作系统_实验七_

西北工业大学《操作系统》实验报告
目录
《操作系统》实验报告 (1)
一基础知识 (3)
1. 消息 (3)
2.Unix操作系统多路复用消息 (3)
二编程实现消息的创建、发送和接收 (3)
1. 编写程序 (4)
2. 编译运行 (5)
三思考题 (6)
1. 单独执行client或server 有什么结果? (6)
2. 执行一个server程序,多次执行client有什么结果? (7)
3. 消息机制与管道通信的区别 (7)
参考资料 (7)
一基础知识
1.消息
消息(message)是一个格式化的可变长的信息单元。

消息机制允许由一个进程给其它任意的进程发送一个消息。

当一个进程收到多个消息时,可将它们排成一个消息队列。

消息使用二种重要的数据结构:一是消息首部,其中记录了一些与消息有关的信息,如消息数据的字节数;二个消息队列头表,其每一表项是作为一个消息队列的消息头,记录了消息队列的有关信息。

1、消息机制的数据结构
(1)消息首部:记录一些与消息有关的信息,如消息的类型、大小、指向消息数据区的指针、消息队列的链接指针等。

(2)消息队列头表:其每一项作为一个消息队列的消息头,记录了消息队列的有关信息如指向消息队列中第一个消息和指向最后一个消息的指针、队列中消息的数目、队列中消息数据的总字节数、队列所允许消息数据的最大字节总数,还有最近一次执行发送操作的进程标识符和时间、最近一次执行接收操作的进程标识符和时间等。

2、消息队列的描述符
UNIX中,每一个消息队列都有一个称为关键字(key)的名字,是由用户指定的;消息队列有一消息队列描述符,其作用与用户文件描述符一样,也是为了方便用户和系统对消息队列的访问
2.Unix操作系统多路复用消息
在客户-服务员模型中,一个服务员往往对应多个客户。

这时我们可以利用消息的类型参量,让多个进程把消息放入同一个队列中,以便Unix消息队列能够多路复用。

我们只要把type置为1,以表示消息是从客户流向服务员的。

如果客户把它的进程号作为消息的一部分传递,那么服务员只要把客户进程号作为其消息类型,把它的消息发送给客户进程。

每个客户进程都把msgrcv的参数msgtyp 置为其进程号。

二编程实现消息的创建、发送和接收
消息的创建、发送和接收。

使用系统调用msgget( ),msgsnd( ),msgrev( ),及msgctl( )编制一长度为256Bytes的消息发送和接收的程序,将自己的进程号传递给对方,并输出至屏幕。

1.编写程序client.c
server.c
2.编译运行
编译后执行./server.out & ./client.out
三思考题
1.单独执行client或server 有什么结果?执行client
执行server
2.执行一个server程序,多次执行client有什么结果?
执行一个server,多次执行client,client每次执行一次,server就接收一次,并将消息显示。

3.消息机制与管道通信的区别
管道通信:指用于连接一个读进程和一个写进程的文件,成为pipe文件。

向管道提供输入的进程成为写进程,以字符流的形式将大量的数据送入管道,而接收管道输出的进程(读进程)可从管道中接收数据。

可以传送大量的数据。

消息机制:进程之间的数据交换以消息为单位,程序员利用系统的通信原语实现通信。

参考资料
《FreeBSD使用手册》
《实验七》
/viewarticle.php?id=49529 FreeBSD系统编程-红联Linux系统门户
/link?url=cHgaVpKxXzLO5ZQlkzSN6kT10SN-ZTk3ukhqHLYq8gnpcHqse3U mNqoOkhFt6pR_m4X_6uWm61-676VlRzg4EOQHFdN8mK1dBKc2J640JG_Freebsd操作系统消息机制_百度文库。

相关主题