操作系统课程设计_第1页
操作系统课程设计_第2页
操作系统课程设计_第3页
操作系统课程设计_第4页
操作系统课程设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统课程设计班级:计算机四班学号:0810311208姓名:黄 俊实验一 进程调度一、实验目的通过一个简单的进程调度模拟程序的实现,加深对进程调度算法,进程切换的理解。二、需求分析采用动态优先数的方法,编写一进程调度程序模拟程序。模拟程序只进行相应的调度模拟操作,不需要实际程序。 (1) 假定系统有五个进程,每一个进程用一个进程控制块pcb来代表,进程控制块的格式为:进程名指针要求运行时间优先数状态其中,进程名作为进程的标识,假设五个进程的进程名分别为p1,p2,p3,p4,p5。指针按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。

2、要求运行时间假设进程需要运行的单位时间数。优先数赋予进程的优先数,调度时总是选取优先数大的进程先执行。状态可假设有两种状态,“就绪”状态和“结束”状态。五个进程的初始状态都为“就绪”,用“r”表示,当一个进程运行结束后,它的状态为“结束”,用“e”表示。(2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行时间”。(3) 为了调度方便,把五个进程按给定的优先数从大到小连成队列。用一单元指出队首进程,用指针指出队列的连接情况。(4) 处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优先数就减“1”。由于本实习是模拟处理器调度,所以,对被

3、选中的进程并不实际的启动运行,而是执行:优先数-1要求运行时间-1来模拟进程的一次运行。提醒注意的是:在实际的系统中,当一个进程被选中运行时,必须恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行结束。在这里省去了这些工作。(5) 进程运行一次后,若要求运行时间?0,则再将它加入队列(按优先数大小插入,且置队首标志);若要求运行时间=0,则把它的状态修改成“结束”(e),且退出队列。(6) 若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结束”状态。(7) 在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的

4、变化。(8) 为五个进程任意确定一组“优先数”和“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。三、概要设计1程序概要设计图2程序源代码jingchendiaodu.cpp #include stdio.h #include #include #define getpch(type) (type*)malloc(sizeof(type) #define null 0 struct pcb /* 定义进程控制块pcb */ char name10; char state; int super; int ntime; int rtime;

5、 struct pcb* link; *ready=null,*p; typedef struct pcb pcb; sort() /* 建立对进程进行优先级排列函数*/ pcb *first, *second; int insert=0; if(ready=null)|(p-super)(ready-super) /*优先级最大者,插入队首*/ p-link=ready; ready=p; else /* 进程比较优先级,插入适当的位置中*/ first=ready; second=first-link; while(second!=null) if(p-super)(second-supe

6、r) /*若插入进程比当前进程优先数大,*/ /*插入到当前进程前面*/ p-link=second; first-link=p; second=null; insert=1; else /* 插入进程优先数最低,则插入到队尾*/ first=first-link; second=second-link; if(insert=0) first-link=p; input() /* 建立进程控制块函数*/ int i,num; clrscr(); /*清屏*/ printf(n 请输入进程号?); scanf(%d,&num); for(i=0;iname); printf(n 输入进程优先数:

7、); scanf(%d,&p-super); printf(n 输入进程运行时间:); scanf(%d,&p-ntime); printf(n); p-rtime=0;p-state=w; p-link=null; sort(); /* 调用sort函数*/ int space() int l=0; pcb* pr=ready; while(pr!=null) l+; pr=pr-link; return(l); disp(pcb * pr) /*建立进程显示函数,用于显示当前进程*/ printf(n qname t state t super t ndtime t runtime n);

8、 printf(|%st,pr-name); printf(|%ct,pr-state); printf(|%dt,pr-super); printf(|%dt,pr-ntime); printf(|%dt,pr-rtime); printf(n); check() /* 建立进程查看函数 */ pcb* pr; printf(n * 当前正在运行的进程是:%s,p-name); /*显示当前运行进程*/ disp(p); pr=ready; printf(n *当前就绪队列状态为:n); /*显示就绪队列状态*/ while(pr!=null) disp(pr); pr=pr-link; d

9、estroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ printf(n 进程 %s 已完成.n,p-name); free(p); running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ (p-rtime)+; if(p-rtime=p-ntime) destroy(); /* 调用destroy函数*/ else (p-super)-; p-state=w; sort(); /*调用sort函数*/ main() /*主函数*/ int len,h=0; char ch; input(); len=space(); while(len!=0)&(ready

10、!=null) ch=getchar(); h+; printf(n the execute number:%d n,h); p=ready; ready=p-link; p-link=null; p-state=r; check(); running(); printf(n 按任一键继续.); ch=getchar(); printf(nn 进程已经完成.n); ch=getchar(); 实验二 存储管理一、实验目的存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法模拟设计 , 了解虚拟存储技术的特点 , 掌握

11、请求页式存储管理的页面置换算法。二、需求分析通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成 : 50% 的指令是顺序执行的; 25% 的指令是均匀分布在前地址部分; 25% 的指令是均匀分布在后地址部分。具体的实施方法是 :在 0,319 的指令地址之间随机选取一起点 m;顺序执行一条指令;在前地址0,m+1中随机选取一条指令并执行 , 该指令的地址为 m; 顺序执行一条指令 , 其地址为 m+1;在后地址 m+2,319 中随机选取一条指令并执行 ;重复上述步骤 , 直到执行 320 次指令。(1) 将指令序列变换成为页地址流设:页面大小为 1k;用户内存容量为 4 页

12、到 32 页 ;用户虚存容量为 32k 。在用户虚存中 , 按每 k 存放 10 条指令排列虚存地址 , 即 320 条指令在虚存中的存放方式为 :第 0 条 第 9 条指令为第 0 页 ( 对应虚存地址为 0,9);第 10 条 第 19 条指令为第 1 页 ( 对应虚存地址为 10,19 ) ;第 310 条 第 319 条指令为第 31 页 ( 对应虚存地址为 310,319) 。按以上方式 , 用户指令可组成 32 页。(2) 计算并输出下述各种算法在不同内存容量下的命中率。 先进先出的算法 (fifo); 最近最久未使用算法 (lru);命中率 = 1 - 页面失效次数页地址流长度在

13、本实验中 , 页地址流长度为 320, 页面失效次数为每次访问相应指令时 , 该指令所对应的页不在内存的次数。三、概要设计1概要设计流程图开 始生成地址流输入算法号s1s4形成地址页号用户内存空间msize=2msize32 opt()fifo()lru()lfu()msize加1s=? 是否用其他算法继续结 束ny1234yn提示出错,重新输入2程序源代码produce_addstream.h#ifndef produce_addstream_h#define produce_addstream_h#include#include#include#include#include using

14、namespace std;#define random(x) (rand()%x)#define max_length 320struct produceint num; /指令序号int zhiling; /指令地址int virtualpage; /指令虚页号produce *next;struct produce*creatlist();void insert(struct produce *first,struct produce *s); /插入一个节点(尾插法)void print(struct produce *first); /打印函数int max(vectorvector

15、 ,int );struct produce*creatlist()srand(int)time(0);struct produce*first=new produce;first-next=null;int m=0,m1=0;/*int yanzheng20=7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1;for (int i=0;inum=i*4+0;s0-zhiling=yanzhengi*4+0;s0-virtualpage=s0-zhiling;insert(first,s0);struct produce *s1;s1=new produce;s1-

16、num=i*4+1;s1-zhiling=yanzhengi*4+1;s1-virtualpage=s1-zhiling;insert(first,s1);struct produce *s2;s2=new produce;s2-num=i*4+2;s2-zhiling=yanzhengi*4+2;s2-virtualpage=s2-zhiling;insert(first,s2);struct produce *s3;s3=new produce;s3-num=i*4+3;s3-zhiling=yanzhengi*4+3;s3-virtualpage=s3-zhiling;insert(fi

17、rst,s3);/*/*for (int i=0;inum=i*4+0;s0-zhiling=m+1;s0-virtualpage=s0-zhiling/10;insert(first,s0);m1=random(m+1);struct produce *s1;s1=new produce;s1-num=i*4+1;s1-zhiling=m1;s1-virtualpage=s1-zhiling/10;insert(first,s1);struct produce *s2;s2=new produce;s2-num=i*4+2;s2-zhiling=m1+1;s2-virtualpage=s2-

18、zhiling/10;insert(first,s2);struct produce *s3;s3=new produce;s3-num=i*4+3;s3-zhiling=random(max_length-m1-2)+m1+2;s3-virtualpage=s3-zhiling/10;insert(first,s3);/*/return first;void insert(struct produce *first,struct produce *s)struct produce *r=first;struct produce *p;while(r)p=r;r=r-next;p-next=s

19、;p=s;p-next=null;void print(struct produce *first) /打印函数struct produce *p;p =first-next;cout随机产生的指令的信息如下endl;cout指令序号 指令地址 指令虚页号endl;while (p)coutnumtzhilingsetw(14)virtualpagenext;int max(vectorvector page,int maxpage)int a=0,position=0;for (int i=0;ia)a=pagei1;position=i;return position;#endif先来先出

20、调度算法:fifo.h#ifndef fifo_h#define fifo_hvoid fifo(struct produce *first,int maxpage)vector page(maxpage);/for (int i=0;inext;while (p)pages=p-virtualpage;for(int i=0;imaxpage;i+)if (pagei=-1|count1next;coutfifo调度算法缺页次数 缺页率 命中率endl;coutcount2setw(25)double(count2)/max_lengthsetw(10)1-double(count2)/ma

21、x_lengthendl;#endif fifo_hlru调度算法lru.h#ifndef lru_h#define lru_h#includeusing namespace std;/int max(vectorvector ,int );void lru(struct produce*first,int maxpage)struct produce*p=first-next;vectorvector page2(maxpage, vector(2); int count1=0; /定义内存已经被占用的页数int count2=0; /定义记录缺页次数int equal=0; /定义判断如果

22、当前页数与比较的页数,如果相等则为1,否则为0int place=0; /定义要替换的位置for (int i=0;imaxpage;i+)page2i0=-1;page2i1=0;while (p)if (count1maxpage)for (int i=0;ivirtualpage;count2+;break;else if (page2i0=p-virtualpage)page2i1 =1;count1+;elsefor (int i=0;ivirtualpage)equal=1;place=i;break;if (equal=1)page2place1 =1;equal=0;else

23、place = max(page2,maxpage);page2place1=1;page2place0=p-virtualpage;count2+;p=p-next;coutlru调度算法缺页次数 缺页率 命中率endl;coutcount2setw(24)double(count2)/max_lengthsetw(10)1-double(count2)/max_lengthendl;#endif lru_hopt调度算法opt.h#ifndef opt_h#define opt_h#includeusing namespace std;int search(struct produce*p

24、lace,int position);void opt(struct produce*first,int maxpage)struct produce*p =first-next;vectorvector page3(maxpage, vector(2);int count1=0; /定义内存已被使用的页数int count2=0; /定义缺页次数int current=0; /定义当前工作位置int equal=0; /定义判断如果当前页数与比较的页数,如果相等则为1,否则为0int place=0; /定义要替换的位置for (int i=0;imaxpage;i+)page3i0=-1;

25、page3i1=0;while (p)/cout1111endl;if (count1maxpage)for (int i=0;ivirtualpage;page3i1=search(p,current);count2+;break;else if (page3i0=p-virtualpage)page3i1=search(p,current);count1+;elsefor (int i=0;ivirtualpage)equal=1;place=i;break;if (equal=1)page3place1 =search(p,current);equal=0;elseplace = max(page3,maxpage);page3place1=search(p,current);page3place0=p-virtualpage;count2 +=1;p=p-next;current +=1;coutopt调度算法缺页次数 缺页率 命中率endl;coutcount2setw(25)double(count2)/max_lengthsetw(10)1-double(count2)/max_lengthnext;int current=place-virtualpage;int position1=po

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论