第12章内存管理实验ppt课件.ppt
第12章相关说明,说明:(1)实验相关ppt内容选自操作系统课程设计的核心实验,本实验为内存管理实验,加强学生对内存分配的理解。(2)该实验中学生对windows操作系统api函数很陌生,缺乏对它们实践,以及对内存分配的原理认识不够,讲解时原理部分要重复讲解,督促学生多利用网络资源进一步加深对操作系统函数的理解,有遗力的同学可以学习Linux内核内存分配代码。,第12章:内存管理实验,提纲,提纲,实验目的,了解Windows XP/7及Linux内存管理机制。掌握页面虚拟存储技术。了解内存分配原理,特别是以页面为单位的虚拟内存分配方法。学会使用Windows XP/7下内存管理的基本API函数。了解进程中内存分配与虚内存的区别;,提纲,实验内容,运行vs,创建工程,并导入virtumem.cpp文件。再次编译,通过后直接在vs下运行,观察输出结果,确信六种虚存操作都出现过。看懂程序,要求另写一段小程序,获得当前系统的存储空间使用概况。编译、运行小程序,观察结果。打开memoryAlloc.cpp运行vs,直接编译memoryAlloc.cpp,创建了一个工程。编译、运行小程序,观察结果。,实验内容,小组任务 根据实验课提供的Windows虚拟内存管理代码以及相关Linux内存管理知识在Linux系统下完成同样功能的程序。,提纲,实验算法,堆和栈的区别?,实验算法,Windows系统存储器管理相关知识页面文件 以磁盘文件的形式来存储没有装入内存的程序和数据文件部分,文件名为pagefile.sys,默认安装在系统盘的根目录下,属性为系统隐藏文件。通过系统设置可以使页面文件位于非系统盘的根目录下。虚拟内存 页面文件和物理内存共同构成“虚拟内存”,必要情况下,Windows操作系统可将数据从页面文件移至内存,或将数据从内存移至页面文件,以便为新数据释放内存空间。,实验算法,Windows系统存储器管理相关知识Windows的虚拟存储技术 Windows采用分页存储方式,实现虚拟内存技术,利用页面文件在内存中的调入调出实现物理内存的扩展。虚拟内存的页面状态 A提交页面:已经分得物理存储的虚拟地址页面,通过设定该区域的属性可对它加以保护。B保留页面:逻辑页面已分配,但尚未分配物理存储页面,即为某些进程保留的一部分虚拟地址。C空闲页面:可以保留或提交的可用页面,对当前的进程是不可存取的。,实验算法,Windows系统存储器管理相关知识页面操作A保留:保留进程的虚拟地址空间,而不分配物理存储空间。B释放:全部释放物理存储和虚拟地址空间。C提交:为进程的虚拟地址分配物理存储空间,可以对处于空闲、保留、提交状态的页面进行提交操作。D回收:释放物理内存空间,保留虚拟地址空间。E加锁:对已提交的页面进行加锁,使得页面常驻内存而不会产生缺页现象。F解锁:对已加锁的页面进行解锁操作。,实验算法,Windows内存管理Windows内存管理程序采用VS编译器编译。程序最初执行时交没有给地址指针BASE_PTR赋初值,所以在前几次随机的虚存模拟活动中可能导致动作失败,但这不影响程序功能的实现。,实验算法,Windows系统API函数(1)GlobalMemoryStatus:获取存储系统的概况及程序存储空间的使用状况。void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer)GlobalMemoryStatus是本实验重要的API函数,该函数无返回值,参数是一个指向名为MEMORYSTATUS的结构的指针。函数的返回信息会被存储在MEMORYSTATUS结构中。,实验算法,Windows系统API函数(2)VirtualQuery:查询一个进程的虚拟内存。DWORD VirtualQuery(LPCVOID lpAddress,/指向查询页区域基地址的指针PMEMORY_BASIC_INFORMATION lpBuffer,/查询信息返回到该缓冲区中SIZE_T dwLength/lpBuffer指向缓冲区的大小);,实验算法,Windows系统API函数(3)_beginthreadex:创建新线程执行指定的可执行模块。,实验算法,Windows系统API函数(4)VirtualAlloc:保留或提交某一范围的虚拟地址LPVOID VirtualAlloc(LPVOID lpAddress,/分配内存区域的地址 SIZE_T dwSize,/要分配或者保留的区域的大小DWORD flAllocationType,/分配类型,页面状态(类型):MEM_COMMIT或MEM_RESERVE DWORD flProtect/页面属性,指定了被分配区域的访问保护方式);返回值:如果调用成功,返回分配的首地址;否则,返回NULL。可通过GetLastError函数来获取错误消息,实验算法,Windows系统API函数(5)VirtualFree:解除已被提交的或者释放被保留(或提交)的进程虚拟地址空间。BOOL VirtualFree(LPVOID lpAddress,/要释放的页面区域的地址 SIZE_T dwSize,/区域大小 DWORD dwFreeType/类型);其中dwFreeTye参数的内容如下:MEM_DECOMMIT:取消VirtualAlloc提交的页;MEM_RELEASE:释放指定页,如果制定了这个类型而dwSize设置为0,否则函数会调用失败。返回值:如果调用成功,返回一个非0值;否则,返回0,实验算法,Windows系统API函数(6)VirtualProtect:改变虚拟内存页的保护方式(所操作的区块必须是由同一次分配动作保留或提交的区块)BOOL VirtualProtect(LPVOID lpAddress,/目标地址起始位置 SIZE_T dwSize,/要变更的记忆体分页区域的大小 DWORD flNewProtect,/请求的保护方式 PDWORD lpflOldProtect/输出参数,指向保护原保护属性值的DWORD变量,可以为NULL);返回值:返回BOOL值,表示是否成功,可以使用GetLastError函数获取错误代码。,实验算法,Windows系统API函数(7)VirtualLock:对虚拟内存页加锁以保证对它们的使用不会出现缺页现象。VirtualLock(LPVOID lpAddress,SIZE_T dwSize);VirtualUnlock:对加锁的虚拟内存页解锁。VirtualUnlock(LPVOID lpAddress,SIZE_T dwSize);,实验算法,相关数据结构1)相关数据结构:Actnum:指示器,通过它实现两个线程的同步和信息传递。初始化为0,模拟线程将0值改变为一个16的随机数,监视线程恢复它的初值0.BASE_PTR:地址指针,记录虚存分配操作时返回的虚存起始地址,程序初始执行时并没有赋初值,所以在开始几次随机的虚存模拟活动中可能导致动作失败。2)存储系统的统计指标:A 系统虚拟和物理内存的指标,实验算法,相关数据结构3)内存状态:typedef struct _MEMORYSTATUS/mst DWORD dwLength;/sizeof(MEMORYSTATUS)DWORD dwMemoryLoad;/percent of memory in use DWORD dwTotalPhys;/bytes of physical memory DWORD dwAvailPhys;/free physical memory bytes DWORD dwTotalPageFile;/bytes of paging file DWORD dwAvailPageFile;/free bytes of paging file DWORD dwTotalVirtual;/user bytes of address space DWORD dwAvailVirtual;/free user bytes MEMORYSTATUS,*LPMEMORYSTATUS;,实验算法,相关数据结构内存基本信息_MEM_MEMORY_BASIC_INFORMATION PVOID BaseAddress;PVOID AllocationBase;DWORD AllocationProtect;/页面属性 SIZE_T RegionSize;DWORD State;/页面状态 DWORD Protect;/取值可能与AllocationProtect相同 DWORD Type;/内存块类型MEMORY_BASIC_INFORMATION,*PMEMORY_BASIC_INFORMATION;,实验算法,相关数据结构页面状态state:提交状态:MEM_COMMIT 释放状态:MEM_FREE 保留状态:MEM_RESERVE内存块类型的变量type:镜像:MEM_IMAGE 映射:MEM_MAPPED 私有:MEM_PRIVATE,实验算法,相关数据结构页面属性变量AllocationProtect六种取值:只读:PAGE_READONLY 只读写:PAGE_READWRITE 可执行:PAGE_EXECUTE 可执行和读取:PAGE_EXECUTE_READ 可执行读写:PAGE_EXECUTE_READWRITE 不允许存储:PAGE_NOACCESS,实验算法,Linux虚拟内存管理 图2-6-1 虚拟内存的实现机制,实验算法,Linux虚拟内存管理 请求分页:首先内存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址,在用户程序运行时,如果发现程序中要用的虚拟地址没有对应的物理地址,就发出请求分页要求:如果有空闲的内存可供分配,就请求分配内存,并把正在使用的物理页记录在页缓存中,如果没有足够的内存分配,就调用交换机制,腾出一部分内存。另外在地址映射中要通过 TLB(翻译后援存储器)来寻找物理页,交换机制中要用到交换缓存,并且把物理页内容交换到交换文件中也要修改页表来映射文件地址。,提纲,实验示例,实验示例,实验示例,实验示例,实验示例,