读写者问题(2)

2019-02-20 20:34

山东科技大学学生课程设计

GlobalMemoryStatus

函数功能:获得计算机系统中当前使用的物理内存和虚拟内存的信息。使用

GlobalMemoryStatus

函数可以判断应用程序能够分配多少与其它应用程序不冲突的内存空间。但

GlobalMemoryStatus 函数返回的

信息是不稳定的,我们不能保证两次调用该函数都能返回到相同的信息。

VirtualQuery

函数功能:提供有关调用进程虚拟窨中的页面信息. VirtualAlloc

函数功能:在调用进程的虚拟地址中保留或提交页面。除非设置了MEM_RESET

标志,否则被这个函数分配的内存单元被自动初始化为0。 VirtualAllocEX

函数功能:使用该函数可以保留、提交或者保留和提交进程虚拟空间的页面的基址,否则返回 NULL。 VirtualFree

函数功能:可以释放或注销调用进程虚拟空间中的页面。成功则返回一个非零值,否则返回零值。 VirtualFreeEx

函数功能:该函数可以释放或注销指定进程虚拟空间中的页面。 VirtualFreeEx 函数和VirtualFree 函数区别是:

VirtualFree 函数释放调用进程的地址空间,而VirtualFreeEx 函数可以释放任意指定的进程的地址空间。如果函数调用成功则返回非零值,否则返回零值。 VirtualLock

功能:该函数可以将进程虚拟空间中的内存加锁。以确保后面的对该区域的存取操作不会失败。成功则返回一个非零值,否则返回一个零值。 VirtualUnlock

功能:该函数可以将进程虚拟空间指定范围内的页面解锁,从以系统在必要时可以将这些页面换出到页面文件中。函数调用成功则返回一个非零值,否则返回零值。 3.主要代码段

首先,定义两个结构体

山东科技大学学生课程设计

struct operation和struct trace,分别记录对内存的操作信息和跟踪每一次分配活动,并为之分别定义信号量allo和rac,以实现对内存操作的互斥。具体实现用函数WaitForSingleObject (trac,INFINITE)和ReleaseSemaphore (allo,1,NULL)来实现。 函数DWORD Tracker (LPDWORD lpdwparm) 用以跟踪allocator线程的内存行为,并输出必要信息。函数void Allocator () 用以模拟内存分配活动的线程。

四、实验结果

五、总结

1)保留一块区域的操作减少了虚拟空间中未保留与未提交的存储空间。

2)提交一块区域的操作减少了页面文件可用字节数。

山东科技大学学生课程设计

3)锁一块区域的操作只减少了物理存储空间的字节数。 4)解锁一开空间的操作只增加物理存储空间的字节数。 5)回收一块的操作只增加页面文件可用字节数和物理存储空间的字节数。

6)释放一块区域的操作只增加虚拟空间中未保留与未提交的存储空间。 分析:

1. 内存的提交是由物理存储器支持的页面,他可在页面中,也可在页面文件中

2. 保留页面相反,他完全不由物理页面支持。 3. VirtualLock可用在物理内存中锁定一块内存。

山东科技大学学生课程设计

设计三 快速文件系统

一、设计目的

众所周知,CPU是整个计算机系统中运算速度最快的部分,而外部设备是最慢的部分,它们之间存在着很大的差别。然而,CPU却时时刻刻可能要求访问外设。如果CPU的每次操作都必须等待外设完成,那么CPU宝贵的运行时间就会大大浪费。随着现代计算机技术的发展,大多数现代操作系统都对这个问题进行了处理。下面就介绍Windows 2000中解决这个不匹配问题的方法:高速缓存和异步传输。 二、设计要求

设计一个函数int filter(char source, char *sink, int f),其中: source:源文件,即从哪个文件读。 sink:目标文件,即写到哪个文件。 f:一个对文件的操作(可以指定任何操作) 分别用3种方法实现一个对文件的操作: 1)无缓冲方式:表示用的标志位是FILE_FLAG_NO_BUFFERING。 2)缓冲方式:表示用的标志位是

FILE_FLAG_SEQUENTIAL_SCAN。

3)异步方式:表示用的标志位是FILE_FLAG_OVERLAPPED。

三、设计说明

1.文件高速缓存

文件高速缓存是CPU访问外设的一个“中间设备”。说是设备,其实它不是真正的物理设备,而是一种核心级内存映像机制。由于它被设置在内存中,因此速度非常快,可以部分解决CPU与硬盘速度差异的问题。文件系统的驱动程序通过调用“高速缓存管理程序” 来使用文件高速缓存,然后高速缓存管理程序执行高速缓存的处理工作。

文件高速缓存的原理是:假设一个进程读了文件的第一个字节,它常常会按照顺序读第二个第三个字节,一直到读出所有的

山东科技大学学生课程设计

字节。利用这个原理可以进行“预取”,也就是说,在进程没请求读磁盘之前就先把文件读出来并放到高速缓存中。这样,当进程请求访问磁盘时,高速缓存可以快速地把已经取到内存中的文件内容直接送给进程使用,从而大大加速了访问磁盘的速度。另外,由于一个文件可能会被多次读入,因此可以在第一次读入后,将文件数据保存在高速缓存中。这样,下次再读时,就不必从硬盘而可以从缓存中读取。利用LRU(Least Recently Used)的原则,可以将不常使用的文件从缓存中删除以节省高速缓存空间。 2.异步传输

与文件高速缓存不同,文件的异步传输是一种改变指令执行顺序的机制。在以往的操作系统中,指令都是顺序执行的,下一条指令必须在上一条指令执行完毕后才能执行。因此,如果CPU遇到一条放盘指令,那么它就必须等待缓慢的磁盘访问结束以后才能进行后续工作。如果它后面遇到的指令并不依赖于访盘操作时,这个等待就很没有必要。Windows2000中使用了一种异步文件传输机制来解决这个问题。它通过设置打开文件时的一个标志位来使进程不等待读些文件操作而继续执行。当后续指令必须用到磁盘访问的结果数据时,它在通过一条Wait指令进行等待。这样,在访盘指令和等待指令之间的指令就可以与磁盘访问同时进行了,从而大大加快了系统的整体速度。

实际测试当中,采用一个37KB的文本文件,输出结果如下:


读写者问题(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:(北师大版)五年级数学上册知识点归纳讲解

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

马上注册会员

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