当前位置:首页 > 计算机操作系统实验讲义
}
}//if结束
else{System.out.println(\请求资源已超过所需资源!\
}//while结束
}
2 1 1 //第2个进程请求第1类资源1个Request[1][0]=1 本程序假设当前时刻只有一个进程请求某一类资源n个.
若要满足某个进程当前时刻同时请求不止一类资源,则需要为最大需求矩阵Max,分配矩阵Allocation和需求矩阵Need增加维数,当然代码量也将大大增加,但是算法逻辑本身并无变化.
实验四 操作系统内存结构
1.实验目的
(1)通过实验了解操作系统内存的使用,学习如何在应用程序中管理内存,体会Windows应用程序内存的简单性和自我保护能力。
(2)了解Windows XP的内存结构和虚拟内存的管理,进而了解进程堆和Windows为使用内存而提供的一些扩展功能。 2.实验预备知识
(1)阅读教材关于存储器管理和虚拟存储器管理的内容。 (2)熟悉Visual C++的简单使用。
(3) Windows XP是32位的操作系统,它使计算机CPU可以用32位地址对32位内存块进行操作。内存中的每一个字节都可以用一个32位的指针来寻址,这样,最大的存储空间就是232字节4000兆字节(4GB),在Windows下运行的每一个应用程序都认为能独占4GB 内存了。显然,Windows在幕后将虚拟内存(virtual memory,VM)地址映射到了各进程的物理内存上。而所谓物理内存是指计算机的RAM和由Windows分配到用户驱动器根目录上的换页文件。物理内存完全由系统管理。
(4) Windows提供了一个API,即GetSystemInfo(),以便用户能检查系统中虚拟内存的一些特性。
(5)MSDN的使用。 3.实验环境
(1)一台运行Windows XP操作系统的计算机。 (2)选用turbo c、visual c++、Java等任何一种语言,建议用visual c++和Java。
4.实验时间:2个机时。 5.实验内容
实验步骤如下:
(1) 登陆操作系统(Windows 2000、Windows XP或Windows Sever 2003) (2) 运行Visual C++6.0(或Visual C++.NET) (3) 在工具栏击“File\\new\\projects”,选择”Win32 Console Application”,并添上“Project name”,选择“OK”,然后选择“A simple application”,选择“Finish”。
(4) 编写程序,然后程序进行编译,并运行。 (5) 试记录以下结果:
①虚拟内存每页容量是多少? ②最小应用地址是多少? ③最大应用地址是多少?
④当前可供应用程序使用的内存空间是多少? ⑤当前计算机的实际内存是多大?
提示:可供应用程序使用的内存空间实际上已经减去了开头与结尾两个64KB的保护区。虚拟内存空间的64KB保护区是防止编程错误的一种Windows方式。任何对内存中这一区域的访问(读、写、执行)都将引发一个错误陷阱,从而导致错误并终止程序的执行。也就是说,假如用户有一个NULL指针(地
址为0),但仍试图在此之前很近的地址处使用另一个指针,这将因为试图从更低的保留区域读写数据,从而产生意外错误并终止程序的执行。
6.参考算法 #include \#include
#pragma comment(lib,\int main() {
//首先获得系统信息 SYSTEM_INFO si;
::ZeroMemory(&si,sizeof(si)); ::GetSystemInfo(&si);
//使用外壳辅助程序对一些尺寸进行格式化 TCHAR szPageSize[MAX_PATH];
::StrFormatByteSize(si.dwPageSize,szPageSize,MAX_PATH); DWORD
dwMemSize=(DWORD)si.lpMaximumApplicationAddress-(DWORD)si.lpMinimumApplicationAddress;
TCHAR szMemSize[MAX_PATH];
::StrFormatByteSize(dwMemSize,szMemSize,MAX_PATH);
//将内存信息显示出来
std::cout<<\ < std::cout<<\ < <<(DWORD)si.lpMinimumApplicationAddress < std::cout<<\ < <<(DWORD)si.lpMaximumApplicationAddress < std::cout<<\ < 参考结果如下: Virtual memory page size:4.00 KB Minimum application address:0X00010000 Maximum application address:0X7ffeffff Total available virtual memory1.99 GB Java程序2 主程序设计: public static void main(String[] args) throws IOException { memory mymemory = new memory(100); System.out.println(\内存管理程序 演示\ while (true) { System.out.println(\输入数字来执行相对应的任务:1->增加进程(a,b,c);2->查看内存分配情况;3->撤销一个进程\ mymemory.addunit(new unit(\nit(\ break; case 2: mymemory.printall(); break; case 3: mymemory.delunit(mymemory.getName()); } } }
共分享92篇相关文档