《2022年2022年进程通信[借 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年进程通信[借 .pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-1-操作系统 银行家算法课程设计报告姓名:学号:班级:专业:指导教师:时间:2010.7.1 信息工程学院名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 8 页 -2-目录一、课程设计的目的.3 二、课程设计内容及要求.3 三、课程设计思路.3 四、进程间通信源代码.5 五、运行与测试:(截图).7 六、课程设计的总结.7 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 8 页 -3-一、课程设计的目的操作系统是计算机系统的核心系统软件,它负责控制和管理整个系统的资源并组织用户协调使用这些资源,使计算机高效的工作。操作系统课程设计是操作系统 理论课的必要补充,是复
2、习和检验所学课程的重要手段,本课程设计的目的是综合应用学生所学知识,通过实验环节,加深学生对操作系统基本原理和工作过程的理解,提高学生独立分析问题、解决问题的能力,增强学生的动手能力。此次课程设计是在linux的环境下编译完成的,利用 linux下的 gcc 编译器编译 C语言,能够使同学们更加了解linux的运行机制,并且学熟练使用linux系统。二、课程设计内容及要求学习 System V 的进程间通信机制,使用消息缓冲通信实现多个客户进程和一个服务进程之间的通信。具体要求:1.创建多个客户进程,以及一个服务进程。2.创建两个公共消息队列,一个用于客户进程向服务进程发送请求,一个用于服务进
3、程向客户进程返回结果。3.客户进程发送请求,并阻塞接收结果,服务进程接收请求并完成服务后返回结果给相应的客户进程。系统要求最少设置三个客户进程,一个服务进程,客户进程将请求(四则运算)提交给服务进程,服务进程从消息队列1 接收后进行服务(进行运算,求得四则运算表达式的结果),将结果发送到消息队列2,客户进程从消息队列2 接收属于自己的结果。三、课程设计思路首先,复习课程教材中关于消息缓冲通信的内容。消息缓冲所涉及的系统调用如下:名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 8 页 -4-1建立消息队列#include#include#include int msqid=msgg
4、et(key_t key,int msgflg);其中,key 是消息队列的关键字,是通信双方约定的一个长整型数。key 有以下两个取值:(1)IPC_PRIVATE:表示建立一个私有消息队列。(2)正整数:表示建立一个公共的消息队列。Msgflg是消息队列的创建方式,有两个取值,这两个值可以单独使用,也可用“或”位运算符连起来使用:(1)IPC_CREAT:创建一个 key 所代表的新消息队列,类似于create。(2)IPC_EXCL:同 IPC_CREAT 同时使用时,若 key 对应消息队列存在,则返回-1,并将错误指示变量errno 置 EEXIST,单独使用时无意义。此外,还可以设
5、置消息队列的存取权限。调用该消息队列系统调用时,若key=0,则创建一个消息队列,若key0,在消息队列中查找关键字是key 的消息队列,如果找到,且有权访问,则返回消息队列标识,如果无权访问则出错返回,如果没有找到,且msgflg 含有 IPC_CREAT 标志,则创建一个消息队列,并返回消息队列标识。例如:msqid=msgget(123,0600|IPC_CREAT|IPC_EXCL);注意:这里 0600 表示对该消息队列的存取权限,设置的方式同文件存取权限的设置一致。0600 表示对消息队列的创建者具有读写权限,对同组用户和其他用户无任何权限。2向消息队列发送消息#include i
6、nt msgsnd(int msqid,void*msgp,size_t msgsz,int msgflg);其中,msqid 是消息队列标识,msgp 是指向用户区要发送的消息的指针,msgsz是要发送的消息正文的字节数,msgflg 是同步标志,当发送消息的某个条件不满足时,若msgflg 中的 IPC_NOWAIT 标志未设置(即=0),发送进程阻塞等名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 8 页 -5-待,直到将消息挂入消息队列,若 IPC_NOWAIT 标志已设置,发送进程立即返回。该函数,成功时返回实际发送的字节数,错误时返回-1。3接收消息#include
7、int msgrcv(int msqid,void*msgp,size_t msgsz,long msgtyp,int msgflg);其中,msqid 是消息队列标识,msgp是指向用户接收消息的指针,msgsz是要接收的消息正文的字节数,msgflg是同步标志,当接收消息的某个条件不满足时,若 msgflg 中的 IPC_NOWAIT 标志未设置(即=0),接收进程阻塞等待,直到接收到消息为止,若IPC_NOWAIT 标志已设置,接收进程立即返回。Msgtyp 是要接收的消息类型,msgtyp=0,表示接收消息队列中的第一个消息,若msgtyp0,则接收消息队列中与msgtyp 相同的第一
8、个消息,若msgtyp0,则接收消息队列中类型值小于msgtyp 绝对值且类型值最小的消息。该函数成功时,返回接收消息的正文长度,错误时,返回-1。四、进程间通信源代码1.程序结构程序共有四个组成部分:分别是客户端1,客户端 2,客户端 3,和服务器端。每个客户端负责创建消息队列,有接受队列和发送队列,然后将操作者输入的四则运算放入发送队列发送给服务器,服务器从发送队列接收数据,并且做出相应的解答后将结果放入接受队列,等待客户端接收,客户端接收后将结果显示出来。程序共有以下三个部分:2数据结构其中用到的数据有:struct msgform/定义消息的结构体int msgid1/创建发送队列 i
9、nt msgid2/创建接收队列名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 8 页 -6-3源程序代码3.1 服务进程的代码3.2 客户端代码名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 8 页 -7-五、运行与测试:(截图)1.编译并执行客户端代码截图2.编译并执行服务进程代码截图六、课程设计的总结本次课程设计练习的是在linux环境下的进程通信问题,用创建消息队列的方式进行消息的发送与接收。此次课程设计的中心思想是能够进行进程间的通信交流,并能有效的处理四则运算,当客户端发送进程请求后就处于等待接收状态,并把消息挂在缓冲队列,服务器在一开始处于等待接收状态
10、,当消息队列里面有消息的时候即被唤醒,并且开始接收消息进行四则运算,然后把结果传输给接收名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 8 页 -8-消息队列。在服务器处理的那段时间之中,客户进程一直处于等待接收状态,直到服务器将结果发送到接收消息队列时,客户进程才被唤醒,并接收消息,将结果打印出来。这次课程设计着实遇到了很大的麻烦,由于自己对linux操作系统的不了解,导致了很多时候在代码的操作阶段出现了很多低级错误。起初,即便按课程设计的要求和提示,复习了教程上有关通信的内容,并知道了程序的大概框架,也没有任何的思路。通过查找网络资源和请教老师同学,在一遍一遍的调试和修改中使得程序的雏形出现了,即在客户进程和服务进程中定义了消息的结构,并创建相应的队列,调用消息接收和发送函数来实现消息在进程与缓冲队列之间的交互。通过这次课程设计,虽然做的不是一个大型系统,但是我依然学到了很多的实用性知识。除了更深的了解这个算法,而且对 C语言进行了复习,及时巩固了以前的知识,所以在此感谢在此过程中帮助过我的老师和同学。名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 8 页 -