2010操作系统实验及其参考答案(完整版)(5)

2018-11-22 20:28

可以正常运行

步骤6:在工具栏单击“Execute program”按钮,执行4-1.exe程序。

运行结果(如果运行不成功,原因是什么?):

阅读和分析4-2的程序,请回答下列问题: 1)使用了哪个系统API函数来创建线程实例? 使用了CreateThread系统API函数来创建线程实例

2)文件的读和写操作分别使用了哪个API函数?

文件的读和写操作分别使用了ReadFile()和WriteFile()API函数

3)在程序中,重置文件使用了哪一个函数? 在程序中,重置文件使用了CloseHandle()函数

2. 文件映射对象

在线程间使用的由页式文件支持的文件映射对象,从中可以看出利用内存映射文件比使用驻留在磁盘上的文件对象更为简单,其中的进程还使用了互斥信号量,以使公平地访问文件映射对象,然后,当每个线程都释放时,程序将文件的视图映射到文件上并增加数据的值。

步骤1:在工具栏单击“新建”按钮,编写代码保存为4-2.cpp。 实现功能:演示使用映射文件的内存交换数据的线程

参考类与函数:windows.h、iostream、WaitForSingleObject()、MapViewOfFile()、UnmapViewOfFile()、 ReleaseMutex()、MakeSharedFile()、CreateFileMapping()、ZeroMemory()。

步骤2:单击“Build”菜单中的“Compile 4-2.cpp”命令,再单击“是”按钮确认,系统对4-2.cpp进行编译。

步骤3:编译完成后,单击“Build”菜单中的“Build 4-2.exe”命

令,建立4-2.exe可执行文件。

操作能否正常进行,如果不行,原因是什么? 可以正常运行

步骤4:在工具栏单击“Execute program”按钮,执行4-2.exe程序。

运行结果(如果不成功,原因是什么?):

请回答:

1)程序中用来创建一个文件映射对象的系统API函数是什么? 创建一个文件映射对象的系统API函数是CreateFileMapping()

2)在文件映射上创建和关闭文件视图分别使用了哪一个系统函数?

a. MapViewOfFile()

b. UnmapViewOfFile()

3)填空:

通过(CreateFileMapping())函数创建一个小型的文件映射对象

(hMapping),接着,使系统API函数(CreateMutex())再创建一个保护其应用的互斥信号量(g_hMutexMapping)。然后,应用程序创建100个线程,每个都允许进行同样的进程,即:通过互体获得访问权,这个操作是由语句:

:: WaitForSingleObject(g_hMutexMapping, INFINITE) ; 实现的。再通过函数(MapViewOfFile())操作将视图映射到文件,将高32位看作有符号整数,将该数值增加(即命令:

++ (* pnData) ; ),再将新数值显示在控制台上,每个线程清除文件的视图并在退出之前释放互斥信号量的语句是:

:: ReleaseMutex(g_hMutexMapping); ,当线程完成时,应用程序关闭并退出。

4.5 实验总结

1.了解了运用CreateFile()函数在磁盘上创建一个新文件或当打开一个已经存在的文件,然后使用ReadFile()和WriteFile()函数在永久存储和应用程序间通过文件对象来移动数据。

2.了解了内存映射文件的方法,使用CreateFileMapping()创建文件映射对象和OpenFileMapping()函数来读取和写入数据,比使用ReadFile()和WriteFile()函数更为简单,并且可以使用互斥信号量来公平地访问文件映射对象。

3.用CreateFile()函数可打开和创建文件、管道、邮槽、通信服务、设备以及控制台缓冲区,函数原型及各参数含义为: HANDLE CreateFile(

LPCTSTR lpFileName, //指向文件名的指针 DWORD dwDesiredAccess, //访问模式(写/读) DWORD dwShareMode, //共享模式

LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针

DWORD dwCreationDisposition, //如何创建 DWORD dwFlagsAndAttributes, //文件属性 HANDLE hTemplateFile //用于复制文件句柄 );

4.6 实验评价(教师)

实验5 存储管理

提高Windows 2000内存性能

(实验估计时间:50分钟)

5.1 背景知识

耗尽内存是Windows 2000 系统中最常见的问题之一,当系统耗尽内存时,所有进程对内存的总需求超出了系统的物理内存总量,随后,Windows 2000必须借助它的虚拟内存来维持系统和进程的运行,虚拟内存机制是Windows 2000操作系统的重要组成部分,但它的速度比物理内存慢得多,因此,应该尽量避免耗尽物理内存的资源,以免导致性能下降。

解决内存不足问题的一个有效的方法就是添加更多的内存,但是,一旦提供了更多的内存,Windows 2000很可能会立即“吞食”,而事实上,添加更多的内存并非总是可行的,也可能只是推迟了实际问题的发生,因此,应该相信,优化所拥有的内存是非常关键的。 1. 分页过程

当Windows 2000求助于硬盘以获得虚拟内存时,这个过程被称为分页(paging),分页就是将信息从主内存移动到磁盘进行临时存储的过程,应用程序将物理内存和虚拟内存视为一个独立的实体,甚至不知道Windows 2000使用了两种内存方案,而认为系统拥有比实际内存更多的内存。例如:系统的内存数量可能只有16MB,但每一个应用程序仍然认为有4GB内存可供使用。

使用分页方案带来了很多好处,不过就是有代价的,当进程需要已经交换到硬盘上的代码或数据时,系统要将数据送回物理内存,并在必要时将其他信息传输到硬盘上,而硬盘与物理内存在性能上的差异很大,例如:硬盘的访问时间通常为4-10ms,而物理内存的访问时间为60us,甚至更快。

2. 内存共享

应用程序经常需要彼此通信和共享信息,为了提高这种能力,Windows 2000必须允许访问某些内存空间而不危及它和其他应用程序

的安全性和完整性,从性能的角度来看,共享内存的能力大大减少了应用程序使用的内存数量,运行一个应用程序的多个副本时,每一个实例都可以使用相同的代码和数据,这意味着不必维护所加载应用程序代码的单独副本并使用相同的内存资源,无论正在进行多少个应用程序实例,充分支持应用程序代码所需求的内存数量都相对保持不变。 3)未分页合并内存与分页合并内存

Windows 2000决定了系统内存组件哪些可以以及哪些不可以交换到磁盘上,显然,不应该将某些代码(例如内核)交换出主内存,因此,Windows 2000将系统使用的内存进一步划分为未分页合并内存和分页合并内存。

分页合并内是存储迟早需要的可分页代码或数据的内存部分,虽然可以将分页合并内存中的任何系统进程交换到磁盘上,但是它临时存储在主内存的这一部分,以防系统立刻需要它,在将系统进程交换到磁盘上之前,Windows 2000会交换其他进程。

未分页合并内存包含必须驻留在内存中的占用代码或数据,这种结构类似于早期MS-DOS程序使用的结构,在MS-DOS中,相对较小的终止、驻留程序在启时加载到内存中,这些程序在系统重新启动或关闭之前一直驻留在内存的特定部分中,例如,防病毒程序将加载为TSR程序,以预防可能的病毒袭击。

未分页合并内存中包含的进程留在主内存中,并且不能交换到磁盘上,物理内存的这个部分用于内核模式操作(例如:驱动程序)和必须保留在主内存中才能有效工作的其他进程,没有主内存的这个部分,内核组件就是可分页的,系统本身就有变得不稳定的危险。

分配到未分页内存池的主内存数量取决于服务器拥有的物理内存数量以及进程对系统上的内存空间的需求,不过,Windows 2000将未分页合并内存限制为256MB(在Windows NT4中限制为128MB),根据系统中物理内存数量,复杂的算法在启动时动态确定Windows 2000系统上的未分页合并内存的最大数量,Windows 2000内部的这一自我调节机制可以根据当前的内存配置自动调整大小,例如:如果增加或减少系统中的内存数量,那么Windows 2000将自动调整未分合并内存的大小,以反映这一更改。 4)提高分页性能

只有一个物理硬盘驱动器的系统限制了优化分页性能的能力,驱动器必须处理系统和应用程序的请求以及对分页文件的访问,虽然物理驱动器可能有多个分区,但是将分页文件分布到多个分区的分页文件并不能提高硬盘驱动器的能力。只有当一个分区没有足够的空间来包含整个分页文件时,才将分页文件放在同一个硬盘的多个分区上。 拥有多个物理驱动器的服务器可以使用多个分页文件来提高分页


2010操作系统实验及其参考答案(完整版)(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:文刀川页丛书2010届中考物理专题训练及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: