admin 管理员组文章数量: 1087135
2023年12月19日发(作者:jsp教程idea)
操作系统实验报告
操作系统教程实验指导书
阮越许文方
实验一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子目录,继续执行编程不好的可执行程序:e:课程os课os实验程序os11debug>
运行结果(如果运行不成功,则可能的原因是什么?):答:运行成功,结果:
(2)排序进程在核心态运转和用户态运转的时间
步骤1:按照(1)中的步骤创建一个新的“win32consolapplication”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。
步骤2:在建立一个代莱“win32consolapplication”工程,程序的参照程序例如目录1-3右图,编译成可执行文件并继续执行。
步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。
e:课程os课os实验程序os12debug>步骤4:运转结果(如果运转不顺利,则可能将的原因就是什么?)
因为此程序是个死循环,所以运行时间为无穷大。____________________________________________________________________________________________________________________________________________________________
__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________步骤5:分别屏蔽while循环中的两个for循环,或调整两个for循环的次数,写出运行结果。屏蔽i循环:
_______________________________________________________________________________屏蔽j循环:
_______________________________________________________________________________调整循环变量i的循环次数:
_______________________________________________________________________________调整循环变量j的循环次数:
_______________________________________________________________________________3、实验结论
通过实验可以获知运转一个程序cpu的采用情况就是相同的,同时与循环的次数毫无关系,和当前排序的繁杂情况有关。实验得出结论的数据可以可以表明这一点。实验二进程管理1、实验目的
1)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解windows进程的“一生”。
2)通过写作和分析实验程序,自学建立进程、观测进程、中止进程以及父子进程同步的基本程序设计方法。
2、实验内容和步骤(1).创建进程
本实验表明了建立子进程的基本框架。该程序只是再一次地启动自身,表明它的系统进程id和它在进程列表中的边线。
步骤1:创建一个“win32consolapplication”工程,然后拷贝清单2-1中的程序,编译成可执行文件。
步骤2:在“命令提示符”窗口运转步骤1中分解成的可执行文件。运转结果:范例:e:课程os课os实验程序os11debug>os21(假设编程分解成的可执行文件就是)
_________________________________________________________
_________________________________________
______________________________________
________________________________
____________________________________
_________________________________
按下ctrl+alt+del,调用windows的任务管理器,记录进程相关的行为属性:pid:3676,句柄数:11
内存采用:1080k
页面错误:263页面缓存:15k
步骤3:在“命令提示符”窗口重新加入参数再次运转分解成的可执行文件。运转结果:范例:e:课程os课os实验程序os11debug>os213(假设编程分解成的可执行文件就是)
按下ctrl+alt+del,调用windows的任务管理器,记录进程相关的行为属性:pid:2821句柄数:7
内存采用:832k页面错误:263页面内存:15k
步骤4:修改清单2-1中的程序,将nclone的定义和初始化方法按程序注释中的修改方法进行修改,编译成可执行文件(执行前请先保存已经完成的工作)。再按步骤2中的方式运行,看看结果会有什么不一样。运行结果:第一次修改:结果不变。
第二次修正:就是一个死循环,不断的插入此窗口:
从中你可以得出什么结论:
nclone的促进作用:_控制程序的继续执行,当nclone大于等同于5时可以冲破程序。________________________________________________________________
_____________________________________________________________________变量的定义和初始化方法(位置)对程序的执行结果有影响吗?为什么?____________________有,nclone被修改后会对程序的结束控制产生影响_______________________________________________________________________________(2).父子进程的简单通信及终止进程
步骤1:建立一个“win32consolapplication”工程,然后拷贝目录2-2中的程序,编译成可执行文件。
步骤2:在vc的工具栏单击“executeprogram”(执行程序)按钮,或者按ctrl+f5键,或者在“命令提示符”窗口运行步骤1中生成的可执行文件。运行结果:范例:e:课程os课os实验程序os11debug>os22(假设编译生成的可执行文件是)
步骤3:按源程序中注解中的提示信息,修正源程序2-2,编程继续执行(继续执行前恳请先留存已经顺利完成的工作)。运转结果:不断的插入:
在程序中加入跟踪语句,或调试运行程序,同时参考msdn中的帮助文件createprocess()的使用方法,理解父子进程如何传递参数。给出程序执行过程的大概描述:通过main(intargc,char*argv[])传递参数,每次运行时先检测argc的值,若小于1,程序运行结束,否则继续往下执行。
步骤4:填空题
createprocess()函数有_5_______个核心参数?本实验程序中设置的各个参数的值是:a.______szfilename___________________________________________;b.______szcmdline___________________________________________;c.______null___________________________________________;d.______null___________________________________________;e.______false___________________________________________;
f._______create_new_console__________________________________________;g._______null__________________________________________;h._______null__________________________________________;i._______si__________________________________________;j._______pi__________________________________________。
步骤5:按源程序中注释中的提示,修改源程序2-2,编译执行。运行结果:
步骤6:参照msdn中的帮助文件createmutex()、openmutex()、releasemutex()和waitforsingleobject()的采用方法,认知父子进程如何利用不相容体展开同步的。得出父子进程同步过程的一个大概叙述:
createmutex()创建互斥体,openmutex()打开互斥体,releasemutex()释放互斥体,waitforsingleobject()检测hhandle事件的信号状态,通过这些方法可实现当前只有一个进程被创建或使用,实现进程的同步。3、实验结论
通过对进程的操作方式,例如建立进程,同时实现对进程的直观掌控。建立不相容体,化解了进程的同步问题,两者相互采用,并使进程的运转情况获得了较好的管理。实验三进程同步的经典算法1、实验目的
1)回顾系统进程、线程的有关概念,加深对windows2000线程的理解。
2)介绍不相容体对象,通过对生产者消费者等进程间同步与不相容经典算法的同时实现,增进对p、v原语以及利用p、v原语展开进程间同步与不相容操作方式的认知。2、实验内容和步骤(1).生产者消费者问题
步骤1:创建一个“win32consolapplication”工程,然后拷贝清单3-1中的程序,编译成可执行文件。
步骤2:在“命令提示符”窗口运转步骤1中分解成的可执行文件。运转结果:范例:e:课程os课os实验程序os11debug>os31(假设编程分解成的可执行文件就是)
步骤3:仔细阅读源程序,找出创建线程的windowsapi函数,回答下列问题:线程的第一个执行函数是什么(从哪里开始执行)?它位于创建线程的api函数的第几个参数中?答:第一个执行函数是producer;位于第三个参数中。
步骤4:修正目录3-1中的程序,调整生产者线程和消费者线程的个数,使消费者数目小与生产者,看一看结果有何相同。运转结果:
从中你可以得出什么结论:
生产速度快,生产者经常等候消费者;反之,消费者经常等候。
步骤5:修改清单3-1中的程序,按程序注释中的说明修改信号量emptysemaphore
的
初始化方法,看看结果有何不同。运行结果:
步骤6:根据步骤4的结果,并查阅msdn,提问以下问题1)createmutex中存有几个参数,各代表什么含义。请问:存有三个参数.
rity_attributeslpmutexattributes代表安全属性的指针nitialowner代表布尔binitialowner
rlpname代表lpctstr类型lpname
2)createsemaphore中有几个参数,各代表什么含义,信号量的初值在第几个参数中。四个参数:1、表示采用不允许继承的默认描述符2、设置信号机的初始计数3、设置信号机的最大计数4、指定信号机对象的名称。3)程序中p、v原语所对应的实际windowsapi函数是什么,写出这几条语句。p:take()v:append()4)createmutex能用createsemaphore替代吗?尝试修改程序3-1,将信号量mutex完全用createsemaphore及相关函数实现。写出要修改的语句:可以
mutex=createsemaphore(null,false,false,null);(2).读者写者问题
根据实验(1)中所熟悉的p、v原语对应的实际windowsapi函数,并参考教材中读者、写者问题的算法原理,尝试利用windowsapi函数实现第一类读者写者问题(读者优先)。3、实验结论
将信号量看做生产或消费的一个对象,对信号量的分解成和封存操作方式如同p操作方式和v操作方式一样,分解成者消费者问题演示的就是对信号量的分解成和封存,其中牵涉到了信号量的同步,这也就是该问题为何称作同步的经典问题的原因。实验四存储管理1、实验目的
(1)通过对windows2000“任务管理器”、“计算机管理”、“我的电脑”属性、“系统信息”、“系统监视器”等程序的应用,学习如何察看和调整windows的内存性能,加深对操作系统存储管理、虚拟存储管理等理论知识的理解。
(2)介绍windows2000的内存结构和虚拟内存的管理,认知进程的虚拟内存空间和物理
内存的映射关系。2、实验内容和步骤
(1)观测和调整windows2000/xp的内存性能。步骤1:写作“背景科学知识”,恳请提问:1)什么就是“分页过程”?
分页过程就是将信息从主内存移动到磁盘进行临时存储的过程。2)什么是“内存共享”?
容许出访某些内存空间而不损害它和其他应用程序的安全性和完整性3)什么就是“未分页分拆内存”和“分页分拆内存”?windows2000中,未分页分拆内存的最小管制就是多少?
未分页合并内存:分页合并内存是存储迟早需要的可分页代码或数据的内存部分。分业合并内存:未分页合并内存包含必须驻留在内存中的占用代码或数据。在windows2000中为分业合并内存的最大限制是256mb。
版权声明:本文标题:操作系统实验报告 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1702917892a435923.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论