《计算机操作系统》实验指导书郑州大学软件学院实验一操作系统的安装与使用1.实验目的(1)熟悉Windows2000等操作系统系统的定制安装过程,明确各安装部件的作用。要求学生掌握图形用户接口元素和图形用户接口元素的基本操作;熟悉控制面板中各组件的作用及设置;能够了解Windows系统对各种软件资源和硬件资源管理的策略。(2)让学生对系统进程管理、处理机的调度与死锁、存储器管理、设备管理、文件管理以及系统接口有一个感性的认识并熟悉相关操作。2.实验预备知识(1)阅读教材第一章(操作系统引论),熟悉操作系统的目标、作用和层次;了解操作系统的发展过程;熟悉操作系统实现的功能(存储器管理功能、处理机管理功能、设备管理功能、文件管理功能以及用户接口);了解操作系统的发展的历史和未来的发展趋势。3.实验环境(1)PC计算机;(2)WINDOWS2000、WINDOWSXP或WINDOWSSEVER2003等操作系统的安装盘。4.实验时间:2个机时。5.实验内容(1)了解安装WINDOWS2000(或WINDOWSXP、WINDOWSSEVER2003)的硬件需求;熟悉安装过程。熟悉安装过程中各种组件的选择;熟悉各种物理设备驱动程序的安装。(2)熟悉WINDOWS2000的用户界面。重点掌握各类操作系统的各类用户接口;掌握资源管理器的使用。(3)掌握对操作系统的配置和维护,掌握控制面板的使用。掌握安装和删除硬件设备的方法,熟练对打印机、鼠标、键盘、网卡、显示卡、声卡等硬件设备进行配置。(4)了解网络的配置和网络协议的原理和设置,熟练对计算机进行网络设置。(5)熟练掌握WINDOWS2000的管理工具。利用“计算机管理”选项对计算机进行设置。“计算机管理工具”为用户提供六种系统工具:“事件查看器”,“系统信息”、“性能日志和警报”,“共享文件夹”、设备管理器“和”本地用户和组。(6)了解WINDOWS2000活动目录。目录是一个存储对象信息的分层结构,要求学生掌握配置活动目录的方法。(7)掌握WINDOWS2000的存储管理。要求学生掌握以下内容:WINDOWS2000的基本存储和动态存储;智能镜像、存储工具、视图的设置和硬盘转换、动态磁盘中的卷以及相关卷的操作、磁盘碎片整理程序。(8)熟悉用WINDOWS任务管理器来观察计算机的应用程序列表、进程列表以及系统的处理机使用情况、内存分配和使用情况、句柄数、线程数等等。6.思考WINDOWS操作系统中如何实现了处理机管理、内存管理、设备管理、文件管理和磁盘管理?如何操作?有条件的同学可参阅有关LINUX书籍和上机实践,思考和了解在LINUX操作系统中是如何实现了处理机管理、内存管理、设备管理、文件管理和磁盘管理?实验二生产者和消费者的问题1.实验目的(1)加深对进程概念的理解,明确进程和程序的区别。(2)进一步认识并发执行的实质。(3)验证用信号量机制实现进程互斥的方法。(4)验证用信号机制实现进程同步的方法。2.实验预备内容(1)阅读课本有关进程管理以及进程同步的有关章节,对临界区和临界资源概念要清晰,充分理解信号信号量机制。(2)阅读几种经典进程同步问题的算法并理解。熟练掌握生产者—消费者的算法思想。3.实验环境(1)一台运行Windows2000professional操作系统的计算机。(2)选用turboc、visualc++、Delphi、c++builder或visualbasic等任何一种语言。4.实验时间:4个机时。5.实验内容问题描述:考虑有一些生产者和消费者进程,生产者进程生产信息并把它们放入缓冲池中,消费者从缓冲池中取走信息。生产者—消费者问题是相互合作的进程关系的一种抽象,如在输入时,输入进程是生产者,计算进程是消费者;而在输出时,则计算进程是生产者,打印进程是消费者。请使用信号量机制来解决生产者—消费者问题。互斥关系:(I)设缓冲池有n个单元。(II)当n个单元装满时,生产者必须等待。(III)当缓冲池空时,消费者必须等待。6.参考算法Varmutex,empty,full:semaphore:=1,n,0;buffer:array[0,…,n-1]ofitem;in,out:integer:=0,0;生产者进程:repeatproduceaniteminnextpwait(empty);wait(mutex);缓冲区buffer(in):=nextp;in:=(in+1)modn;signal(mutex);signal(full);untilfalse;消费者进程:repeatwait(full);wait(mutex);nextc:=buffer(out);out:=(out+1)modn;signal(mutex);signal(empty);consumetheiteminnextcwait(S)操作:S=S-1;若S=0,则进程继续运行。若S0,则该进程被阻塞,并将它插入该信号量的等待队列中。Signal(S)操作:S=S+1;若S0,则进程继续执行;若S=0,则从信号量等待队列中移处第一个进程,使其变为就绪状态,然后再返回原进程继续执行。7.实验要求在程序编制中,应有数据显示,最好采用图形界面显示。生产者和消费者的进程采用程序模拟的方法运行。实验三银行家调度算法1.实验目的(1)使学生加深对死锁的理解,理解预防死锁的思想和方法,使学生明确系统安全状态的概念。(2)使学生能利用银行家调度算法实现避免死锁。2.实验预备内容阅读死锁的基本概念,产生死锁的原因、产生死锁的必要条件以及处理死锁的基本方法,重点阅读关于死锁避免的章节。3.实验环境(1)一台运行Windows2000professional操作系统的计算机。(2)选用turboc、visualc++、delphi、c++builder或visualbasic等任何一种语言,建议用c++。4.实验时间:4个机时。5.实验内容(1)设置银行家算法中的数据结构(a)可利用资源向量Available它是一个含有m个元素的数组,其中的每一个元素代表一类可利用资源的数目,其初始值是系统中所配置该类全部可用资源数目。其数值随该类资源的分配和回收而动态地改变。如果Available[j]=k表示系统中现有jR类资源k个。(b)最大需求矩阵Max这是一个nm的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max(i,j)=k,表示进程i需要jR类资源的最大数目为k。(c)分配矩阵Allocation这是一个nm的矩阵,它定义了系统中每一类资源当前已分配该每一进程的资源数。如果Allocation(i,j)=k,表示进程i当前已分得jR类资源的数目为k。(d)分配矩阵Need这是一个nm的矩阵,用以表示每一个进程尚需的各类资源数。如果Need(i,j)=k表示进程i还需要jR类资源k个,方能完成其任务。上述三个矩阵存在如下关系:Need(i,j)=Max(i,j)-Allocation(i,j)(2)银行家算法设iquestRe是进程iP的请求向量。如果iquestRe[j]=k,表示进程iP需要k个jR类的资源。当iP发出资源请求后,系统按下述步骤进行检查:①如果iiNeedquestRe,则转向步骤②;否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。②如果AvailableReiquest,则转向步骤③;否则,表示系统中尚无足够的的资源,iP必须等待。③系统试探把要求的资源分配给进程iP,并修改下面数据结构中的数值:Available:Available-iquestRe;iiiRequestAllocationAllocation:;iiiRequest-NeedNeed:;④系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程iP,以完成本次分配;否则,将试探分配作废,恢复原来的资源分配状态,让进程iP等待。(3)安全性算法系统所执行的安全性算法描述如下:①设置两个向量(a)工作向量Work。它表示系统可提供给进程继续运行所需要的各类资源数目,它含有m个元素,执行安全算法开始时,Work:=Available。(b)Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]:=false;当有足够资源分配给进程时,令Finish[i]:=true。②从进程集合中找到一个能满足下列条件的进程:(a)Finish[i]:=false(b)WorkNeedi如找到,执行步骤③;否则执行步骤④。③当进程iP获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work:=Work+Allocationi;Finish[i]:=true;gotostep(2)④如果所有进程的Finish[i]:=true,则表示系统处于安全状态;否则,系统处于不安全状态。6.参考算法#includeiostream.h#includefstream.h#includestdlib.h#includewindows.h#defineMAX_PROCESS32//最大进程数#defineMAX_COURCE64//最大资源类别intMAX_FACT_PROCESS;//实际总进程数intMAX_FACT_COURCE;//实际资源类别数intAvailable[MAX_COURCE];//可利用资源向量intMax[MAX_PROCESS][MAX_COURCE];//最大需求矩阵intAllocation[MAX_PROCESS][MAX_COURCE];//分配矩阵intNeed[MAX_PROCESS][MAX_COURCE];//需求矩阵intRequest_PROCESS;//发出请求的进程intRequest_COURCE;//被请求资源类别intRequest_COURCE_NEMBER;//请求资源数structCOMP{intvalue;intnum;intnext;};intflag=0;voidRead_Initiate(void){//读入初始化文档ifstreaminfile(Initiate.txt);if(!infile){cout不能打开输入文件:Initiate.txt'\n';exit(1);}cout开始读入初始化文档'\n';intch;intArray[MAX_PROCESS*MAX_COURCE*2];intnum=0;while(infilech)Array[num++]=ch;num=0;MAX_FACT_COURCE=Array[num++];for(intj=0;jMAX_FACT_COURCE;j++)Available[j]=Array[num++];MAX_FACT_PROCESS=Array[num++];for(inti=0;iMAX_FACT_PROCESS;i++){for(intj=0;jMAX_FACT_COURCE;j++)Max[i][j]=Array[num++];}infile.close();}voidWrite_Initiate(void){//写入初始化文档(分配资源ofstreamoutfile(Initiate.txt);if(!outfile){cout不能打开初始化文档:'\n';exit(1);}intArray[MAX_PROCESS*MAX_COURCE*2];intnum=0;Array[num++]=MAX_FACT_COURCE;for(inti=0;iMAX_FACT_COURCE;i++)Array[num++]=Available[i];Array[num++]=MAX_FACT_PROCESS;for(i=0;iMAX_FACT_PROCESS;i++)for(intj=0;jMAX_FACT_COURCE;j+