您好,欢迎访问三七文档
操作系统实验指导书实验一操作系统用户接口实验一、实验目的熟悉操作系统的命令接口、图形用户接口和程序接口。二、实验内容:1、使用操作系统的命令接口。使用Windows常用命令:dir、md、copy、date、help,显示这些命令的结果,并解释这些命令的作用。图1-1命令控制台图1-2windows常用命令图1-3windows常用命令图1-4windows常用命令使用图1-5windows常用命令使用2、使用操作系统的程序接口。VB环境下:编制一小程序,使其可通过某个系统调用来获得os提供的某种服务,如打开控制面板:Shellrundll32.exeShell32.dll,Control_RunDLL,1VC环境下:用C语言编制一个小程序,使其可通过Localtime()系统调用来获得OS提供的时间和日期。3、使用操作系统的图形用户接口(略)。三、思考:OS向用户提供的命令接口、图形用户接口和程序接口分别适用于哪些场合?实验二进程创建与撤消一、实验目的1、加深对进程概念的理解和进程创建与撤消算法;2、进一步认识并发执行的实质。二、实验内容本实验完成如下三个层次的任务:(1)系统级—以普通用户身份认识windows的进程管理。通过windows的“任务管理器”观察进程的状态,进行进程的创建、切换和撤销。(2)语言级—以普通程序员身份认识高级语言VC++/Java/VB的进程创建与撤销工具。(3)模拟级—以OS设计师身份编程模拟实现进程创建与撤销功能,并在屏幕上观察进程活动的结果。三、实验步骤1、windows的进程管理当前状态图2-1windows任务管理器切换前图2-2windows任务管理器切换后图2-3windows任务管理器撤销图2-4windows任务管理器2、VC++进程创建与撤销工具Windows所创建的每个进程都从调用CreateProcess()API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。每一进程都以调用ExitProcess()或TerminateProcess()API函数终止。通常应用程序的框架负责调用ExitProcess()函数。对于C++运行库来说,这一调用发生在应用程序的main()函数返回之后。本实验显示了创建子进程的基本框架。该程序只是再一次地启动自身,显示它的系统进程ID和它在进程列表中的位置。步骤1:登录进入Windows。步骤2:在“开始”菜单中单击“程序”-“MicrosoftVisualStudio6.0”–“MicrosoftVisualC++6.0”命令,进入VisualC++窗口。步骤3:“文件”-“新建”-“C++SourceFile”,建立源程序2-1.cpp。清单2-1创建子进程#include#includeintmain(intargc,CHAR*argv[]){STARTUPINFOsi;PROCESS_INFORMATIONpi;ZeroMemory(&si,sizeof(si));si.cb=sizeof(si);ZeroMemory(&pi,sizeof(pi));std::stringstrCmdLine=ping127.0.0.1;//Startthechildprocess.if(!CreateProcess(NULL,//Nomodulename(usecommandline)(LPSTR)strCmdLine.c_str(),//CommandlineNULL,//ProcesshandlenotinheritableNULL,//ThreadhandlenotinheritableFALSE,//SethandleinheritancetoFALSE0,//NocreationflagsNULL,//Useparent'senvironmentblockNULL,//Useparent'sstartingdirectory&si,//PointertoSTARTUPINFOstructure&pi)//PointertoPROCESS_INFORMATIONstructure){printf(CreateProcessfailed(%d)\n,GetLastError());return1;}//Waituntilchildprocessexits.WaitForSingleObject(pi.hProcess,INFINITE);//Closeprocessandthreadhandles.CloseHandle(pi.hProcess);CloseHandle(pi.hThread);getchar();return0;}步骤4:单击“Build”菜单中的“Compile2-1.cpp”命令,系统显示:Thisbuildcommandrequiresanactiveprojectworkspace.Wouldyouliketocreateadefaultprojectworkspace?(build命令需要一个活动的项目工作空间。你是否希望建立一个缺省的项目工作空间?)单击“是”按钮确认。系统对2-1.cpp进行编译。步骤5:编译完成后,单击“Build”菜单中的“Build2-1.exe”命令,建立2-1.exe可执行文件。步骤6:在工具栏单击“ExecuteProgram”(执行程序)按钮,或者按Ctrl+F5键,或者单击“Build”菜单中的“Execute2-1.exe”命令,执行2-1.exe程序。步骤7:按Ctrl+S键可暂停程序的执行,按Ctrl+Pause(Break)键可终止程序的执行。3.进程创建与撤销的模拟实现(1)总体设计:①数据结构定义:结构体PCB:进程名、ID、运行时间、优先级等,队列的排序按创建时间或优先级排序。②函数CREATE()—进程创建:从PCB空间申请一个空PCB,填入进程参数,插入就绪队列;KILL()—进程终止:将指定的就绪进程移出就绪队列,插入空队列;就绪队列输出函数Display()—输出就绪队列中的进程信息,以便观察创建或撤消活动的结果;主函数Main()—功能选择、输入新进程参数、调用创建函数、输出就绪队列;输入进程名称、调用终止函数、输出就绪队列;③主界面设计:进程创建、进程撤销、就绪队列显示菜单;数据输入和就绪队列显示区。④功能测试:从显示出的就绪队列状态,查看操作的正确与否。(2)详细设计:①数据结构定义:结构体PCB:structPCB{charNAME[10];longID;floatTIME;intPRIORITY;};PCBpcb[100];②函数设计给出CREATE()、KILL()、Display()、Main()的流程图描述;以CREATE()为例如下:图2-5流程图(3)调试与测试:列出你的测试结果,包括输入和输出。图2-6运行结果示例图2-7运行结果示例四、附录CreateProcess()调用的核心参数是可执行文件运行时的文件名及其命令行。下表详细地列出了每个参数的类型和名称。CreateProcessExitProcessTerminateProcess实验三进程调度实验一、实验目的多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机,本实验模拟实现处理机调度,以加深了解处理机调度的工作二、实验内容选择一个调度算法,实现处理机调度。三、实验要求设计一个按优先权调度算法和按时间片轮转调度算法实现处理机调度的程序。PCB内容:进程名/PID、要求运行时间(单位时间)、优先权、状态、到达时间、已用CPU时间等。1、可随机输入若干进程,并按优先权排序。2、从就绪选进程运行,优先权-1,要求运行时间=0时,撤消该进程。3、每次调度后,显示各进程状态。重新排序进行下轮调度。本实验模是拟实现处理机调度,添加时要求写明该进程属性:进程名,运行时间,优先权等,然后按优先权排序,将具有最高优先权的进程的状态设为:运行,其他为:就绪,若优先权相同,则以其他原则决定,如:要求运行时间短的优先。设定一个时间段T,在该时间段内,若该进程没运行完(即tT),则中止该进程,优先权降一级,重新排序,修改状态。若在该时间段内运行完毕(即tT),则当要求运行时间=0时,撤消该进程,然后重新排序,修改状态。所以,该界面应该每过一段时间更改一次,至于“要求时间”的修改可每过1秒修改一次。图3-1进程模拟调度流程图四、实验报告1、采用图形界面。2、可随机增加进程。3、程序中使用的数据结构及符号说明。4、一份源程序并附上注释。5、要求附上程序模拟运行时的初值和运行结果。实验四进程通信一、实验目的学习如何利用消息缓冲队列、共享存储区机制进程间的通信,并加深对通信机制的理解。二、实验内容编写一段程序,利用消息缓冲队列或共享存储区来实现两个进程之间的进程通信。三、实验要求1.编写一段程序,使其用消息缓冲队列来实现client进程和server进程之间的通信。Server进程先建立一个关键字为SVKEY(如75)的消息队列,然后等待接收类型为REQ(如1)的消息;在收到请求消息后,它便显示字符串“servingforclient”和接收到的client进程的进程标识数,表示正在为client进程服务;然后再向client进程发送一应答消息,该消息的类型是client进程的进程标识符数,而正文则是server进程自己的标识符数。Client进程则向消息队列发送类型为REQ的消息(消息的正文为自己的进程标识符数)以取得server进程的服务,并等待server进程发来的应答;然后显示字符串“receivereplyfrom”和接收到的server进程的标识符数。2.编写一段程序,使其用共享存储区来实现两个进程之间的进程通信。进程A创建一个长度为512字节的共享内存,并显示写入该共享内存的数据;进程B将共享内存附加到自己的地址空间,并向共享内存中写入数据。四、实验报告:1、程序中使用的数据结构及符号说明。2、一份源程序并附上注释。3、要求附上程序模拟运行时的初值和运行结果。实验五银行家算法一、实验目的银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。二、实验内容1.设计进程对各类资源最大申请表示及初值确定。2.设定系统提供资源初始状况。3.设定每次某个进程对各类资源的申请表示。4.编制程序,依据银行家算法,决定其申请是否得到满足。三、实验要求1.数据结构假设有M个进程N类资源,则有如下数据结构:MAX[M*N]M个进程对N类资源的最大需求量AVAILABLE[N]系统可用资源数ALLOCATION[M*N]M个进程已经得到N类资源的资源量NEED[M*N]M个进程还需要N类资源的资源量2.银行家算法设进程I提出请求Request[N],则银行家算法按如下规则进行判断。(1)如果Request[N](2)如果Request[N](3)系统试探分配资源,修改相关数据:AVAILABLE=AVAILABLE-REQUESTALLOCATION=ALLOCATION+REQUESTNEED=NEED-REQUEST(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。3.安全性检查(1)设置两个工作向量WORK=AVAILABLE;FINISH[M]=FALSE(2)从进程集合中找到一个满足下述条件的进程,FINISH[i]=FALSENEED如找到,执行(3);否则,执行(4)(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。WORK=WORK+ALLOCATIONFINISH=TRUEGOTO2(4)如所有的进程Finish[M]=true,则表示安全;否则系统不安全。四、实验报告1、程序中使用的数据结构及符号说明。2、一份源程序并附上注释。3、要求附上程序模拟运行时的初值和运行结果。
本文标题:操作系统实验指导书
链接地址:https://www.777doc.com/doc-7855662 .html