操作系统课程设计报告

发布 2022-10-05 12:11:28 阅读 1082

操作系统。

课程设计报告。

2013 - 2014 第二学期

课程名称:操作系统课程设计。

设计题目: 进程通信

姓名。学号。

班级。指导老师。

2014 年 6 月 18 号。

1、设计目的与功能。

一)、设计目的

通过设计和调试一个基于消息的通讯系统,来实现进程之间的直接或间接通讯,使学生对进程间的通讯机制、进程间的同步机制有一个深入的理解。该系统可用于e-mail的设计。

2)、设计功能。

系统调用msgget()创建一消息获取消息的描述符并进行初始化,再调用msgsnd()向指定的消息队列发送一个消息, msgrcv()指定的消息队列中接收指定类型的消息,最后再调用msgctl()来显示或修改消息里的属性。

二、课题内容。

学习system v的进程间通信机制,使用消息缓冲通信实现多个客户进程和一个服务进程之间的通信。具体要求:

1.创建多个客户进程,以及一个服务进程。

2.创建两个公共消息队列,一个用于客户进程向服务进程发送请求,一个用于服务进程向客户进程返回结果。

3.客户进程发送请求,并阻塞接收结果,服务进程接收请求并完成服务后返回结果给相应的客户进程。

三、设计思路。

一)、需求分析。

在linux环境下安装了gcc编译器,还需linux相关的系统调用。

系统调用格式 msgget(key,flag)

该函数使用头文件如下:

#include

#include

#include

key_t key;

int flag;

参数定义:key是用户指定的消息队列的名字;flag是用户设置的标志和访问方式。如 ipc_creat |0400 是否该队列已被创建。无则创建,是则打开;

ipc_excl |0400 是否该队列的创建应是互斥的。

msgqid 是该系统调用返回的描述符,失败则返回-1。

其功能是:创建一个消息,获得一个消息的描述符。核心将搜索消息队列头表,确定是否有指定名字的消息队列。

若无,核心将分配一新的消息队列头,并对它进行初始化,然后给用户返回一个消息队列描述符,否则它只是检查消息队列的许可权便返回。

系统调用格式: msgsnd(msgqid,msgp,size,flag)

该函数使用头文件如下:

#include

#include

#include

参数定义:int msgqid,size,flag;

struct msgbuf * msgp;

其中msgqid是返回消息队列的描述符;msgp是指向用户消息缓冲区的一个结构体指针。缓冲区中包括消息类型和消息正文,即。

long mtype消息类型*/

char mtext消息的文本*/

size指示由msgp指向的数据结构中字符数组的长度;即消息的长度。这个数组的最大值由msg-max( )系统可调用参数来确定。flag规定当核心用尽内部缓冲空间时应执行的动作:

进程是等待,还是立即返回。若在标志flag中未设置ipc_nowait位,则当该消息队列中的字节数超过最大值时,或系统范围的消息数超过某一最大值时,调用msgsnd进程睡眠。若是设置ipc_nowait,则在此情况下,msgsnd立即返回。

对于msgsnd( )核心须完成以下工作:

1)对消息队列的描述符和许可权及消息长度等进行检查。若合法才继续执行,否则返回;

2)核心为消息分配消息数据区。将用户消息缓冲区中的消息正文,拷贝到消息数据区;

3)分配消息首部,并将它链入消息队列的末尾。在消息首部中须填写消息类型、消息大小和指向消息数据区的指针等数据;

4)修改消息队列头中的数据,如队列中的消息数、字节总数等。最后,唤醒等待消息的进程。

系统调用格式: msgrcv(msgqid,msgp,size,type,flag)

本函数使用的头文件如下:

#include

#include

#include

参数定义:int msgrcv(msgqid,msgp,size,type,flag)

int msgqid,size,flag;

struct msgbuf *msgp;

long type;

其中,msgqid,msgp,size,flag与msgsnd中的对应参数相似,type是规定要读的消息类型,flag规定倘若该队列无消息,核心应做的操作。如此时设置了ipc_nowait标志,则立即返回,若在flag中设置了ms_noerror,且所接收的消息大于size,则核心截断所接收的消息。

对于msgrcv系统调用,核心须完成下述工作:

1)对消息队列的描述符和许可权等进行检查。若合法,就往下执行;否则返回;

2)根据type的不同分成三种情况处理:

type=0,接收该队列的第一个消息,并将它返回给调用者;

type为正整数,接收类型type的第一个消息;

type为负整数,接收小于等于type绝对值的最低类型的第一个消息。

3)当所返回消息大小等于或小于用户的请求时,核心便将消息正文拷贝到用户区,并从消息队列中删除此消息,然后唤醒睡眠的发送进程。但如果消息长度比用户要求的大时,则做出错返回。

二)、数据结构和模块说明(功能与框图)

每个消息队列都有一个msqid_ds结构与其关联:

struct msgqid_ds

struct ipc_perm

msgp是指向用户消息缓冲区的一个结构体指针。缓冲区中包括消息类型和消息正文。

即。long mtype消息类型*/

char mtext消息的文本*/

void msg_stat(int,struct msqid_ds );自定义显示消息内容*/

获得或设置消息队列属性框图:

获得或设置消息队列属性框图:

4、源**。

#include //系统调用相关头文件。

#include

#include <>

#include<>

void msg_stat(int,struct msqid_ds );自定义显示队列属性函数。

main()

key_t key;

int msgid;

int reval;

struct msgsbuf定义发送消息结构体。

int mtype;

char mtext[1];

}msg_sbuf;

struct msgmbuf定义接收消息结构体。

msg_rbuf;

struct msqid_ds msg_ginfo;

char* msgpath="/root/desktop/linux";

key=ftok(msgpath,'a');

/创建一个消息,创建成功则返回消息描述符,创建失败则返回-1

msgid=msgget(key,ipc_creat | ipc_excl | 00666);

if(msgid==-1) /测试消息创建是否成功。

printf("msg create error");

return;

操作系统课程设计报告

西安郵電大學。院系名称 计算机学院。专业名称 软件工程。班级 1104 学生姓名 赵大伟。学号 8位 04113124 指导教师 舒新峰。设计起止时间 2013.11.10 2013.11.20 1 通过观察 分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中...

操作系统课程设计报告

课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...

操作系统课程设计报告

实验一进程管理。一 实验目的。1 开发一个函数,建立进程控制块和资源控制块结构,并实现相关数据结构的初始化。2 开发一系列操作,由进程调用这些操作,达到控制进程申请或释放各种资源的目的。通过实验理解进程的概念,进程的组成 pcb结构 进程的并发执行和操作系统进行进程管理的相关原语 主要是进程的创建 ...