基于Linux的进程同步与通信的模拟实现课程设计报告.docVIP

基于Linux的进程同步与通信的模拟实现课程设计报告.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Linux的进程同步与通信的模拟实现课程设计报告

中北大学 操作系统课程设计 说 明 书 ? 学 院、系: 专 业: 学 生 姓 名: 学 号: 设 计 题 目: 基于Linux的进程同步与通信的模拟实现 起 迄 日 期: 指 导 教 师: ? ? ?2013 年 1月 16 日 需求分析 该软件需要利用银行家算法判断系统是否处于安全状态,同时根据银行家算法得出的安全序列进行临界资源的分配。软件设计的目的是要对输入的进程进行安全性判断模拟分配资源。 首先先创建进程:手动创建几个进程,都在界面上完成;其中包括每个进程已分配的资源、最大需求资源、系统剩余资源以及每个进程的执行时间。实例中创建5个进程。 其次采用银行家算法,判断是否可以进行资源的分配。 最后,按照银行家算法得出的安全序列,对临界资源进行分配。 总体设计 软件由两个模块组成,分别是银行家算法判断安全序列模块以及临界资源分配模块。 2.1银行家算法模块 本模块中有如下功能:初始化allocation矩阵,初始化max矩阵,初始化available矩阵,初始化need矩阵,初始化finished矩阵,初始化进程执行时间,用银行家算法判断是否安全,计算系统总资源数目,输出系统总资源数目。 其中设置了多个线性单链表结构存储矩阵中的数据,包括已分配allocation矩阵、最大需求量max矩阵、可用资源数available矩阵、需要资源数need矩阵、安全路径path矩阵、进程安全标示finish矩阵、进程运行时间ti矩阵。 银行家算法: 设进程i提出请求Request[n],则银行家算法按如下规则进行判断。 (1)如果Request[n]Need[i,n],则报错返回。 (2)如果Request[n]Available,则进程i进入等待资源状态,返回。 (3)假设进程i的申请已获批准,于是修改系统状态: Available=Available-Request Allocation=Allocation+Request Need=Need-Request (4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。 安全性检查 (1)设置两个工作向量Work=Available;Finish[M]=False (2)从进程集合中找到一个满足下述条件的进程, Finish [i]=False Need=Work 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 Work=Work+Allocation Finish=True GO TO 2 (4)如所有的进程Finish[M]=true,则表示安全;否则系统不安全。 2.2临界资源分配模块 这个模块有如下功能:创建线程、模拟为线程分配资源。在原来的基础上设置了两个可变长数组altemp、ntemp,分别存放当前进程的已分配资源和需要的资源量。 通过比较每类资源的需要资源量和系统可用的资源量之间大小关系,判断系统是否能给进程分配资源。如果分配成功,则利用sleep函数模拟线程执行,然后释放线程利用的系统资源,执行完毕。如果分配失败,则调用sleep函数等待一段时间,再进行循环判断,直到判断出资源量能够满足进程的要求。 运行时,首先先新建一个终端,然后用gcc命令编译和链接,运行程序, 编译命令为:gcc –o process process.c –lpthread 如下 图1 创建三类资源,五个进程,并写出每个进程的已分配资源、最大需求量、系统现在可用的资源、进程执行时间。如下。 图2(已分配资源) 图3(最大需求量) 图4(系统可用资源) 图5(进程执行时间) 输出系统所有资源量,用银行家算法判断是否安全,如果安全得出安全序列,分配资源如下。 图6(执行过程) 图7(执行过程) 程序流程图 图 8 3.详细设计 我负责的是银行家算法判断是否安全,以下是我做的代码。 int main() { flag=0; processtest=0; for(temp=0;tempproNum;temp++) { alloctemp=allochead; needtemp=needhead; finishtemp=finihead; worktemp=workhead; for(i=0;iproNum;i++) { worktemp1=worktemp; if(finishtemp-stat==0) { for(j=0;jsourceTyNum;j++,need

文档评论(0)

huayagonga + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档