操作系统—河海大学文天学院

上传人:kms****20 文档编号:37354249 上传时间:2018-04-15 格式:DOC 页数:31 大小:127.50KB
返回 下载 相关 举报
操作系统—河海大学文天学院_第1页
第1页 / 共31页
操作系统—河海大学文天学院_第2页
第2页 / 共31页
操作系统—河海大学文天学院_第3页
第3页 / 共31页
操作系统—河海大学文天学院_第4页
第4页 / 共31页
操作系统—河海大学文天学院_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《操作系统—河海大学文天学院》由会员分享,可在线阅读,更多相关《操作系统—河海大学文天学院(31页珍藏版)》请在金锄头文库上搜索。

1、河海大学文天学院河海大学文天学院操作系操作系统课统课程程设计设计姓姓 名名: 胡 德 伟班班 级级: 08 级计算机科学与技术四班指导老师指导老师: 邓老师时时 间间: 2010.12.10实验一实验一 进程调度进程调度一、实验目的一、实验目的通过一个简单的进程调度模拟程序的实现,加深对进程调度算法,进程切 换的理解。 二、实验内容二、实验内容采用动态优先数的方法,编写一进程调度程序模拟程序。模拟程序只进行 相应的调度模拟操作,不需要实际程序。提示: (1) 假定系统有五个进程,每一个进程用一个进程控制块 PCB 来代表,进 程控制块的格式为: 进程名 指针 要求运行时间 优先数 状态 其中,

2、进程名作为进程的标识,假设五个进程的进程名分别为 P1,P2,P3,P4,P5。 指针按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程 控制块的首地址,最后一个进程中的指针为“0” 。 要求运行时间假设进程需要运行的单位时间数。 优先数赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态可假设有两种状态, “就绪”状态和“结束”状态。五个进程的初始状 态都为“就绪” ,用“R”表示,当一个进程运行结束后,它的状态为“结束” , 用“E”表示。 (2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它 的“优先数”和“要求运行时间” 。 (3) 为了调度方便,把五

3、个进程按给定的优先数从大到小连成队列。用一 单元指出队首进程,用指针指出队列的连接情况。 (4) 处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程 每运行一次优先数就减“1” 。由于本实习是模拟处理器调度,所以,对被选中 的进程并不实际的启动运行,而是执行: 优先数-1 要求运行时间-1 来模拟进程的一次运行。 提醒注意的是:在实际的系统中,当一个进程被选中运行时,必须恢复进 程的现场,让它占有处理器运行,直到出现等待事件或运行结束。在这里省去 了这些工作。(5) 进程运行一次后,若要求运行时间?0,则再将它加入队列(按优先数 大小插入,且置队首标志) ;若要求运行时间=0,则把它

4、的状态修改成“结束” (E) ,且退出队列。 (6) 若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤, 直到所有进程都成为“结束”状态。 (7) 在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进 程的进程名以及运行一次后进程队列的变化。 (8) 为五个进程任意确定一组“优先数”和“要求运行时间” ,启动所设计 的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动 态变化过程。三进程调度处理过程三进程调度处理过程否 是是 否 计时中断中断总处理过程计时中断处理当前进程 是否用完修改 g_needReschedule 为 trueg_needResche

5、dule执行调度算法选择下一 个进程切换到下一个进程(此进程可以是原来的进 程也可以是调度算法选择的进程)四源程序分析四源程序分析/*08 计算机 学号:08031421*/操作系统,进程调度 用链表实现#include #include #include #include typedef struct pcb/进程的 PCB 块char id;/进程名char state;/进程的状态int prior;/进程的优先级int time;/进程的时间pcb *next;/指向结构体的指针pcb,*plist;void insert(plist if(head-next=NULL) /如果 he

6、ad 指针为空,则应该插入到对头head-next=p;p-next=NULL; elses=head;r=s-next;while(r!=NULLr=r-next; /找到新节点 q 的插入位置,循环后,q 节点应该处于结点 s,r 之间,/如果 r 为空,则未尾结点p-next=r;s-next=p;pcb *m;/coutnext)p=p-next; coutidpriortimestate;coutnext;if(m-time=0)coutidnext=head-next-next; /将该结点从链表中删除elsehead-next=m-next;/对头结点进行重新插入insert(h

7、ead,m);coutp-idp-priorp-time;p-state=r; /初始的转台全部为 rinsert(head,p); /将结点插入到合理的位置void yunxing(plist coutnext!=NULL)m=head-next;coutidprior=m-prior-1;m-time=m-time-1;if(m-time=0) /如果头结点已经运行完,将状态改为 ehead-next-state=e;showjincheng(head);void main()clock_t start,finish;double shijian;int a; /进程数int b; /是否

8、确认do /确认用户的选择,如果输入错误,可以重新输入do /控制进程的数目在合理的范围内system(“cls“);couta; if(a=10|a=10)cout=10|ab;if(b=0)system(“cls“);couta; while (b=0);coutnext=NULL;create(head,a);/通过插入的方法构造链表cout #include /队列#include /获取系统的时间using namespace std; typedef struct /页面的结构体信息内存分配和回收机制请求页机制缓存和刷新机制地址映射机制交 换 机 制int id; /页面的 id

9、号int staytime; /在内存中的停留的时间int unusualtime; /多久未被使用的时间Cpage;deque queue; /可以直接的使用队列的方法deque interPage; /内存中的页面deque exterPage; /外存中页面int xianzaiweizhi;int lacknum2 =0,0; /缺失的页面数int getRandNum(int range) /返回0,range)范围内的整数return int(rand()%range); /根据 srand 函数得到随机数void InitDevice() /初始化运行队列 按照 25% 50%

10、25%的标准生成srand(int(time(NULL); /通过调用系统时间,产生随机数,并强制的转化成整型int yehao = getRandNum(320); /随机选择第一条指令queue.push_back(yehao); /将其插入队列if(yehao 320) /如果队列中的个数大于 320,则把多余的队列进行出栈的操作queue.pop_back();void InitMemoryQueue() /初始化页面xianzaiweizhi = 0;exterPage.clear(); /对外存的页面进行清除interPage.clear(); /对内存的页面进行清除for(int

11、 i=0;iinterPagemax.staytime) /找到在内存中停留时间时间最长max = i;return max; /返回停留时间最长的最大值int lru() /LRU 算法中查找最久未使用的页面int max = 0;for(int j=0;jinterPagemax.unusualtime) /找到最久未被使用的算法max = j;return max; /返回未被使用的最大值bool Manage(int count,int PageId) /当内存已经满了需要按照算法调度int status = yemianzhuantai(PageId,false); /获取执行页面在

12、外存中的索引地址if(status = -1)return false;int targetStatus = 0;if(count = 0)targetStatus = fifo(); /根据 fifo 算法内存中需要交换的位置else if(count = 1)targetStatus = lru(); /根据 lru 算法内存中需要交换的位置interPagetargetStatus.staytime = 0; /将要交换的内存/页面的停留时间和最近多久未被使用的时间进行初始化为 0interPagetargetStatus.unusualtime = 0; swap(exterPages

13、tatus,interPagetargetStatus); /内外层中的页面进行交换return true;void run(int count)while(xianzaiweizhi flag;if(flag=1) /先进先出的算法调度coutflag; while (flag=1); /满足此条件,重新做里面的内容system(“PAUSE“); 实验三实验三 文件系统设计文件系统设计一、实验目的一、实验目的通过一个简单多用户文件系统的设计 , 加深理解文件系统的内部功能及内 部实现。二、实验内容二、实验内容为 Linux 系统设计一个简单的二级文件系统。要求做到以下几点 :(1) 可以实

14、现下列几条命令 ( 至少 4 条) ;login 用户登录 dir 列文件目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件(2) 列目录时要列出文件名、物理地址、保护码和文件长度 ; (3) 源文件可以进行读写保护。三程序流程图三程序流程图否是开始选择操作?创建文件打开文件读文件写文件删除文件注销结束4部分源程序部分源程序1. Read 函数函数函数功能:从系统文件上读取文件数据到文件缓冲区函数参数:文件指针,缓冲区地址,需要读出文件的字节数。函数返回值:若读取成功,返回实际读取的文件数。Static int Reand( struct File*file, void*buf ,ulong_t numBytes)Struct PFAT_file*pfatfile=(struct PFAT_file*) file-fsData;Struct PFAT_Instance*instance=(struct PAFT_Instance*)File-mountpoint-fsDat

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

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