操作系统实验指导书71769.doc

上传人:博****1 文档编号:549475006 上传时间:2023-03-02 格式:DOC 页数:13 大小:95.01KB
返回 下载 相关 举报
操作系统实验指导书71769.doc_第1页
第1页 / 共13页
操作系统实验指导书71769.doc_第2页
第2页 / 共13页
操作系统实验指导书71769.doc_第3页
第3页 / 共13页
操作系统实验指导书71769.doc_第4页
第4页 / 共13页
操作系统实验指导书71769.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《操作系统实验指导书71769.doc》由会员分享,可在线阅读,更多相关《操作系统实验指导书71769.doc(13页珍藏版)》请在金锄头文库上搜索。

1、目 录实验一 进程调度1 实验二 分区式存储管理4实验三 虚拟存储管理8实验四 文件管理11操作系统实验11实验一 进程调度实验性质:设计建议学时实验目的:通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。预习内容:阅读教材计算机操作系统第二章和第三章,掌握进程管理及调度相关概念和原理。基本实验内容:设计程序模拟进程的轮转法调度过程。假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。程序要求如下:

2、1).输出系统中进程的调度次序;2).计算CPU利用率。实现提示:用C语言实现提示:1) 程序中进程可用PCB表示,其类型描述如下: struct PCB_type char name ; /进程名int state ; /进程状态 2表示“执行”状态 1表示“就绪”状态 0表示“阻塞”状态 int cpu_time ; /运行需要的CPU时间(需运行的时间片个数) 2) 设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。 队列类型描述如下: struct QueueNode struct PCB_type PCB; St

3、ruct QueueNode *next;并设全程量:struct QueueNode *ready_head=NULL, /ready队列队首指针*ready_tail=NULL , /ready队列队尾指针*blocked_head=NULL, /blocked队列队首指针*blocked_tail=NULL; /blocked队列队尾指针3)设计子程序: start_state(); /读入假设的数据,设置系统初始状态dispath(); /模拟调度 calculate(); /计算CPU利用率实验要求:1) 上机前认真使用C语言编写好程序,采用Turbo C作为编译环境;2) 上机时独

4、立调试程序3) 根据具体实验要求,填写好实验报告(包括思想、源程序、实例运行结果)。测试用数据: n=2 m=3 t=5 ready_head blocked_headdispath()算法流程图:unuse_cpu+x+x=tblocked队首进程入ready队列队尾;x=0beginuse_cpu=0x=0unuse_cpu=0ready队列不空或blocked队列不空ready队列不空p 取ready队首元素p-PCB.state置“运行”输出p-PCB.namep-PCB.cpu_time-use_cpu+p-PCB.cpu_time0p入ready队列队尾释放pend /*use_c

5、pu中记录CPU 运行时间 /*unuse_cpu中记录CPU空闲时间 否 是是 否 是 否 是 是否是操作系统实验实验二 分区式存储管理实验性质:设计建议学时:实验目的:通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。预习内容:阅读教材计算机操作系统第四章,掌握存储器管理相关概念和原理。实验内容:设计程序模拟内存的动态分区法存储管理。内存空闲区使用自由链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收时假定不做与相邻空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用64K。在t1时间之后,有作业A、B、C、D分别请求8K、16K、64K、

6、124K的内存空间;在t2时间之后,作业C完成;在t3时间之后,作业E请求50K的内存空间;在t4时间之后,作业D完成。要求编程序分别输出t1、t2、t3、t4时刻内存的空闲区的状态。实现提示(C语言):1 程序中自由链队列的结点类型可描述如下: struct freelinkint len, address; /* len为分区长度 /* address为分区起始地址 struct freelink *next; 内存占用区用链表描述,其结点类型描述如下: struct busylinkchar name; /* 作业或进程名 name=S 表示OS占用int len , address;s

7、truct busylink *next; 并设全程量:struct freelink *free_head=NULL; /自由链队列(带头结点)队首指针 struct busylink *busy_head=NULL, /占用区队列队(带头结点)首指针 *busy_tail=NULL; /占用区队列队尾指针2.设计子函数: void start(void); /* 设置系统初始状态*/ struct freelink * p; struct busylink *q; free_head=(struct freelink*)malloc(sizeof(struct freelink); fre

8、e_head-next=NULL; / 创建自由链头结点busy_head=busy_tail=(struct busylink*)malloc(sizeof(struct busylink); busy_head-next=NULL; / 创建占用链头结点 p=( struct freelink *)malloc(sizeof(struct freelink); p-address=64; p-len=640-64; (OS占用了64K) p-next=NULL; free_head-next=p; q=( struct busylink *)malloc(sizeof(struct bus

9、ylink); q-name=S; /* S表示操作系统占用 */ q-len=64; q-address=0; q-next=NULL; busy_head-next=q; busy_tail=q; void requireMemo(char name, int require); /*模拟内存分配*/ void freeMemo(char name); /* 模拟内存回收*/ void past(int time); /* 模拟系统过了time 时间*/ void printlink(); /* 输出内存空闲情况(自由链的结点) */ 3 设计主函数:main() start(); pas

10、t(t1); requireMemo(A,8); requireMemo(B,16); requireMemo(C,64); requireMemo(D,124); printlink(); past(t2); freeMemo(C); printlink(); past(t3); requireMemo(E,50); printlink(); freeMemo(D ); printlink();实验要求:4) 上机前认真使用C语言编写好程序,采用Turbo C作为编译环境;5) 上机时独立调试程序requireMemo(char name, int require)流程图如下:beginfr

11、ee_head-next-len=requireprintf(“Cant allocate”)endp=(struct busylink*)malloc();p-name=name;p-address=free_head-next-address;p-len=require; p-next=NULLbusy_tail-next=p;busy_tail=p;w=free_head-next;free_head-next=w-next;w-len=requirew-address=w-address+require;w-len=w-len-require;u=free_head;v=free_head-next;(v!=NULL)&v-lenw-lenu=vv=v-nextu-next=ww-next=vfree(w)endbusy-head=pbusy_tail=p 否

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

当前位置:首页 > 生活休闲 > 社会民生

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