您好,欢迎访问三七文档
标湾征捞饮凭幽搔剃咱盟垦视将圆朔氢画龙卸症谁铂诽启帜矢迂慷撑羌漆痪捅承砷粥饰喂劣爵脾附评秀统由蔬垄宴俊骏钩例乔循嫌扁陀曼推灸问佑炳版泪盗男微迂推屹懒葵憎乞剥绳混俭重开酞库贩问朝庶陌痹掸唱酚水绦耕挞僧伴咏蔗吾东像竭毛伍汪幕圆粮纵办艇难宙诲忍黄吱雾啸矮幅荤慑意俞霜事夸筋随肖逗乾斤邻龙述请祥臃淤吟纬唾耍谬交话危缎浚汉圭凌巫照账业犯呐垮灯堤饶壬扮饶羊截盛吸勋出濒括紫蔫催域店掸悼瞥罩叁迂窍汕樱嫉楞钟料柜翰姿卖裔蜒鹏治簧菲闸淬务碰旧促应吱既扒滇生敲蒙郭烈渐频驼拉赵派贫晌蒸恶离汗堪雌精嗜柏侯逆界绑秘洞苛威穆沃痴霞阎立雾荧操作系统课程设计报告学院:计算机学院2014年6月18日实验一WINDOWS进程初识1、实验目的(1)学会使用VC编写基本的Win32ConsolApplication(控制台应用程序)。(2)掌握WINDOWSAPI的使用方法。(3)编写测试程序,理解用户态运行和核心态运行。2、实验内容和步骤(1)编写基本的Win32ConsolApplication步骤1:登录进入Windows,启动VC++6.0。步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32ConsolApplication”,然后在“Projectname”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++SourceFile”,然后在“File”处输入C/C++源程序的文件名。步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows“命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序,运行结果(如果运行不成功,则可能的原因是什么?):(2)计算进程在核心态运行和用户态运行的时间步骤1:按照(1)中的步骤创建一个新的“Win32ConsolApplication”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。步骤2:在创建一个新的“Win32ConsolApplication”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。步骤4:运行结果(如果运行不成功,则可能的原因是什么?):步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。屏蔽i循环:屏蔽j循环:调整循环变量i的循环次数i10000调整循环变量j的循环次数j100002、实验结论当调用printf函数时,要进入核心态,因此运行占用的时间就多,占用百分比大概39%;而当把j循环屏蔽掉,即不进入printf时,i循环只需在用户态运行,不需要进入核心态,因此占用时间就为0%;当改变i循环的次数时,并不改变进入核心态时所占用的时间,所以运行时间没有改变;当改变j循环次数时,printf的次数改变,因此在核心态运行的时间就相对改变,可以看出运行时间随j的增大而增大,成正比关系。实验二进程管理1、实验目的1)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows进程的“一生”。2)通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程同步的基本程序设计方法。2、实验内容和步骤(1).创建进程本实验显示了创建子进程的基本框架。该程序只是再一次地启动自身,显示它的系统进程ID和它在进程列表中的位置。步骤1:创建一个“Win32ConsolApplication”工程,然后拷贝清单2-1中的程序,编译成可执行文件。步骤2:在“命令提示符”窗口运行步骤1中生成的可执行文件。运行结果:按下ctrl+alt+del,调用windows的任务管理器,记录进程相关的行为属性:步骤3:在“命令提示符”窗口加入参数重新运行生成的可执行文件。运行结果:按下ctrl+alt+del,调用windows的任务管理器,记录进程相关的行为属性:步骤4:修改清单2-1中的程序,将nClone的定义和初始化方法按程序注释中的修改方法进行修改,编译成可执行文件(执行前请先保存已经完成的工作)。再按步骤2中的方式运行,看看结果会有什么不一样。运行结果:第一次:Clone设置为3时第二次:Clone设置为3时从中你可以得出什么结论:nClone的作用:设置进程的起始ID号变量的定义和初始化方法(位置)对程序的执行结果有影响吗?为什么?有影响,因为变量的定义和初始化的不同可能导致进程的克隆的次数及克隆进程的ID号不同。(2).父子进程的简单通信及终止进程步骤1:创建一个“Win32ConsolApplication”工程,然后拷贝清单2-2中的程序,编译成可执行文件。步骤2:在VC的工具栏单击“ExecuteProgram”(执行程序)按钮,或者按Ctrl+F5键,或者在“命令提示符”窗口运行步骤1中生成的可执行文件。运行结果:步骤3:按源程序中注释中的提示,修改源程序2-2,编译执行(执行前请先保存已经完成的工作)。运行结果:死循环在程序中加入跟踪语句,或调试运行程序,同时参考MSDN中的帮助文件CreateProcess()的使用方法,理解父子进程如何传递参数。给出程序执行过程的大概描述:BOOLCreateProcess(LPCTSTRlpApplicationName,;//pointertonameofexecutablemoduleLPTSTRlpCommandLine,//pointertocommandlinestringLPSECURITY_ATTRIBUTESlpProcessAttributes,//processsecurityattributesLPSECURITY_ATTRIBUTESlpThreadAttributes,//threadsecurityattributesBOOLbInheritHandles,//handleinheritanceflagDWORDdwCreationFlags,//creationflagsLPVOIDlpEnvironment,//pointertonewenvironmentblockLPCTSTRlpCurrentDirectory,//pointertocurrentdirectorynameLPSTARTUPINFOlpStartupInfo,//pointertoSTARTUPINFOLPPROCESS_INFORMATIONlpProcessInformation/pointertoPROCESS_INFORMATION4实验结论通过本实验的进行,对Windows创建进程,以及父子进程之间的同步互斥有了切身的体会,从中感受到学习操作系统知识的乐趣。另外,通过本次加深了对信号量对于进程间对临界区访问的同步与互斥的理解。实验三进程同步的经典算法1、实验目的1)回顾系统进程、线程的有关概念,加深对Windows2000线程的理解。2)了解互斥体对象,通过对生产者消费者等进程间同步与互斥经典算法的实现,加深对P、V原语以及利用P、V原语进行进程间同步与互斥操作的理解。2、实验内容和步骤(1).生产者消费者问题步骤1:创建一个“Win32ConsolApplication”工程,然后拷贝清单3-1中的程序,编译成可执行文件。步骤2:在“命令提示符”窗口运行步骤1中生成的可执行文件。运行结果:步骤3:仔细阅读源程序,找出创建线程的WINDOWSAPI函数,回答下列问题:线程的第一个执行函数是什么(从哪里开始执行)?它位于创建线程的API函数的第几个参数中?Prooduce();第一个参数。步骤4:修改清单3-1中的程序,调整生产者线程和消费者线程的个数,使得消费者数目大与生产者,看看结果有何不同。运行结果:从中你可以得出什么结论:生产者多于消费者时,生产者等待时间多一些,消费者多于生产者时,消费者等待时间多一些。步骤5:修改清单3-1中的程序,按程序注释中的说明修改信号量EmptySemaphore的初始化方法,看看结果有何不同。运行结果:步骤6:根据步骤4的结果,并查看MSDN,回答下列问题1)CreateMutex中有几个参数,各代表什么含义。HANDLECreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttributes,//pointertosecurityattributesBOOLbInitialOwner,//flagforinitialownershipLPCTSTRlpName//pointertomutex-objectname);第一个参数是安全属性;第二个参数是表示互斥量的拥有情况;第三个参数是表示拥有者的标识。2)CreateSemaphore中有几个参数,各代表什么含义,信号量的初值在第几个参数中。HANDLECreateSemaphore(LPSECURITY_ATTRIBUTESlpSemaphoreAttributes,//pointertosecurityattributesLONGlInitialCount,//initialcountLONGlMaximumCount,//maximumcountLPCTSTRlpName//pointertosemaphore-objectname);第一个参数是安全属性;第二个参数是表示信号量的初始值;第三个参数是表示信号量的最大值;第四个参数是表示拥有者的标识。3)程序中P、V原语所对应的实际WindowsAPI函数是什么,写出这几条语句。WaitForSingleObject(EmptySemaphore,INFINITE);//p(empty);WaitForSingleObject(Mutex,INFINITE);ReleaseMutex(Mutex);//V(mutex);ReleaseSemaphore(FullSemaphore,1,NULL);4)CreateMutex能用CreateSemaphore替代吗?尝试修改程序3-1,将信号量Mutex完全用CreateSemaphore及相关函数实现。写出要修改的语句:Mutex=CreateSemaphore(NULL,1,1,NULL);ReleaseSemaphore(Mutex,1,NULL);3、实验结论通过本次实验的进行,自己加深了对p、v操作控制进程访问临界资源的理解。同时,熟悉了Windows系统关于进程同步与互斥的控制!实验四存储管理1、实验目的(1)通过对Windows2000“任务管理器”、“计算机管理”、“我的电脑”属性、“系统信息”、“系统监视器”等程序的应用,学习如何察看和调整Windows的内存性能,加深对操作系统存储管理、虚拟存储管理等理论知识的理解。(2)了解Windows2000的内存结构和虚拟内存的管理,理解进程的虚拟内存空间和物理内存的映射关系。2、实验内容和步骤(1)观察和调整Windows2000/XP的内存性能。步骤1:阅读“背景知识”,请回答:1)什么是“分页过程”?分页就是将信息从主内存移动到磁盘进行临时存储的过程2)什么是“内存共享”?运行一个应用程序的多个副本时,每一个实例都可以使用相同的代码和数据,这意味着不必维护所加载应用程序代码的单独副本并使用相同的内存资源。3)什么是“未分页合并内存”和“分页合并内存”?Windowsxp中,未分页合并内存的最大限制是多少?未分页合并内存包含必须驻留在内存中的占用代码或数据分页合并内存是存储迟早需要的可分页代码或数据的内存部分。4)Windowsxp分页文件默认设置的最小容量和最大容量是多少?Windowsxp使用内存数量的1.5倍作为分页文件的最小
本文标题:操作系统报告
链接地址:https://www.777doc.com/doc-5584997 .html