




免费预览已结束,剩余9页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河南城建学院操作系统课程设计报告书设计题目:进程间通信(ipc)消息机制专 业: 计算机科学与技术 指导教师: 班 级: 学 号: 姓 名: 同 组 人: 计算机科学与工程系2010年01月14日前言课程设计是检测学生学习课程效果的重要手段,是训练学生通过所学知识解决实际问题的重要方式,同时也是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。操作系统是一门重要的专业课,是计算机理论和应用的核心基础课程。操作系统课程设计,是一次对多学知识的综合演练,要求学生在操作系统的设计理念、整体机构、模块划分、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。在这次的课程设计中我们选择的题目是进程间通信(ipc)消息机制的设计,实现消息的创建、发送和接收及在sever端创建一个服务函数,从而形成c/s通讯模式。 消息机制是消息通过消息队列的方式进行进程间消息的传递。通过此次课程设计,全面理解消息机制进程间通信方法。实现把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的计算机操作系统的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解的目的。目录一、系统环境.3二、设计目的.3三、总体设计.3消息的创建、接收和发送.4四、功能模块说明54.1数据结构.54.2系统调用函数、参数值及说明.5五、源程序清单及执行结果分析75.1消息的创建、接收和发送.75.2功能扩展.85.3执行结果分析.9六、总结与体会.11七、参考文献.11一、系统环境1.硬件环境: pentium 4 cpu 3.06ghz 3.06ghz, 512mb的内存 物理地址扩展2.软件环境: microsoft windows xpvmware workstation (red hat linux 9)使用c+或者c语言二、设计目的通过课程设计,了解自己在学习中的不足,同时也增强了自己学习的兴趣。学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。这次设计可以帮助我们加深对操作系统的设计理念,编程结构和高级语言程序设计、数据结构的利用、系统的分析、算法的设计,程序调试以及错误处理等过程的理解,同时熟练了编程工具的使用,练习了自己的分析问题和解决问题的能力,练习了自己编程的能力,促进对操作系统课程的认识。认识到操作系统在整个计算机系统中的重要作用。三、总体设计(1)消息的创建、发送和接收使用系统调用msgget(),msgsnd(),msgget(),及msgctl()编制一长度为1k的消息发送和接收的程序。a.为了便于操作和观察结果,用一个程序作为“引子”,先后fork()两个子进程,server和client,进行通信。bserver端建立一个key为75的消息队列,等待其他进程发来的消息。当遇到类型为1的消息,则作为结束信号,取消该队列,并退出server。server每接收到一个消息后显示一句“(server)received”。c.client端使用key为75的消息队列,先后发送类型从10到1的消息,然后退出。最后的一个消息,即是server端需要的结束信号。client每发送一条消息后显示一句“(client)sent”。d.父进程在server和client均退出后结束。(2)功能扩展:在sever端创建一个服务函数,从而形成c/s通讯模式要求server每接收到一次数据后不仅仅显示“(server)received”,而是做一些其它事情,比如读取或查询某个文件等。此功能可由设计者自己定义。在此基础上可以扩展客户端,比如设计一个菜单界面,接收不同的选项,并发送到服务器端,请求对方提供服务。流程图消息的创建、发送和接受四、模块功能说明1.数据结构struct msgform/消息结构long mtype;char mtext1030;/文本长度 msg;2.系统调用函数、参数值及说明(1)fork() 创建一个新进程。 用法:int fork() 其中返回int取值意义如下: 0:创建子进程,从子进程返回的id值 ;0:从父进程返回的子进程id值;-1:创建失败(2) msgget(key,flag) 获得一个消息的描述符。头文件:#include#include#include参数定义:int msgget(key,flag)key_tkeyintflag;语法格式:msgqid=msgget(key,flag);(3)msgsnd(id,msgp,size,flag) 送一消息 参数定义:int msgrcv(id,msgp,size,type,flag)int id,size,type,flag;structmsgbuf*msgq;structmsgbuf long mtype schar mtext;语法格式:count=msgrcv(id,msgp,size,type,flag);其中:id:消息描述符;msgp:用来存放欲接收消息的拥护数据结构的地址;size:msgp中数据数组的大小;type:用户要读的消息类型:type=0:接收该队列的第一个消息;type0:接收类型type的第一个消息;type0:接收小于或等于type绝对值的最低类型的第一个消息。flag:规定倘若该队列无消息,核心应当做什么事,如果此时设置了ipc_nowait标志,则立即返回,若在flag中设置了msg_noerror,且所接收的消息大小大于size,核心截断所接受的消息。count:返回消息正文的字节数。(4)msgrcv(id,msgp,size,type,flag) 接受一消息头文件:#include#include#include参数说明:int msgrcv(id,msgp,size,type,flag)int id,size,type,flag;structmsgbuf*msgq;structmsgbuf long mtype schar mtext;语法格式:count=msgrcv(id,msgp,size,type,flag);其中:id:消息描述符;msgp:用来存放欲接收消息的拥护数据结构的地址;size:msgp中数据数组的大小;type:用户要读的消息类型:type=0:接收该队列的第一个消息;type0:接收类型type的第一个消息;type0:接收小于或等于type绝对值的最低类型的第一个消息。flag:规定倘若该队列无消息,核心应当做什么事,如果此时设置了ipc_nowait标志,则立即返回,若在flag中设置了msg_noerror,且所接收的消息大小大于size,核心截断所接受的消息。count:返回消息正文的字节数。(5)msgctl(id,cmd,buf) 查询一个消息描述符的状态,设置它的状态及删除一个消息描述符。头文件:#include#include#include参数定义:int msgctl(id,cmd,buf)int id,cmd;structmsqiq_ds*buf;其中:函数调用成功时返回0,调用不成功时返回-1。id:用来识别该消息的描述符;cmd:规定命令的类型。ipc_stat:将与id相关联的消息队列首标读入buf。ipc_set:为这个消息序列设置有效的用户和小组标识及操作允许权和字节的数量。ipc_rmid:删除id的消息队列。buf:是含有控制参数或查询结果的用户数据结构的地址。五、源程序清单与执行结果分析1.消息的创建、发送和接受#include#include#include#include#define msgkey175/定义关键词msgkeystruct msgform/消息结构long mtype;char mtext1030;/文本长度 msg;int msgqid,i;void client()int i,msgqid=msgget(msgkey,0777); /建立消息队列for(i=10;i=1;i-) msg.mtype=i;printf(client)sentn);msgsnd(msgqid,&msg,1024,0); /发送消息msg入msgid消息队列exit(0);void server()msgqid=msgget(msgkey,0777|ipc_creat);/由关键字获得消息队列do msgrcv(msgqid,&msg,1030,0,0);/从msgqid队列接收消息msgprintf(server)receivedn); while(msg.mtype!=1);/消息类型为1时,释放队列msgctl(msgqid,ipc_rmid,0);exit(0);main()while(i=fork()=-1);if(!i)server();while(i=fork()=-1);if(!i)client();wait(0);wait(0);exit(0);2.功能扩展#include#include#include#include#include#include#include#include#define msgkey 75 /定义关键词msgkey#define shmkey 75 /定义共享区关键词struct msgform long mtype; char mtext1030; msg;int msgqid,i;void msclient() int i; char buffer1024; printf(please input you want to send message:); fgets(buffer,1024,stdin); strcpy(msg.mtext,buffer); msgqid=msgget(msgkey,0777); for(i=10;i=1;i-) msg.mtype=i; msgsnd(msgqid,&msg,1024,0); printf(client)sentn); exit(0);void msserver() msgqid=msgget(msgkey,0777|ipc_creat); /由关键字获得消息队列 do msgrcv(msgqid,&msg,1030,0,0); printf(server receive the message is :%s,msg.mtext); file *fp; fp=fopen(log.txt,a+); fwrite(msg.mtext,1024,1,fp); fclose(fp); while (msg.mtype!=1); msgctl(msgqid,ipc_rmid,0); exit(0);int main() while(i=fork()=-1); if(!i)msserver(); while(i=fork()=-1); if(!i)msclient(); wait(0); wait(0);exit(0);3.执行结果分析1).消息的创建、发送和接收的实验结果(client)sent(client)sent(client)sent(client)sent(client)sent(client)sent(client)sent(client)sent(client)sent(client)sent(server)received(server)received(server)received(server)received(server)received(server)received(server)received(server)received(server)received(server)received结果分析:主进程里分别创建两个子进程,第一个进程为服务(接收)进程,第二个进程为发送进程。程序运行时由服务进程创建一个消息队列,接收发送进程向队列中发送的消息(程序中发送进程一次向消息队列中发送类型从10到1的消息)。发送进程和服务进程分别发送和接收了10条消息,与预期设想一致。消息的传送和控制并不保证完全同步,当一个程序不在激活状态的时候,它完全可能继续睡眠,造成了上面的现象,在多次发送消息后才接收。2)功能扩展 ,运行结果及分析 please input you want to sent message: whoami (client)sent(server) receive the message is : whoami (client)sent(client)sent(client)sent(client)sent(client)sent(client)sent(server) receive the message is : whoami (server) receive the message is : whoami (server) receive the message is : whoami (server) receive the message is : whoami 结果分析::运行的结果和预想的完全一样。试验结果分析:主进程里分别创建两个子进程,第一个进程为服务(接收)进程,第二个进程为发送进程。程序运行时由服务进程创建一个消息队列,开始为空,当发送进程(用户控制)输入需要发送的消息时,接收进程接收发送进程向队列中发送的消息并输出。六、总结与体会课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,操作系统一直都是计算机设计中最重要的领域,它管理和控制着计算机的软硬件资源,合理组织和安排计算机的工作流程,为用户提供良好的工作环境接口 。因此作为二十一世纪的大学来说掌握操作系统的开发技术是十分重要的。经过一星期的上机实验学习我们学到了很多东西,使我对又多了进一步的了解和认识,在课程设计过程中我们遇到了很多的困难,但是我们去图书馆查阅和翻读了很多资料来加强操作系统方面的知识,同时在老师的帮助下使得设计能够进行下去,最后做出了令人满意的结果在此次的课程设计中我学到了很多在课堂上学不到的知识,在课堂上我们只是了解和记住了一些系统调用函数(例如msgget(),msgsnd(),msgget(),及msgctl():)的定义和使用方法,但是在实际操作中我们学到了这些函数的调用和它们在系统中所特有的方法,明白了怎样来对进程间的通信进行管理以及进程间是怎样进行通信的。怎样把用户的id等读入和读出与msgsqid相关的消息队列中,主要运用的算法来实现对进程的读入和读出,这样的去实现这样的调换。回顾起此次操作系统课程设计,我感慨颇多。的确,从理论到实践,在整整一星期的日子里,可以说是苦多于甜,但是我们从中学到很多很多的东西,同时 不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合伙合同协议书
- 2024-2025学年新教材高中历史 第一单元 古代文明的产生与发展 第2课 古代世界的帝国与文明的交流(1)教学说课稿 新人教版必修《中外历史纲要(下)》
- 第2课 事半功倍有技巧-特殊输入 说课稿 -2024-2025学年辽师大版(2015)信息技术七年级上册
- 中医考试题库及答案软件
- 河南省青桐鸣2025-2026学年高二上学期9月大联考历史试卷(含答案)
- 商场电商平台合作及数据共享合同
- 绿色建筑项目结算付款与环保协议
- 媒体机构新员工入职内容创作与版权归属合同
- 股权激励计划实施与员工股权转让全面合作协议
- 担保公司业务合规管理合同
- 时文语法填空-电影篇 《731》 《长安的荔枝》 《戏台》
- 主题一 2. 设计节电方案(课件) 综合实践活动教科版五年级上册
- 生产成本控制及预算管理表格模板
- 2025年家庭健康管理师考试模拟题及答案
- 山东省青岛市即墨区实验学校2025-2026学年九年级上学期开学考试英语试题(含答案)
- 砂石骨料加工管理办法
- 西师大版数学六年级上册 第一单元测试卷(A)(含解析)
- 人形机器人-价值5万亿美元的全球市场 Humanoids A $5 Trillion Global Market
- 好好说话暖人心课件
- 部队新闻培训课件
- 2025年国企中层干部竞聘笔试题及答案
评论
0/150
提交评论