鹿山学院-操作系统实训报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

广西科技大学鹿山学院操作系统实训报告系别:计算机工程系专业班级:计软111姓名:卢冰学号:20111607二〇一三年十二月二十日-2-任务一分析操作系统所面临的操作需求【实训目的】使学生理解操作系统所面临的操作需求,掌握操作系统中的进程管理、存储管理、设备管理和文件管理等功能。【实训内容】1.分析操作系统所面临的操作需求;2.熟悉实训环境;3.资料搜集与整理,进行实训的前期准备。【实训步骤】1、分析与设计(详细分析设计,并给出流程图)【思考题】-3-1.操作系统中各模块有怎样的功能?操作系统中的各个模块都有不同的功能:进程管理模块用于分配和控制处理机;设备管理模块主要负责对I/O设备的分配与操纵;文件管理主要负责文件的存取、共享和保护;存储管理主要负责的分配与回收。2.它们之间有怎样的联系?它们之间相互联系,关系密切,无论是设备管理、文件管理,还是储存管理都离不开进程的管理。文件一般都需要存储,而文件的存储需要文件管理进行存储,也需要储存管理来对文件存储分配空间等等。3.针对某一特定的应用环境,如何完善操作系统的功能?要想完善操作系统的功能,必须要合理安排各个功能模块,并利用有效的算法对各个功能进行管理和处理。任务二进程管理【实训目的】掌握临界区的概念及临界区的设计原则;掌握信号量的概念、PV操作的含义以及应用PV操作实现进程的同步与互斥;分析进程争用资源的现象,学习解决进程互斥的方法;掌握进程的状态及状态转换;掌握常用的进程调度算法。【实训内容】1.分析进程的同步与互斥现象,编程实现经典的进程同步问题——生产者消费者问题的模拟;2.编写允许进程并行执行的进程调度程序,在常用的进程(作业)调度算法:先来先服务算法、短作业优先算法、最高响应比优先算法、高优先权优先算法等调度算法中选择一种调度算法进行简单模拟,并输出平均周转时间和平均带权周转时间。【实训步骤】一:生产者消费者问题的模拟-4-1.分析与设计(详细分析设计,并给出流程图)2.程序代码voidProclucer()//生产者函数{while(1){if(count=MAX){printf(缓冲池已满!等待3秒!\n);Sleep(3000);}-5-else{Sleep(1300);WaitForSingleObject(g_empty,INFINITE);//等待信号灯WaitForSingleObject(g_mutex,INFINITE);count++;printf(生产了一个产品!当前产品的总数量是:%d\n,count);g_buffer[in]=count;in=(in+1)%MAX;ReleaseMutex(g_mutex);ReleaseSemaphore(g_full,1,NULL);Sleep(1300);//注意毫秒为单位}}}voidConsumer()//消费者函数{while(1){if(count==0){printf(缓冲池已空!等待2秒!\n);Sleep(2000);}else{Sleep(2000);//该线程释放当前的控制权2000毫秒,让系统调度其他线程WaitForSingleObject(g_full,INFINITE);WaitForSingleObject(g_mutex,INFINITE);-6-A=g_buffer[out];out=(out+1)%MAX;printf(取出了一个产品!当前产品的数量是:%d\n,count);count--;ReleaseMutex(g_mutex);ReleaseSemaphore(g_empty,1,NULL);Sleep(2000);}}}inttStop()//停止函数{intl=getchar();returnl;}intStart()//开始函数{inti,j;g_empty=CreateSemaphore(NULL,MAX,MAX,NULL);g_full=CreateSemaphore(NULL,0,MAX,NULL);g_mutex=CreateMutex(NULL,FALSE,NULL);for(i=0;iMAX;++i){g_buffer[i]=-1;//当值为-1时该项为空}for(i=0;i3;++i){-7-ahThread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Proclucer,NULL,0,NULL);if(ahThread[i]==NULL){return-1;}//用此函数可创建一个线程}//创建消费者线程for(j=0;j4;++j){bhThread[j]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Consumer,NULL,0,NULL);if(bhThread[j]==NULL){return-1;}hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)tStop,NULL,0,NULL);//多线程}intIsStop=tStop();if(IsStop==0)//满足停止条件{CloseHandle(ahThread);CloseHandle(bhThread);CloseHandle(hThread);}}voidmain()//主函数{-8-Start();//开始printf(\n);}3.运行并测试程序,并给出程序运行界面。二:先来先服务算法1.分析与设计(详细分析设计,并给出流程图)-9-2.开始初始化pcb,输入进程信息各进程按先来先到的顺序进入就绪队列结束运行运行进程所需CPU时间撤消该进程就绪队列空?N程序代码voiddeal(fcfs*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,float&zztime,float&dqzztime,intN){intk;for(k=0;k=N-1;k++){if(p[k].arrivetimep[k-1].finishtime)-10-{p[k].starttime=p[k].arrivetime;p[k].finishtime=p[k].arrivetime+p[k].servicetime;}else{p[k].starttime=p[k-1].finishtime;p[k].finishtime=p[k-1].finishtime+p[k].servicetime;}}for(k=0;k=N-1;k++){p[k].zztime=p[k].finishtime-p[k].arrivetime;p[k].dqzztime=p[k].zztime/p[k].servicetime;}}voidFCFS(fcfs*p,intN){floatarrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;sort(p,N);deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);}3.运行并测试程序,并给出程序运行界面。-11-【思考题】针对某一具体应用环境,如何选择合适的调度算法?在批处理系统中,为了照顾为数众多的短作业,应采用短作业优先调度的调度算法;在分时系统中,为了保证系统具有合理的响应时间,应采用轮转法进行调度。非抢占式调度算法,有利于长作业,不利于短作业。【心得体会】通过这次实验了解到生产者-消费者问题是一个经典的进程同步问题,以及在其中使用信号量机制,生产者与消费者问题要求我们设计在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费,而消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区,当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。最简单的调度算法就是先来先服务,也可以称为先进先出(FirstInFirstOut)或严格排队方式。对于进程调度算法来说,先来先服务调度算法就是从就绪队列中选择一个最先进入队列的进程,将CPU分配于它,让其运行。该进程一直运行下去直到完成或由于某事件而-12-被阻塞入放弃CPU。这样,当一个进程进入就绪队列时,它的PCB就链入了该就绪队列的末尾,排队等待分配CPU。一般来说,先来先服务调度算法对于长任务来说比较短任务要好一些。FCFS算法不考虑作业运行时间的长短,仅按作业进入输入井时间的先后进行调度,因此对所有的作业是公平合理的。这次生产者和消费者问题、以及先来先服务调度算法的程序设计,不但加深了我对操作系统中多线程机制的理解和认识,更让我认识到知识的掌握,仅靠学习理论知识是远远不够的,要与实际动手操作相结合才能更好的理解和分析问题。任务三存储管理【实训目的】掌握物理内存和虚拟内存的基本概念;掌握重定位的基本概念及其要点,理解逻辑地址与绝对地址;掌握各种存储管理的实现方法,包括基本原理、地址变换和缺页中断、主存空间的分配及分配算法;掌握常用淘汰算法。【实训内容】编写一个模拟的动态页式存储管理程序,实现对动态页式存储的淘汰算法的模拟(在先进先出淘汰算法、最近最少使用淘汰算法、最不经常使用淘汰算法三种算法中选择一种进行模拟)并计算各个算法的缺页率;并且页面淘汰算法在淘汰一页时,只将该页在页表中抹去,而不再判断它是否被改写过,也不将它写回到辅存【实训步骤】1.分析与设计(详细分析设计,并给出流程图)-13-2.程序代码/*-------------最佳置换算法(OPtimalReplacementAlgorithm,ORA)-------------*//*算法描述:所选择的淘汰页,是以后永不使用,或最长时间内不使用的页面*/intmain(){intnum_ref;//引用字符的数目intref_arr[MaxSize];//引用字符串数组intphy_blk[Num_Block];//数组模拟物理块cout-----最佳页面置换算法-----endlendl;do{cout输入引用字符串的数目:endl;-14-cinnum_ref;//输入引用字符串的数目}while(num_refMaxSize);cout输入引用字符串的队列:endl;for(inti=0;inum_ref;i++)//输入引用字符串的队列cinref_arr[i];for(intj=0;jNum_Block;j++)//前Num_Block项进物理块phy_blk[j]=ref_arr[j];coutendl置换程序如下:;coutendl----------------------------------endl;for(intp=0;pnum_ref-Num_Block;p++){if(!(phy_blk[0]==ref_arr[Num_Block+p]||phy_blk[1]==ref_arr[Num_Block+p]||phy_blk[2]==ref_arr[Num_Block+p])){//寻找phy_blk[0]在引用字符串中的下一位置k1for(intk1=Num_Block+p+1;k1MaxSize;k1++)if(phy_blk[0]==ref_arr[k1])break;//寻找phy_blk[1]在引用字符串中的下一位置k2for(intk2=Num_Block+p+1;k2MaxSize;k2++)if(phy_blk[

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功