操作系统课设报告编程模拟多进程共享临界资源.doc

操作系统课设报告编程模拟多进程共享临界资源.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实习题目 指导教师 职 称 学生姓名 学 号 日 期 实习题目 指导教师 职 称 学生姓名 学 号 日 期 1.设计任务 课题四 编程模拟多进程共享临界资源 2.设计的功能和目标 要求产生至少3个进程: 1、两个进程模拟需要进入临界区的用户进程,当需要进入临界区时,显示:“进程x请求进入临界区…”,同时向管理进程提出申请;在临界区中等待一段随机时间,并显示:“进程x正在临界区…”;当时间结束,显示:“进程x退出临界区…”,同时向管理进程提出退出申请。 2、一个进程作为原语级管理进程,接受其他进程的临界区进入请求:如果允许进入,则设置相应变量,然后返回;如果不允许进入,则进入循环等待,直到允许为止; 3、对临界区的访问应遵循空闲让进、忙则等待、有限等待、让权等待的准则。 4、进程间通信可以采用信号、消息传递、管道或网络通信方式。 3.设计的思想、方法和技术(含数据结构、算法) 3.1 设计思想和设计函数功能: 3.1.1 总体构思: 软件主要是由两部分组成:用户进程和管理进程; 管理进程:控制设置相应的临界区,实现对临界区的访问应遵循空闲让进、忙则等待、有限等待、让权等待的准则。 用户进程:循环的随机申请进入临界区,进入临界区执行一段时间,再申请结束。 3.1.2 具体功能: 用户进程随机的进入cpu执行,先向在信息队列中写入自己的信息(已经约定好的信息类型)然后给管理进程发送信号(告知管理进程申请进入临界区并已在消息队列中写入自己的信息)。然后循环的读取管理进程给用户进程发回的回馈信息(针对当前临界区的状态)——允许进入、临界区忙等待。如果允许进入则在临界区执行一段时间以后,申请退出,给管理进程发退出的信号,管理进程再给用户进程发送回馈信息。取会指导回馈信息以后则这次过程结束,进入新的过程。 管理进程接收申请进入的信号,在消息队列中取下申请进入队列的用户进程的信息,针对当前临界区状态,写一个回馈信息放入消息队列。 3.2 包含数据结构: 其中包含两个重要的数据结构: 临界区: Struct crform { Int sem; //临界区的信号量值sem Int head; //临界区等待队列的头,指向的是最先到的进程 Int tail; //临界区等待队列的尾,指向的是进入等待队列的进程 Int duilie[20]; //存放的是等待的进程的信息,以便唤醒 Int waittime[20]; //也就是这回申请临界区的生存周期,实现有限等待 }cr; Cr.sem=1; //初始临界区信号量必须为一,因为只允许一个进程进入临界区 Cr.head=0; //初始时指向等待队列的第一个单元 Cr.tail=0; 消息队列: Struct msgform { Long msgtype; //消息的类型,在取消息队列时用于区分哪些是该取的信息 Int mtext; //信息的内容,在这里是申请|退出进程的信息 }; 3.3 主要用到的技术: 3.3.1 进程创建和控制:fork()系统调用: 包含头文件unistd.h 关键的语句: int x,y; while((x=fork())==-1);//创建子进程1 if(x==0) { //子进程1执行程序段 } else { while((y=fork())==-1); if(y==0) { //子进程2执行程序段 } else { //父进程执行程序段 } } 3.3.2软中断:kill()和signal()系统调用 包含头文件:sys/types.h和signal.h Kill(pid,signalname) 发送信号给pid号为pid的进程,中断类型为signalname 3.3.3 消息队列:系统调用msgget()、msgsnd()、msgrev()、msgctl() 包含头文件:sys/msg.h 消息队列:系统调用msgget()、msgsnd()、msgrev()、msgctl() 3.4 流程图: 图1 用户进程流程图 图2 管理进程 图3 申请进入临界区处理子进程 图4 申请退出处理子程序 4.设计的主要代码及注释 void into()//申请进入临界区 { msgqid=msgget(MSGKEY,0777|IPC_CREAT); sem--;//一旦申请进入临界区就得减1 msgrcv(msgqid,msg,4,1,0);//接收

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档