2013操作系统实验指导书

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

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

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

资源描述

1从实施课程改革以来,我反复学习有关的教育教学理论,深刻领会新课标精神,认真反思自身教学实际,研究学生,探究教法《操作系统》实验指导书适用专业:计算机科学与技术网络工程软件工程太原科技大学计算机科学与技术学院2013年3月从实施课程改革以来,我反复学习有关的教育教学理论,深刻领会新课标精神,认真反思自身教学实际,研究学生,探究教法2前言操作系统是计算机的核心和灵魂。操作系统软件的设计对整个计算机的功能和性能起着至关重要的作用,所以此门课也是必不可少的,是面向计算机科学与技术、网络工程、软件工程等大多数计算机专业本科生开设的一门计算机专业课程。操作系统是计算机系统的核心,《操作系统》课程是计算机科学与技术专业的重要必修课。本课程的目的是使学生掌握现代计算机操作系统的基本原理、基本设计方法及实现技术,具有分析现行操作系统和设计、开发实际操作系统的基本能力。操作系统实验是操作系统课程的重要组成部分,属于学科基础实验范畴。作为与相关教学内容配合的实践性教学环节,应在操作系统理论课教学过程中开设。操作系统是计算机科学与技术专业必修的专业基础课程,操作系统实验的作用是:理解操作系统的设计和实现思路,掌握典型算法。基本要求是:理解进程的概念,理解死锁,掌握银行家算法;掌握请求页式存储管理的实现原理及页面置换算法。学生应具有高级语言编程能力、具有数据结构等基础知识。从实施课程改革以来,我反复学习有关的教育教学理论,深刻领会新课标精神,认真反思自身教学实际,研究学生,探究教法目录实验一windows进程的创建............................错误!未定义书签。实验二windows并发多线程的应用................错误!未定义书签。实验三P、V操作的模拟实现........................错误!未定义书签。实验四银行家算法模拟.................................错误!未定义书签。实验五虚拟存储管理中页面置换算法模拟...错误!未定义书签。1实验一windows进程的创建实验学时:2实验类型:验证实验要求:必修一、实验目的本课题实习的目的是,加深对wiundows进程概念及进程管理各部分内容的理解;熟悉windows进程管理API的使用。二、实验要求1.将源程序编译、链接后形成master.exe和slave.exe文件。2.在命令行方式下输入……masterslave回车,将在master进程中创建slave进程,观察程序运行的结果。3.自己设计一个小程序,完成在master进程中启动该程序的操作。4.撰写上机报告。三、实验内容下面程序是两个简单的控制台应用程序,第一个程序(MASTER)运行第二个程序(SLAVE),并进入睡眠。SLAVE程序从命令行读取MASTER程序的进程ID(PID),并等待MASTER程序终止之后,SLAVE做了一些事情之后,也结束。这些程序用到了以下几个重要技术:1.使用CreateProcessCreateProcess函数⑴函数原型:BOOLCreateProcess(LPCTSTRlpApplicationName,LPTSTRlpCommandLine,LPSECURITY_ATTRIBUTESlpProcessAttributes,LPSECURITY_ATTRIBUTESlpThreadAttributes,BOOLbInheritHandles,DWORDdwCreationFlags,LPVOIDlpEnvironment,LPCTSTRlpCurrentDirectory,LPSTARTUPINFOlpStartupInfo,LPPROCESS_INFORMATIONlpProcessInformation);⑵参数:lpApplicationName:指向一个以空结尾的串,他指定了要执行的模块lpCommandLine:指向一个以空结尾的串,该串定义了要执行的命令行。lpProcessAttributes:指向一个SECURITY_ATTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承。lpThreadAttributes:指向一个SECURITY_ATTRIBUTES结构,该结构决定了返回的句柄是2否可被子进程继承。bInheritHandles,:表明新进程是否从调用进程继承句柄。dwCreationFlags:定义控制优先类和进程创建的附加标志。lpEnvironment:指向一个新进程的环境块。lpCurrentDirectory:指向一个以空结尾的串,该串定义了子进程的当前驱动器和当前目录。lpStartupInfo:指向一个STARTUPINFO结构,该结构定义了新进程的主窗口将如何显示。lpProcessInformation:指向PROCESS_INFORMATION结构,该结构接受关于新进程的表示信息。⑶返回值:若函数调用成功,则返回值不为0;若函数调用失败,返回值为0。在上述参数中,参数lpStartupInfo是STARTUPINFO结构。可以用来设置控台的标题,新窗口的的初始大小和位置,及重定向标准输入和输出。新程序通常可以忽略多数这些数据项,如果选择那样做的话。可以规定该结构体中的标志,已表明要设置的数据段。有时,不想设置任何信息,也必须传递一个有效的指针给空结构(确定设置大小到cb,及设置dwFlags成员为0)。参数lpProcessInformation返回进程和线程句柄,还包括进程和线程ID。这些句柄拥有在参数lpProcessAttributes和lpThreadAttributes中规定的访问。要注意,针对CreateProcess的一些参数对控制台应用程序是特定的,而其它参数则对各种应用程序有用。大多数情况下,并不一定要填入STARTUPINFO结构,但无论如何必须提供它。其返回值是布尔型的,而真正感兴趣的返回值发生于作为参数传送的结构中(PROCESS_INFORMATION)。CreateProcess返回该结构中的进程ID及其句柄,以及初始线程ID及其句柄。可以将ID发送到其它进程,或使用句柄来控制新进程。2.使用WaitForSingleObjectWaitForSingleObject的目的是要确定句柄是否处于发送信号的状态。当进程结束时,进程句柄发出信号。当调用WaitForSingleObject时,就规定进程句柄和超时值,如果超时为0,则该命令就立刻返回,且能够确定进程的状态。如果超时是常数INFINITE,则命令就不返回,直到目标进程退出为止。当然,还可以规定超时值,其导致该命令等待要结束的进程一段时间。如果进程在超时届满前结束,该命令就返回,并指出句柄在发射信号状态。否则,就返回一个负值。不管句柄在何种状态,WaitForSingleObject将成功返回,没有错误发生。要确定进程的状态,就必须比较返回值为WAIT_OBJECT_0(已发信号的)和WAIT_TIMEOUT(未发信号的)。真正的错误返回值为WAIT_FAILED。另外可能的返回值是WAIT_ABANDONED,是不会看到何时处理进程。要等待一个进程,就必须带有SYNCHRONIZE特权的打开局柄。这里要注意,进程ID与进程句柄不同。不能简单地在进程之间传送句柄,这意味着除非有句柄,否则不能从外部进程直接操纵一个进程。不过OpenProcess命令将允许任何程序(有足够的安全特权)将进程标示符(可以用来于其它进程通信)变换为进程句柄。通过调用GetCurrentProcessId,还可以了解当前进程标示符。如果要想与其他无关的进程共享,以使能够打开进程句柄,这是非常有用的。但调用OpenProcess时,可以请求对进程的访问。对每种进程的访问,也许有或也许没有访问要打开进程的安全性,于是试图请求是仅仅需要的。例如,如果要了解进程的返回代码,就需要PROCESS_QUERY_INFORMATION的访问。要终止进程,就必须有PROCESS_TERMINATE的访问。33.源程序清单://master.cpp#includewindows.h#includeiostream.h#includestdio.h#includestring.hvoidmain(intargc,char*argv[]){charcmd[128];if(argc!=1)strcpy(cmd,argv[1]);elsestrcpy(cmd,slave.exe);intpid=GetCurrentProcessId();coutprocessID:pidendl;coutMaster准备启动:cmd\n;sprintf(cmd+strlen(cmd),%d,pid);cout.flush();STARTUPINFOinfo;memset(&info,0,sizeof(info));info.cb=sizeof(info);PROCESS_INFORMATIONpinfo;if(!CreateProcess(NULL,cmd,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&info,&pinfo)){coutMaster:从进程cmd没有找到\n;coutMaster:重新输入从进程名\n;}coutMaster:睡觉去喽……………………………………………………………………\n;cout.flush();Sleep(10000);for(inti=1;i5;i++)cout睡醒了\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n;coutMaster:刷牙、洗脸、吃饭\n;coutMaster:结束!!!!!\n;exit(0);}//slave.cpp#includewindows.h#includeiostream.h#includestdio.h4voidmain(intargc,char*argv[]){if(argc!=2){coutSlave:请重新运行MASTER.EXE.\n;exit(1);}intpid=atoi(argv[1]);HANDLEprocess=OpenProcess(PROCESS_QUERY_INFORMATION|SYNCHRONIZE,FALSE,pid);if(!process)coutSlave:Erroropeningprocess\n;coutSlave:我要等Master起床。\n;cout.flush();if(WaitForSingleObject(process,INFINITE)==WAIT_OBJECT_0)coutSlave:Master结束了,该我玩了!!!!!!!!!!!!!!!!\n;elsecoutSlave:出什么错了?\n;for(inti=1;i5;i++)couti我好高兴好高兴!!\n;coutSlave我也该结束了,拜拜!\n;exit(0);}实验二windows并发多线程的应用实验学时:4实验类型:设计实验要求:必修一、实验目的本课题实习的目的是,加深对wiundows线程概念及线程同步管理各部分内容的理解;熟悉windows线程管理API的使用二、实验要求1.通过上网查阅资料,了解windows线程同步函数,写出本程序中出现的API函数的定义;2.阅读案例程序,给出程序的详细注解;3.运行程序,分析程序结果。4.改写程序实现(至少选其中两个项目实现)(1)《苹果桔子问题》:5桌上有一只盘子,每次只能放入一只水果;爸爸专向盘子中放苹果(apple),妈妈专向盘子中放桔于(orange),一个儿子专等吃盘子中的桔子,一个女儿专等吃盘子里的苹果。(2)在一个盒子里混装了数量相等的黑白围棋子,现在用自动分拣系统把黑白子分

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

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

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

×
保存成功