您好,欢迎访问三七文档
1《操作系统原理》实验指导书羊四清编写适用专业:计算机科学与技术网络工程湖南人文科技学院计算机科学技术系2008年8月2前言操作系统是计算机的核心和灵魂。操作系统软件的设计对整个计算机的功能和性能起着至关重要的作用,所以此门课也是必不可少的,是面向计算机科学与技术、网络工程、软件工程等大多数计算机专业本科生开设的一门计算机专业课程。操作系统是计算机系统的核心,《操作系统》课程是计算机科学与技术专业的重要必修课。本课程的目的是使学生掌握现代计算机操作系统的基本原理、基本设计方法及实现技术,具有分析现行操作系统和设计、开发实际操作系统的基本能力。操作系统实验是操作系统课程的重要组成部分,属于学科基础实验范畴。作为与相关教学内容配合的实践性教学环节,应在操作系统理论课教学过程中开设。操作系统是计算机科学与技术专业必修的专业基础课程,操作系统实验的作用是:理解操作系统的设计和实现思路,掌握典型算法。基本要求是:理解进程的概念,理解死锁,掌握银行家算法;掌握请求页式存储管理的实现原理及页面置换算法。学生应具有高级语言编程能力、具有数据结构等基础知识。说明:本实验指导书所提供的源程序均已在VC6.0下调试运行过.3目录实验一进程创建模拟.................................................................................................................1实验二进程撤销模拟.................................................................................................................8实验三P、V原语的模拟实现..................................................................................................9实验四带优先级的时间片轮换的进程调度算法的实现.......................................................15实验五银行家算法模拟...........................................................................................................25实验六连续动态内存管理模拟实现.......................................................................................28实验七请求页式存储管理中常用页面置换算法模拟...........................................................30实验八SCAN磁盘调度模拟实现..........................................................................................35实验九UNIX基本操作............................................................................................................361实验一进程创建模拟实验学时:2实验类型:验证实验要求:必修一、实验目的1)理解进程创建相关理论;2)掌握进程创建方法;3)掌握进程相关数据结构。二、实验内容本实验针对操作系统中进程创建相关理论进行实验。要求实验者输入实验指导书提供的代码并进行测试。代码简化了进程创建的多个步骤和内容。进程的树形结构采用广义二叉树的方式进行存储。三、实验原理1)进程控制块为了描述和控制进程的运行,系统为每个进程定义了一个进程控制块(PCB),它是进程实体的一部分,是操作系统管理进程最重要的数据结构。其主要包含四类信息:(1)进程标识符它唯一地标识一个进程。通常包括进程号pid,父进程号ppid和用户号uid。(2)处理机状态处理器的状态通常由处理机的各种寄存器中的内容组成。PCB存放中断(阻塞,挂起)时的各寄存器值,当该进程重新执行时,可以从断点处恢复。主要包括:a)通用寄存器;b)指令计数器;c)程序状态字PSW;d)用户栈指针。(3)进程调度信息a)进程状态;b)进程优先级(用于描述优先使用cpu级别的一个整数,高优先级的进程先得到cpu,通常情况下,优先值越小优先级越高);c)其它信息(等待时间、总执行时间等);d)事件(等待原因)。(4)进程控制信息a)程序和数据的地址(程序在内存和外存中的首址);b)进程同步和通信机制;c)资源列表(进程除CPU以外的所有资源);d)链接指针(进程队列中指向下一个进程的PCB首址)。2)进程创建流程(1)申请空白PCB为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB。如果无空白2PCB,可以创建一个新的PCB。在本实验中,每次动态创建PCB。(2)为新进程分配资源为新进程分配内存空间和栈空间。(3)初始化进程控制块a)初始化标识信息;b)初始化处理机状态信息;c)初始化处理机控制信息。(4)将新进程插入就绪队列3)进程树图1-1进程树进程树用于描述进程家族关系,如图1-1中可以看出,进程P1创建了进程P2、P3、P4、P5,而P2又创建了P6、P7、P8……。在进程创建过程中,需要对每一个新增加的进程加入到进程树中,有了清晰的父子关系,可以使资源继承或进程删除等操作变得很方便。4)进程总链它是一个PCB链表,每一个新创建的进程必须把其PCB放入总链中,该总链可以对破坏的进程树进行修复,也方便PCB查找。四、程序清单1.basic.h文件#ifndefbasic_h#includestdio.h#includestring.h#includestdlib.h#definebasic_hchar*errormsg[256];//processcontrolblockstructpcb{intpid;//processidintppid;//parentprocessidintprio;//priorityintstate;//stateP1P2P3P4P5P6P7P8P9P10P11P123intlasttime;//lastexecutetimeinttottime;//totleexecutetime};//processnodestructpnode{pcb*node;pnode*sub;pnode*brother;pnode*next;};//信号量structsemphore{charname[5];//名称intcount;//计数值intcurpid;//当前进程idpnode*wlist;//等待链表};#definegeterror(eno)printf(%s\n,errormsg[eno])voidiniterror(){errormsg[0]=(char*)malloc(20);errormsg[0]=errorcommand!;errormsg[1]=(char*)malloc(20);errormsg[1]=errorparameter!;}//getasubstringinstringschar*substr(char*s,intstart,intend){char*s1;intlen=strlen(s);if(start0||end=len||startend)returnNULL;s1=(char*)malloc(end-start+2);for(inti=0;i=end-start;i++)s1[i]=s[i+start];s1[i]='\0';returns1;}//findthelocationofcinstringsintinstr(char*s,charc){unsignedi;4for(i=0;istrlen(s);i++)if(s[i]==c)returni;return-1;}//changethestringtoarraydataint*strtoarray(char*s){int*a,count,x1;unsignedinti;charc,*s1,*s2;if(!s){printf(stringcan'tbenull!\n);returnNULL;}count=0;s1=s;for(i=0;istrlen(s1);i++)if(s1[i]==',')count++;count++;a=(int*)malloc(count);c=',';for(i=0;icount;i++){x1=instr(s1,c);if(x1=0)s2=substr(s1,0,x1-1);elses2=s1;a[i]=atoi(s2);if(c==',')s1=substr(s1,x1+1,strlen(s1)-1);}returna;}#endif2、源程序#includebasic.hpnode*proot;//systemprocesstreerootpnode*plink;//systemprocesslinkhead//createprocess5intcreatepc(int*para){//addyourcodeherepnode*p,*p1,*pp;intpflag;pflag=0;for(p=plink;p;p=p-next){if(p-node-pid==para[0])//checkifthispidisalreadyexist{printf(pid%disalreadyexist!\n,para[0]);return-1;}if(p-node-pid==para[1])//findparentpcb{pflag=1;pp=p;}}if(!pflag){printf(parentid%disnotexist!\n,para[1]);return-2;}//initnewpcbp1=newpnode;p1-node=newpcb;p1-node-pid=para[0];p1-node-ppid=para[1];p1-node-prio=para[2];p1-sub=NULL;p1-next=NULL;p1-brother=NULL;//addtoprocesstreeif(!pp-sub)pp-sub=p1;else{for(p=pp-sub;p-brother;p=p-brother);p-brother=p1;}//addtoprocesslinkfor(p=plink;p-next;p=p-next);p-next=p1;6return0;}//showprocessdetailvoidshowdetail(){//addyourcodeherepnode*p,*p1;p=plink;for(;p;)//printallpcbinfo{printf(%d(prio%d):,p-node-pid,p-node-prio);p1=p-sub;for(;p1;)//printsubpcb{printf(%d(prio%d),p1-node-pid,p1-node-prio);p1=p1-brother;}printf(\n);p=p-next;}printf(\n);}//don'tchangevoidmain(){initerror();shortcflag,pflag;charcmdstr[32];proot=newpnode;proot-node=newpcb;proot-node-pid=0;proot-
本文标题:操作系统实验指导书
链接地址:https://www.777doc.com/doc-6512456 .html