ImageVerifierCode 换一换
格式:DOCX , 页数:57 ,大小:74.93KB ,
资源ID:22417424      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22417424.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统实验指导书文档格式.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统实验指导书文档格式.docx

1、PCB 存放中断(阻塞,挂起)时的各寄存器值,当该进程重新执行时,可以从断点处恢复。主要包括: a) 通用寄存器; b) 指令计数器; c) 程序状态字 PSW; d) 用户栈指针。(3) 进程调度信息 a) 进程状态; b) 进程优先级(用于描述优先使用 cpu 级别的一个整数,高优先级的进程先得到cpu,通常情况下,优先值越小优先级越高); c) 其它信息(等待时间、总执行时间等); d) 事件(等待原因)。(4) 进程控制信息 a) 程序和数据的地址(程序在内存和外存中的首址); b) 进程同步和通信机制; c) 资源列表(进程除 CPU 以外的所有资源); d) 链接指针(进程队列中指

2、向下一个进程的 PCB 首址)。2) 进程创建流程 (1) 申请空白 PCB 为新进程申请获得唯一的数字标识符,并从 PCB 集合中索取一个空白 PCB。如果无空白PCB,可以创建一个新的 PCB。在本实验中,每次动态创建 PCB。 (2) 为新进程分配资源 为新进程分配内存空间和栈空间。 (3) 初始化进程控制块 a) 初始化标识信息; b) 初始化处理机状态信息; c) 初始化处理机控制信息。 (4) 将新进程插入就绪队列P1P2P3P4P5P6P7P8P9P10P11P12 3) 进程树 图 1-1 进程树 进程树用于描述进程家族关系,如图 1-1 中可以看出,进程 P1 创建了进程 P

3、2、P3、P4、P5,而 P2 又创建了 P6、P7、P8 。在进程创建过程中,需要对每一个新增加的进程加入到进程树中,有了清晰的父子关系,可以使资源继承或进程删除等操作变得很方便。4) 进程总链它是一个 PCB 链表,每一个新创建的进程必须把其 PCB 放入总链中,该总链可以对破坏的进程树进行修复,也方便 PCB 查找。四、程序清单1.basic.h 文件#ifndef basic_h#includestring.hstdlib.h#define basic_hchar *errormsg256;/process control blockstruct pcb int pid;/proces

4、s id int ppid;/parent process id int prio;/priority int state;/state int lasttime;/last execute time int tottime; /totle execute time;/process nodestruct pnode pcb *node; pnode *sub; pnode *brother; pnode *next;/信号量struct semphore char name5; /名称 int count;/计数值 int curpid;/当前进程 id pnode *wlist; /等待链

5、表#define geterror(eno) printf(%sn,errormsgeno)void initerror() errormsg0 = (char *)malloc(20); errormsg0=error command!; errormsg1 = (char *)malloc(20); errormsg1=error parameter!/get a substring in string schar * substr(char *s,int start,int end) char *s1; int len = strlen(s); if(start=len | starte

6、nd) return NULL; s1=(char *)malloc(end-start+2); for(int i=0;i=0) s2=substr(s1,0,x1-1); else s2=s1; ai=atoi(s2); if(c= s1=substr(s1,x1+1,strlen(s1)-1); return a;#endif2、源程序#include basic.hpnode *proot;/system process tree rootpnode *plink;/system process link head/create processint createpc(int *par

7、a) /add your code here pnode *p,*p1,*pp; int pflag; pflag=0; for(p=plink;p;p=p-next) if(p-node-pid = para0) /check if this pid is already existpid %d is already exist!,para0);pid = para1) /find parent pcb pflag=1; pp = p;pflag)parent id %d is not exist!,para1); return -2;/init new pcbp1 = new pnode;

8、p1-node=new pcb;pid = para0;ppid = para1;prio = para2;sub=NULL;next=NULL;brother=NULL;/add to process treeif(!pp-sub) pp-sub=p1;else for(p=pp-sub;p-brother;brother); p-brother=p1;/ add to process linkfor(p=plink;next;next);next=p1;return 0;/show process detailvoid showdetail() pnode *p,*p1; p=plink;

9、 for(;) /print all pcb info%d(prio %d):,p-pid,p-prio); p1 = p-p1;) /print sub pcb%d(prio %d),p1-pid,p1- p1 = p1- p = p-/dont changevoid main() initerror(); short cflag,pflag; char cmdstr32; proot = new pnode; proot-pid=0;ppid=-1;prio=0; plink=proot; cflag=0; pflag=0; printf(cmd: scanf(%s,cmdstr); if

10、(!strcmp(cmdstr,exit) /exit the program break;showdetail) cflag = 1; pflag = 1; showdetail(); else int *para; char *s,*s1; s = strstr(cmdstr,createpc /create process if(s) cflag=1; para = (int *)malloc(3); /getparameter s1 = substr(s,instr(s,()+1,strlen(s)-2); /get param string para=strtoarray(s1);/

11、get parameter createpc(para); pflag=1; cflag) geterror(0); else if(! geterror(1);五、实验步骤输入实验提供的代码后,可以输入 createpc 命令创建进程,输入 showdetail 显示每个进程及其子进程的信息,测试命令解释如下:1) createpc 创建进程命令。 参数: 1、 pid(进程 id) 2 、ppid(父进程 id)3、prio(优先级)。 示例:createpc(1,0,1) 。创建一个进程,其进程号为 1,父进程号为 0,优先级为 1.createpc(2,1,2) 。创建一个进程,其进程

12、号为 2,父进程号为 1,优先级为 2。2) showdetail 显示进程信息命令。3) exit退出命令行。六、思考题 1) 进程创建的核心内容是什么?2) 该设计和实际的操作系统进程创建相比,缺少了哪些步骤?实验二 进程撤销模拟1) 理解进程撤销相关理论;2) 掌握进程撤销流程。本实验针对操作系统中进程撤销相关理论进行实验。要求实验者设计一个程序,该程序可模拟撤销多个进程及其子孙进程。1) 采用动态或静态方法生成一颗进程树(进程数目20);2) 设计进程撤销算法;3) 实现进程撤销函数,采用级联方式撤销;4) 可动态撤销进程;5) 可动态观察进程树的情况;6) 测试程序并得到正确结果。1

13、)进程创建流程(1) 从 PCB 链中找到该进程的 PCB,从中读出该进程的状态;(2) 如果该进程处于执行状态,则终止该进程并置调度标志为真;(3) 若该进程有子孙进程,需要撤销其子孙进程;(4) 释放该进程占有的资源;(5) 从 PCB 链中移出该进程的 PCB。2) 进程子树的删除对于已经创建的进程树(可以参考实验 1 创建进程),在删除的时候,首先需要考虑把该进程及其子孙从整棵树中脱离出来,这样才不会破坏整棵树的完整性。3) 进程总链元素的删除对于进程树种撤销的所有进程,必须在进程总链中进行删除。四、思考题1) 进程撤销的核心内容是什么?2) 进程总链在进程撤销过程中有什么作用?实验三

14、 P、V 原语的模拟实现1) 理解信号量相关理论;2) 掌握记录型信号量结构;3) 掌握 P、V 原语实现机制。本实验针对操作系统中信号量相关理论进行实验,要求实验者输入实验指导书提供的代码并进行测试。代码主要模拟信号量的 P 操作(down)和 V 操作(up)。1) 信号量信号量也称为信号锁,主要应用于进程间的同步和互斥,在用于互斥时,通常作为资源锁。信号量通常通过两个原子操作 dwon(P)和 up(V)来访问。dwon 操作使信号量的值+1,up 操作使信号量的值-1。2) 记录型信号量记录型信号量采用了“让权等待”的策略,存在多个进程等待访问同一临界资源的情况,所以记录型信号量需要一

15、个等待链表来存放等待该信号量的进程控制块或进程号。在本实验中,使用记录型信号量。三、实验要求1) 输入给定代码;2) 进行功能测试并得出正确结果。3) 分析 dwon 和 up 函数功能模块;4) 在实验报告中画出 dwon 和 up 函数流程图;5) 撰写实验报告。semphore sem5; /deinfe 5 semphorespnode * pr20; /define 0-19 total 20 process/down operation void down(char * sname,int pid) int fflag,pflag; semphore *s; fflag=0;5;i

16、+) strcmp(semi.name,sname)/find semaphore by name s=; fflag=1; break; 20;i+) /find pcb by pid if(pri-pid = pid) p1 = pri; pflag=1;fflag) /semaphore is not exist the semphore %s is not exist!,sname); return; pflag) /pid is not exist the process %d,pid); s-count-; /semaphore! s value -1 if(s-coun

17、t=0) /this pcb get the semaphorecurpid = p1-pid; else wlist) /the link is not NULL, add the pcb to the last for(p=s-wlist; p- else /this pcb is the first pcb be added to the down list s-wlist=p1;/up operation void up(char *sname) int fflag=0;strcmp(semi.name,sname) /find the semaphore by name fflag=

18、1; break; if(fflag) /find it semi.count+; if(semi.wlist) /there are processes in the down list semi.curpid = semi.wlist- semi.wlist = semi.wlist- else /show semphore infomation void showdetail() int i; pnode *p; if(semi.count %s :,semi.name);/*/ void init() /init semaphore strcat(sem0.name,s0 strcat(sem1.name,s1 strcat(sem2.name,s2 strcat(sem3.name,s3 strcat(sem4.name,s4 semi.wlist=NULL; semi.count=1;/init process pri = new pnode; pri-pid=i;void main() char *s,*s1,*s2; init();) cflag=0; scanf() /exit the program )

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1