1、按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。课程os课os实验程序os12debugtime TEST.exe) 分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。屏蔽i循环:_屏蔽j循环:_调整循环变量i的循环次数:_调整循环变量j
2、的循环次数:_3、 实验结论通过实验可以得知运行一个程序CPU的使用情况是不同的,同时与循环的次数无关,和当前计算的复杂情况有关。实验得出的数据可以可以说明这一点。实验二 进程管理1、实验目的1) 通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows进程的“一生”。2) 通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程同步的基本程序设计方法。2、实验内容和步骤 (1). 创建进程本实验显示了创建子进程的基本框架。该程序只是再一次地启动自身,显示它的系统进程ID和它在进程列表中的位置。创建一个“Win32 Conso
3、l Application”工程,然后拷贝清单2-1中的程序,编译成可执行文件。在“命令提示符”窗口运行步骤1中生成的可执行文件。运行结果:范例:os21 (假设编译生成的可执行文件是os21.exe)按下ctrl+alt+del,调用windows的任务管理器,记录进程相关的行为属性:在“命令提示符”窗口加入参数重新运行生成的可执行文件。os21 3修改清单2-1中的程序,将nClone的定义和初始化方法按程序注释中的修改方法进行修改,编译成可执行文件(执行前请先保存已经完成的工作)。再按步骤2中的方式运行,看看结果会有什么不一样。第一次修改:结果不变。第二次修改:是一个死循环,不断的弹出此
4、窗口:从中你可以得出什么结论:nClone的作用:_控制程序的执行,当nClone大于等于5时可跳出程序。变量的定义和初始化方法(位置)对程序的执行结果有影响吗?为什么?_有,nClone被修改后会对程序的结束控制产生影响(2). 父子进程的简单通信及终止进程创建一个“Win32 Consol Application”工程,然后拷贝清单2-2中的程序,编译成可执行文件。在VC的工具栏单击“Execute Program”(执行程序) 按钮,或者按Ctrl + F5键,或者在“命令提示符”窗口运行步骤1中生成的可执行文件。os22 (假设编译生成的可执行文件是os22.exe)按源程序中注释中的
5、提示,修改源程序2-2,编译执行(执行前请先保存已经完成的工作)。在程序中加入跟踪语句,或调试运行程序,同时参考MSDN中的帮助文件CreateProcess()的使用方法,理解父子进程如何传递参数。给出程序执行过程的大概描述:通过main(int argc, char* argv)传递参数,每次运行时先检测argc的值,若小于1,程序运行结束,否则继续往下执行。填空 CreateProcess() 函数有 5 个核心参数?本实验程序中设置的各个参数的值是:a. szFilename ;b. szCmdLine ;c. NULL ;d. NULL ;e. FALSE ;f. CREATE_NE
6、W_CONSOLE;g . NULL ;h. NULL ;i. si ;j. pi 。按源程序中注释中的提示,修改源程序2-2,编译执行。步骤6:参考MSDN中的帮助文件CreateMutex()、OpenMutex()、ReleaseMutex()和WaitForSingleObject()的使用方法,理解父子进程如何利用互斥体进行同步的。给出父子进程同步过程的一个大概描述: CreateMutex()创建互斥体,OpenMutex()打开互斥体,ReleaseMutex()释放互斥体,WaitForSingleObject()检测hHandle事件的信号状态,通过这些方法可实现当前只有一个
7、进程被创建或使用,实现进程的同步。通过对进程的操作,如创建进程,实现对进程的简单控制。创建互斥体,解决了进程的同步问题,两者相互使用,使进程的运行情况得到了很好的管理。实验三 进程同步的经典算法1) 回顾系统进程、线程的有关概念,加深对Windows 2000线程的理解。2) 了解互斥体对象,通过对生产者消费者等进程间同步与互斥经典算法的实现,加深对P、V原语以及利用P、V原语进行进程间同步与互斥操作的理解。 (1). 生产者消费者问题创建一个“Win32 Consol Application”工程,然后拷贝清单3-1中的程序,编译成可执行文件。os31 (假设编译生成的可执行文件是os31.
8、exe)仔细阅读源程序,找出创建线程的WINDOWS API函数,回答下列问题:线程的第一个执行函数是什么(从哪里开始执行)?它位于创建线程的API函数的第几个参数中?第一个执行函数是Producer;位于第三个参数中。修改清单3-1中的程序,调整生产者线程和消费者线程的个数,使得消费者数目大与生产者,看看结果有何不同。运行结果生产速度快,生产者经常等待消费者;反之,消费者经常等待。修改清单3-1中的程序,按程序注释中的说明修改信号量EmptySemaphore的初始化方法,看看结果有何不同。根据步骤4的结果,并查看MSDN,回答下列问题1)CreateMutex中有几个参数,各代表什么含义。
9、有三个参数.1. LPSECURITY_ATTRIBUTES lpMutexAttributes 代表安全属性的指针2. BOOL bInitialOwner代表布尔bInitialOwner3.LPCTSTR lpName 代表LPCTSTR类型lpName2)CreateSemaphore中有几个参数,各代表什么含义,信号量的初值在第几个参数中。四个参数:1、表示采用不允许继承的默认描述符2、设置信号机的初始计数3、设置信号机的最大计数 4、指定信号机对象的名称。3)程序中P、V原语所对应的实际Windows API函数是什么,写出这几条语句。 P:Take() V:Append()4)C
10、reateMutex能用CreateSemaphore替代吗?尝试修改程序3-1,将信号量Mutex完全用CreateSemaphore及相关函数实现。写出要修改的语句:可以Mutex=CreateSemaphore(NULL,false,false,NULL);(2). 读者写者问题根据实验(1)中所熟悉的P、V原语对应的实际Windows API函数,并参考教材中读者、写者问题的算法原理,尝试利用Windows API函数实现第一类读者写者问题(读者优先)。将信号量看作生产或消费的一个对象,对信号量的生成和销毁操作如同P操作和V操作一样,生成者消费者问题模拟的就是对信号量的生成和销毁,其中
11、牵涉了信号量的同步,这也是该问题为何称为同步的经典问题的原因。实验四 存储管理(1) 通过对Windows 2000“任务管理器”、“计算机管理”、“我的电脑”属性、“系统信息”、“系统监视器”等程序的应用,学习如何察看和调整Windows的内存性能,加深对操作系统存储管理、虚拟存储管理等理论知识的理解。(2) 了解Windows 2000的内存结构和虚拟内存的管理,理解进程的虚拟内存空间和物理内存的映射关系。(1)观察和调整Windows 2000/XP的内存性能。阅读“背景知识”,请回答:1) 什么是“分页过程”?分页过程就是将信息从主内存移动到磁盘进行临时存储的过程。2) 什么是“内存共
12、享”?允许访问某些内存空间而不危及它和其他应用程序的安全性和完整性3) 什么是“未分页合并内存”和“分页合并内存”?Windows 2000中,未分页合并内存的最大限制是多少?未分页合并内存:分页合并内存是存储迟早需要的可分页代码或数据的内存部分。分业合并内存: 未分页合并内存包含必须驻留在内存中的占用代码或数据。在Windows2000中为分业合并内存的最大限制是256MB。4) Windows 2000分页文件默认设置的最小容量和最大容量是多少?内存数量的1.5倍作为分页文件的最小容量,这个最小容量的两倍作为最大容量。登录进入Windows 2000 Professional。查看包含多个
13、实例的应用程序的内存需求。1) 启动想要监视的应用程序,例如Word。2) 右键单击任务栏以启动“任务管理器”。3) 在“Windows任务管理器”对话框中选定“进程”选项卡。4) 向下滚动在系统上运行的进程列表,查找想要监视的应用程序。请在表4-3中记录:表4-3 实验记录映像名称PIDCPUCPU时间内存使用WINWORD.EXE 322000 0:00:28 14420K“内存使用”列显示了该应用程序的一个实例正在使用的内存数量。5) 启动应用程序的另一个实例并观察它的内存需求。请描述使用第二个实例占用的内存与使用第一个实例时的内存对比情况:第二个实例占用内存22612K,比第一个实例占
14、用的内存大很多。未分页合并内存。估算未分页合并内存大小的最简单方法是使用“任务管理器”。未分页合并内存的估计值显示在“任务管理器”的“性能”选项卡的“核心内存”部分。总数 (K) : 96340K 分页数: 50328 未分页 (K) : 46052K 还可以使用“任务管理器”查看一个独立进程正在使用的未分页合并内存数量和分页合并内存数量。操作步骤如下:1) 单击“Windows任务管理器”的“进程”选项卡,然后从“查看”菜单中选择“选择列”命令,显示“进程”选项卡的可查看选项。2) 在“选择列”对话框中,选定“页面缓冲池”选项和“非页面缓冲池”选项旁边的复选框,然后单击“确定”按钮。返回Wi
15、ndows 2000“任务管理器”的“进程”选项卡时,将看到其中增加显示了各个进程占用的分页合并内存数量和未分页合并内存数量。仍以刚才打开观察的应用程序 (例如Word) 为例,请在表4-4中记录:表4-4 实验记录页面缓冲池非页面缓冲池3496 53088K 473K16K从性能的角度来看,未分页合并内存越多,可以加载到这个空间的数据就越多。拥有的物理内存越多,未分页合并内存就越多。但未分页合并内存被限制为256MB,因此添加超出这个限制的内存对未分页合并内存没有影响。提高分页性能。在Windows 2000的安装过程中,将使用连续的磁盘空间自动创建分页文件(pagefile.sys) 。用
16、户可以事先监视变化的内存需求并正确配置分页文件,使得当系统必须借助于分页时的性能达到最高。虽然分页文件一般都放在系统分区的根目录下面,但这并不总是该文件的最佳位置。要想从分页获得最佳性能,应该首先检查系统的磁盘子系统的配置,以了解它是否有多个物理硬盘驱动器。1) 在“开始”菜单中单击“设置” “控制面板”命令,双击“管理工具”图标,再双击“计算机管理”图标。2) 在“计算机管理”窗口的左格选择“磁盘管理”管理单元来查看系统的磁盘配置。如果系统只有一个硬盘,那么建议应该尽可能为系统配置额外的驱动器。这是因为:Windows 2000最多可以支持在多个驱动器上分布的16个独立的分页文件。为系统配置
17、多个分页文件可以实现对不同磁盘I/O请求的并行处理,这将大大提高I/O请求的分页文件性能。请在表4-5中记录:表4-5 实验记录卷布局类型文件系统容量状态C:磁盘分区基本FAT3248.82GB状态良好(系统)D:24.5GB状态良好(页面文件)LENOVO_PART305MB状态良好(EISA配置)计算分页文件的大小。要想更改分页文件的位置或大小配置参数,可按以下步骤进行:1) 右键单击桌面上的“我的电脑”图标并选定“属性”。2) 在“高级”选项卡上单击“性能选项”按钮。3) 单击对话框中的“虚拟内存”区域中的“更改”按钮。请记录:所选驱动器 (C: ) 的页面文件大小: 驱动器: C: 可
18、用空间: 31637 MB 初始大小 (MB) :_ 最大值 (MB) :_所选驱动器 (D:(如果有的话) D: 20682 MB 756 MB_1512MB_所有驱动器页面文件大小的总数: 允许的最小值: 2 MB 推荐: 1522 MB 当前已分配:4) 要想将另一个分页文件添加到现有配置,在“虚拟内存”对话框中选定一个还没有分页文件的驱动器,然后指定分页文件的初始值和最大值 (以兆字节表示) ,单击“设置”,然后单击“确定”。5) 要想更改现有分页文件的最大值和最小值,可选定分页文件所在的驱动器。然后指定分页文件的初始值和最大值,单击“设置”按钮,然后单击“确定”按钮。6) 在“性能选
19、项”对话框中单击“确定”按钮。7) 单击“确定”按钮以关闭“系统特性”对话框。步骤7:使用任务管理器。可以使用“任务管理器”来简单地检查分页文件是否配置了正确容量。这样可以实时提供系统正在使用分页文件的方式以及其他重要系统信息的准确描述。通过右键单击任务栏运行“任务管理器”,选定“性能”选项卡查看实时的系统统计数据。与分页文件大小最有关的信息位于“认可用量”区域。这一区域显示了认可“峰值”是否达到或超过了认可“限制”,以及它是否超过了系统上的物理内存数量。认可“峰值”是指系统迄今为止向进程分配的最大物理内存和虚拟内存数量。物理内存 (K) 总数: 1039660K 可用数: 502544K 系
20、统缓存: 504332K 认可用量 (K) 400156K 限制:、 1714520K 峰值: 427648K 当系统遇到分页活动增加的情况时,提交的内存数量 (“认可总数”) 就会增加。一旦它达到了“认可限制”值,系统就需要扩展分页文件。“认可限制”值指出在不必扩展分页文件的情况下可以向内存提交的虚拟内存数量。因为目标是避免扩展分页文件,所以必须保持“认可总数”和“认可限制”值相差较大。如果这两个值接近了,那么系统必须动态增加分页文件的大小。“任务管理器”的“认可用量”区域显示的信息还说明了系统的主内存是否足以满足系统执行的任务。如果认可“总数”值经常超过系统中的内存数量,那么系统的物理内存
21、可能不足。(2)了解和检测进程的虚拟内存空间。创建一个“Win32 Consol Application”工程,然后拷贝清单4-1中的程序,编译成可执行文件。os41 (假设编译生成的可执行文件是os41.exe)根据运行结果,回答下列问题 虚拟内存每页容量为: 4.00KB 最小应用地址: 0x00010000 最大应用地址: 0x7ffeffff 当前可供应用程序使用的内存空间为: 1.99GB 当前计算机的实际内存大小为: 0.99GB 理论上每个Windows应用程序可以独占的最大存储空间是:提示:可供应用程序使用的内存空间实际上已经减去了开头与结尾两个64KB的保护区。虚拟内存空间中
22、的64KB保护区是防止编程错误的一种Windows方式。任何对内存中这一区域的访问 (读、写、执行) 都将引发一个错误陷阱,从而导致错误并终止程序的执行。按committed、reserved、free等三种虚拟地址空间分别记录实验数据。其中“描述”是指对该组数据的简单描述,例如,对下列一组数据:00010000 00012000 Committed, READWRITE, Private可描述为:具有READWRITE权限的已调配私有内存区。将系统当前的自由区 (free) 虚拟地址空间填入表4-6中。表4-6 实验记录地址大小虚拟地址空间类型访问权限描述00010000-000120008
23、.00KBfreeREADWRITE具有READWRITE权限的已调配私有内存区00012000-0002000056.0KB NOACCESS没有任何权限的已调配的共有内存区00020000-000210004.00KB00021000-0003000060.0KB00030000-0012c0000.98MB READONLY只具有READ权限的已调配私有内存区0012c000-0012d0000012d000-0013000012.0KB00130000-00133000只具有READ权限的已调配内存区00133000-0014000052.0KB00140000-0014500020.0KB00145000-002400000.98MB只具有READ权限的已调配的私有内存区00240000-0024600024.0KB具有READWRITE权限的已调配的私有内存区00246000-0025000040.0KB
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1