操作系统课程设计基于Linux的实现进程的信号量互斥申请.docxVIP

操作系统课程设计基于Linux的实现进程的信号量互斥申请.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统课程设计 说明书 学 院、 系: 软件学院 专 业: 软件开发与测试 学 生 名: 学号: 设 计 题 目: 基于Linux的实现进程的信号量互斥申请 起 迄 日 期: 指 导 教 师: 2012年1月7日 1需求分析 基于Linux的进程同步与通信的模拟实现需耍完成以下功能: (1) ?创建进程:手动创建儿个进程,或者随即创建儿个进程,都在界面上完成;要求 包插进程的名称(不能重复)、执行时间和屮请资源的等待时间等。在同一时刻可能有多个 进行在内存申请某资源,即可以输入多个进程的资源申请。 (2) .3类临界资源的管理,包括申请以及分配等。分别通过信号量实现或者管程实现。 (3) .银行家算法,判断是否可以进行资源的分配。 基于以上的功能,可以使用户选择操作,模拟临界资源的管理和银行家算法。 目的:实现临界资源的管理及死锁的避免。 2 总体设计 进程同步与模拟实现系统分为4个模块:输入输出,进程对资源的随机申请及分配, 临界资源管理,银行家算法避免死锁。 输入输出:包括系统运行所需要的进程的名称,执行时问,申请资源的等待时I可,进程对 资源的需要量等信息以及系统所要显示出的进程的创建信息,资源的分配信息,进行执行信 息,进行动态申请资源信息等。 进程对资源的随机申请及分配:根据所输入的进程、资源、以及进程对资源的最大申请情 况,随机产生进程当前对资源的申请,输出相应的分配信息与进程执行信息并调用银行家算 法对进程的资源申请进行判断。 临界资源的管理:创建相应个数的进程,完成进程的并发执行,使用互斥信号量使各进程 互斥的进入各自的临界区对资源进行申请,进程执行完毕后,互斥的对资源进行恢复。 银行家算法避免死锁:对当前进程对资源的申请利用银行家算法进行判断,看系统分配后 是否处于安全状态,若处于安全状态,则将资源分配给进程,并输出分配信息,否则对不予 以分配。 详细设计 在该系统中我主要实现了银行家算法中随机分配的模块,该模块中主耍使用了数组的 数据结构. 3.1随机分配算法: 3. 1. 1首先:定义了一个结构体y其中放置了 Max数组中申请资源量大于0的资源。(包 括进程下标,资源下标,进程是否对资源屮请过的信号量,该资源是否已经被屮请完 的信号量)。再定义一个数组col[]o用來存放第m个进程中过滤(去除申请资源量为 0)的资源数。 3. 1.2 (1)遍历Max数组对二维Y数组和一维col数组进行初始化:生成一个去除了 申请量为0的新的二维结构体数组(记录有进程下标和资源下标)。col中放置新的Y 数组对应的信息(每个进程中请资源数)。 \开始/ 和可以进行遍历,筛选并记录各进程对所有资源的最大申请量大于0的元素信息3.2 数据结构 struct zy { char type; //资源的名称 int n; //资源的数量 }; struct jc { char name; //名称 int runtime; //执行时间 int wait time; 〃等待时间 int typenum; //进程所申请的资源数 struct zy r[5]; 〃所申请资源的信息 }; struct y { int flag; //标志,0:未出现过的资源,(进程a申请资源B 1个资源B 1个)1: 该资源已申请 int index; 〃资源下标 int tr; //进程的下标 int flagl; //I:该资源不能再申请;0:该资源还可以申请 } Y[10][NUM]; struct jc JC[5]; struct zy ZY[NUM]; //每种资源的名称及数量 3. 3核心代码 //对整个二维数组Y进行遍历 int judge_pro(int m, int p[10]) { int i, j; for (i = 0; i m; i卄){ for (j = 0; j p[i]; j++) { if (!(Y[i][j].flagl)) { return 1; } //只要有1个进程的1种资源未申请完,则返回1 return 0; //仅当所有进程对资源的申请都达到所需量时才返回0 } //对二维数组中的某一行(对应某种进程)进行遍历 int panduanl(int tr, int p[10]) { int i; for (i = 0; i p[tr]; i++) { if (!(Y[tr][i].flagl)) return 0; //该进程只要有1个资源未申请完,则返回0 return 1; //仅当该进程所有资源都申请完时返冋1 //产生随机进程和进程所申请的资源,并调用银行家算法 int ra() { int col[10]; int i, j, k = 0, w = 0, m = 0, n二0, q =

文档评论(0)

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

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

1亿VIP精品文档

相关文档