欢迎来到天天文库
浏览记录
ID:47557244
大小:57.58 KB
页数:13页
时间:2019-09-19
《P、V原语地模拟实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用标准文档P、V原语的模拟实现一、实验目的本课题实习的目的是,加深对进程概念及进程管理各部分内容的理解;熟悉进程管理中主要数据结构的设计及进程调度算法,进程控制机构、同步结构、通迅机构的实施。要求设计一个允许n个进程并发运行的进程管理模拟糸统。该糸统包括有简单的进程控制、同步及通迅机构,其进程调度算法可任意选择。每个进程用一个PCB表示,其内容可根据具体情况设置。各进程之间应有一定的同步关糸。糸统在运行过程中应能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及糸统的管理过程。1)理解信号量相关理论;2)掌握记录型信号量结
2、构;3)掌握P、V原语实现机制。二、实验要求1)输入给定代码;2)进行功能测试并得出正确结果。3)分析P和V函数功能模块;4)在实验报告中画出P和V函数流程图;5)撰写实验报告。三、实验内容本实验针对操作系统中信号量相关理论进行实验,要求实验者输入实验指导书提供的代码并进行测试。代码主要模拟信号量的P操作和V操作。1)信号量信号量也称为信号锁,主要应用于进程间的同步和互斥,在用于互斥时,通常作为资源锁。信号量通常通过两个原子操作P和V来访问。P操作使信号量的值+1,V操作使信号量的值-1。2)记录型信号量记录型信号量采用了“让权等待”的策略,存
3、在多个进程等待访问同一临界资源的情况,所以记录型信号量需要一个等待链表来存放等待该信号量的进程控制块或进程号。在本实验中,使用记录型信号量。文案大全实用标准文档四、功能测试文案大全实用标准文档五.#include文案大全实用标准文档#defineTRUE1#defineFALSE0#defineMAXPRI100#defineNIL-1struct{intid;charstatus;intnextwr;intpriority;}pcb[1];struct{intvalue;intfirstwr;}sem[2];charsave
4、area[1][3],addr;inti,s1,s2,seed,exe=NIL;init(){intj;for(j=0;j<1;j++){pcb[j].id=j;pcb[j].status='r';pcb[j].nextwr=NIL;文案大全实用标准文档printf("process%dpriority?",j+1);scanf("%d",&i);pcb[j].priority=i;}sem[0].value=1;sem[0].firstwr=NIL;sem[1].value=1;sem[1].firstwr=NIL;for(i=1;i<1
5、;i++)for(j=0;j<3;j++)savearea[i][j]='0';}floatrandom(){intm;if(seed<0)m=-seed;elsem=seed;seed=(24151*seed+11839)%64416;return(m/12565.0);}timeint(charaddr){floatx;x=random();if((x<0.11)&&(exe==0))return(FALSE);if((x<0.66)&&(exe==1))return(FALSE);if((x<1.0)&&(exe==2))return(F
6、ALSE);savearea[exe][0]=i;文案大全实用标准文档savearea[exe][1]=addr;pcb[exe].status='t';printf("Timessilceinterrupt'process%denterintoready.",exe+1);exe=NIL;return(TRUE);}find(){intj,pd=NIL,w=MAXPRI;for(j=0;j<1;j++)if(pcb[j].status=='r')if(pcb[j].priority7、}if(pd==NIL)for(j=0;j<1;j++)if(pcb[j].status=='t')if(pcb[j].priority8、f(pcb[pd].priority
7、}if(pd==NIL)for(j=0;j<1;j++)if(pcb[j].status=='t')if(pcb[j].priority8、f(pcb[pd].priority
8、f(pcb[pd].priority
此文档下载收益归作者所有