基于Linux的实现进程的信号量互斥申请—课程设计说明书

上传人:aa****6 文档编号:29219723 上传时间:2018-01-22 格式:DOC 页数:12 大小:594.50KB
返回 下载 相关 举报
基于Linux的实现进程的信号量互斥申请—课程设计说明书_第1页
第1页 / 共12页
基于Linux的实现进程的信号量互斥申请—课程设计说明书_第2页
第2页 / 共12页
基于Linux的实现进程的信号量互斥申请—课程设计说明书_第3页
第3页 / 共12页
基于Linux的实现进程的信号量互斥申请—课程设计说明书_第4页
第4页 / 共12页
基于Linux的实现进程的信号量互斥申请—课程设计说明书_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《基于Linux的实现进程的信号量互斥申请—课程设计说明书》由会员分享,可在线阅读,更多相关《基于Linux的实现进程的信号量互斥申请—课程设计说明书(12页珍藏版)》请在金锄头文库上搜索。

1、中北大学操作系统课程设计说 明 书学 院 、 系 : 软件学院专 业 : 软件工程学 生 姓 名:学 号:设 计 题 目 : 基于 Linux 的实现进程的信号量互斥申请起 迄 日 期 :指 导 教 师 :12013 年 11 月 6 日1 需求分析基于 Linux 的进程同步与通信的模拟实现需要完成以下功能:(1)创建进程:手动创建几个进程,或者随即创建几个进程,都在界面上完成;要求包括进程的名称(不能重复) 、执行时间和申请资源的等待时间等。在同一时刻可能有多个进行在内存申请某资源,即可以输入多个进程的资源申请。(2)3 类临界资源的管理,包括申请以及分配等。分别通过信号量实现或者管程实现

2、。(3)银行家算法,判断是否可以进行资源的分配。基于以上的功能,可以使用户选择操作,模拟临界资源的管理和银行家算法。目的:实现临界资源的管理及死锁的避免。2 总体设计进程同步与模拟实现系统分为 4 个模块:输入输出,进程对资源的随机申请及分配,临界资源管理,银行家算法避免死锁。输入输出:包括系统运行所需要的进程的名称,执行时间,申请资源的等待时间,进程对资源的需要量等信息以及系统所要显示出的进程的创建信息,资源的分配信息,进行执行信息,进行动态申请资源信息等。进程对资源的随机申请及分配:根据所输入的进程、资源、以及进程对资源的最大申请情况,随机产生进程当前对资源的申请,输出相应的分配信息与进程

3、执行信息并调用银行家算法对进程的资源申请进行判断。临界资源的管理:创建相应个数的进程,完成进程的并发执行,使用互斥信号量使各进程互斥的进入各自的临界区对资源进行申请,进程执行完毕后,互斥的对资源进行恢复。银行家算法避免死锁:对当前进程对资源的申请利用银行家算法进行判断,看系统分配后是否处于安全状态,若处于安全状态,则将资源分配给进程,并输出分配信息,否则对不予以分配。3详细设计2在该系统中我主要实现了银行家算法中随机分配的模块,该模块中主要使用了数组的数据结构.3.1 随机分配算法:3.1.1 首先:定义了一个结构体 y 其中放置了 Max 数组中申请资源量大于 0 的资源。(包括进程下标,资

4、源下标,进程是否对资源申请过的信号量,该资源是否已经被申请完的信号量) 。再定义一个数组 col。用来存放第 m 个进程中过滤(去除申请资源量为 0)的资源数。3.1.2 (1)遍历 Max 数组对二维 Y 数组和一维 col 数组进行初始化:生成一个去除了申请量为 0 的新的二维结构体数组(记录有进程下标和资源下标) 。col 中放置新的Y 数组对应的信息(每个进程申请资源数) 。产生随机进程 x该进程没有执行完毕否产生新随机资源否产生随机 Request 量该进程未生成完所需随机资源数本次循环中未申请过,资源可用,进程对此资源存在申请量调用银行家算法处理进程/资源未执行完毕开始3还可以进行

5、遍历,筛选并记录各进程对所有资源的最大申请量大于 0 的元素信息 3.2数据结构struct zy char type; /资源的名称int n; /资源的数量;struct jc char name; /名称int runtime; /执行时间int waittime; /等待时间int typenum; /进程所申请的资源数struct zy r5; /所申请资源的信息;struct y int flag; /标志,0:未出现过的资源, (进程 a 申请资源 B 1 个资源 B 1 个)1:该资源已申请int index; /资源下标int tr; /进程的下标int flag1; /1:

6、该资源不能再申请;0:该资源还可以申请 Y10NUM;struct jc JC5;struct zy ZYNUM; /每种资源的名称及数量3.3 核心代码/对整个二维数组 Y 进行遍历int judge_pro(int m, int p10) 结束释放该进程使用的资源4int i, j;for (i = 0; i m; i+) for (j = 0; j pi; j+) if (!(Yij.flag1) return 1; /只要有 1 个进程的 1 种资源未申请完,则返回 1return 0; /仅当所有进程对资源的申请都达到所需量时才返回 0/对二维数组中的某一行(对应某种进程)进行遍历i

7、nt panduan1(int tr, int p10) int i;for (i = 0; i ptr; i+) if (!(Ytri.flag1)return 0; /该进程只要有 1 个资源未申请完,则返回 0return 1; /仅当该进程所有资源都申请完时返回 1/产生随机进程和进程所申请的资源,并调用银行家算法int ra() int col10;int i, j, k = 0, w = 0, m = 0, n = 0, q = 0; /k 记录最大需求矩阵中数目不为 0 的元素个数printf(n);if (u = 0 | a = 0) printf(请先输入信息!n);retu

8、rn 0;/对 Max 数组进行遍历,筛选并记录各进程对所有资源的最大申请量大于 0 的元5素信息for (i = 0; i u; i+) for (j = 0; j a; j+) if (Maxij) Ymn.index = j; /index 记录资源下标Ymn.tr = i; /tr 记录进程下标Ymn.flag = 0; /flag=1:所记录的资源已申请过,flag=0:所记录的资源尚未申请Ymn.flag1 = 0; /flag1=1:进程对该资源的申请已达到所需量,flag=0:还未达到所需量n+;colm = n; /数组 col 记录二维数组 Y 的每一行的列数n = 0;

9、/对 n 进行恢复,以便下次循环m+;/只要有资源未申请完就执行循环while (judge_pro(m, col) int _one = 0;int tr;/若该进程所有资源都申请完,则执行循环do tr = rand() % m; while (panduan1(tr, col); /printf(%c 进程申请n, JCYtr0.tr.name);int x = coltr;/若有资源申请完,则使 x 减 16for (i = 0; i coltr; i+) /处理函数.if (Ytri.flag1)x-;/用 x 保证循环次数,使该进程随机产生对各资源的申请量for (i = 0; i

10、 x; i+) /该进程对当前资源do j = rand() % (coltr); /j 表示 Y的第 tr 行的资源下标while (_one = j) j = rand() % (coltr); /j 表示 Y的第 tr 行的资源下标_one = j; while (Ytrj.flag /*flag=0;flag1=0 代表当前资源既没申请过也没申请完flag=1;flag1=0 代表当前资源已申请过,但没申请完flag=0;flag1=1 代表当前资源没申请过,但申请完(不存在这种可能)flag=1;flag1=1 代表当前资源已申请过,同时申请完*/Ytrj.flag = 1; /改进

11、程的当前资源标志为已申请过printf(%c 资源, ZYYtrj.index.type);w = 17+ rand()% (MaxtrYtrj.index- AllocationtrYtrj.index);printf(%d 个, w);RequestYtr0.trYtrj.index = w; /将申请的资源信息赋给 Request 数组printf(n);request(Ytr0.tr, coltr, tr); /调用银行家算法if (panduan1(tr, col) printf(进程%c 已执行完毕!, JCYtr0.tr.name);/所有进程执行完成后,对资源数目进行恢复if

12、(!(judge_pro(m, col) for (i = 0; i a; i+) Allocationji = 0;Needji = Maxji - Allocationji;return 0;3.4 运行结果891011124.心得体会经过这次的操作系统课程设计,让我经历了一次有意义的项目开发过程,让我了解了团队合作的重要性,起初我们只是在不停的各干各的,发现根本不可能完成预期的任务,后来我们坐下来讨论了系统的功能,然后各司其职,发现效果真的不一样,虽然在这两周的时间里我们做了很多,中间也遇到了一些问题,比如说临界资源管理模块和银行家模块怎样结合起来,起初是将两个交叉起来,可是效果不是很好,最后还是决定将它们分开,慢慢地其他问题也同样得到了解决,这就是团队合作的力量,这个系统需要完善的内容还有很多,我们以后还会在一起讨论完善并改进,在此过程中,我也发现了编程是需要绝对的耐心与细心的,不然会造成一些难以修改的错误,导致整个项目进展出现问题。这对我们真的是一次很好的锻炼。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号