操作系统高级课程 - 内存管理实习
基本信息
- 课程: 操作系统高级课程 (0B104)
- 来源: 田浩然上传的资料
- 页数: 20页
- 文件大小: 312.00 KB
- 日期: 2008年3月5日
核心内容
本文档是操作系统高级课程的实习指导,主题为内存管理。
实习题目说明
实习要求
在 Windows 环境下,编写一个程序,包括两个线程,线程作用如教材中内存管理示例。将 VirtualAlloc 函数的参数 flAllocationType 分别改为:
- MEM_RESET
- MEM_TOP_DOWN
将 flProtect 参数分别改为:
- PAGE_GUARD
- PAGE_NOACCESS
- PAGE_NOCACHE
执行后查看内存分配的结果。
查阅 MSDN,找到上述参数的属性含义。
实现提示
- 参考《Windows 内核实验教程》中内存管理实习(P91)
- 相应的 API 函数参考《Windows 内核实验》中的内存管理实习和 MSDN
思考题
- 分析不同参数的设置对内存分配的结果影响
- 如果调换分配、回收、内存复位、加锁、解锁、提交、回收的次序,会有什么变化,并分析原因
- 若要实现一个支持200行乘256列的电子表格应用程序,可以采用二维矩阵或者链表来控制这些表元。前者访问快速,但存储开销很大;后者存储节约,但是查找速度很慢。请给出一种方法,使得它可以得到定义矩阵技术提供的快速简便访问和链表技术提供的优良存储节约
- 不需要写出具体程序,但要明确程序要做哪些工作,在分析报告中详细写出
- 查找有关资料,总结物理存储提交的不同方法,并比较各自的优缺点
深入思考题
- 物理页面的三种状态 free、reserved、commit 的含义
- VirtualAlloc 存在哪两种主要的调用方式,各实现什么功能?
- VirtualFree 存在几种主要的调用方式,各实现什么功能?
- 内存映射文件可以用来解决哪些问题,如何使用?
- 什么是互斥,什么是同步,互斥和同步的区别是什么?本实验中用到的是什么?
- 提交对页面可用字节数和物理可用空间有什么影响?
- 在多数通用操作系统中,内存管理分为哪三个层次,分别实现什么功能?
- 引入线性地址在操作、管理、划分、保护等方面带来了什么好处与开销?
- 为什么需要引入多级页表,引入多级页表有什么好处,带了了什么开销?
- 多数操作系统中,把内存划分为系统区和用户区,为什么要进行这种划分,需要什么硬件支持?
- 物理存储提交的不同方法,比较各自的优缺点
- 本实验中用到的主要函数及其参数,名称及含义
背景知识
Windows 的用户进程的虚拟内存空间管理和分配方法:
- 作为 32 位操作系统,提供 32 位虚地址,每个进程虚地址空间最多 4GB,其中 2GB 为进程的私有空间,操作系统占用剩下的 2GB
- Windows 以页为单位进行虚拟内存分配,利用二级页表结构来实现虚拟地址向物理地址的变换
- 虚拟地址 → 页目录索引,页表索引和字节索引
- 页面状态:空闲页面,保留页面,提交页面
关键 API
GetSystemInfo
- 说明:在一个 SYSTEM_INFO 结构中载入与底层硬件平台有关的信息
- 参数 lpSystemInfo:指向一个 SYSTEM_INFO 结构
GlobalMemoryStatus
- 说明:获得计算机系统中当前使用的物理内存和虚拟内存的信息
- 参数 lpBuffer:指向 MEMORYSTATUS 数据结构
VirtualAlloc
- 说明:在调用进程的虚拟地址中保留或提交页面
- 返回值:若成功,返回所分配页面的基址;否则返回 NULL
- 参数:
- lpAddress:待分配空间的起始地址
- dwSize:定义分配空间的大小
- ftAllocationType:MEM_COMMIT(分配物理内存)或 MEM_RESERVED(保留虚拟地址空间)
- flProtect:访问保护的类型
VirtualFree
- 说明:释放、回收或释放并回收进程虚拟地址空间中的页面
- 参数:
- lpAddress:释放页面的基址
- dwsize:定义释放区域的大小
- dwFreeType:MEM_DECOMMIT(回收提交的页面)或 MEM_RELEASE(释放保留的页面)
VirtualLock / VirtualUnlock
- 用于将进程虚拟地址空间中的指定区域锁近/解锁内存
CreateSemaphore / ReleaseSemaphore
- 信号量对象的创建和计数增加
WaitForSingleObjects / WaitForMultipleObjects
- 等待对象处于有信号状态或超时
CreateThread
- 创建执行线程,参数包括启动地址、创建标志、线程标识符
关键概念
- 虚拟内存管理 — Windows 以页为单位进行虚拟内存分配
- 页面状态 — free(空闲)、reserved(保留)、commit(提交)
- VirtualAlloc — 核心内存分配 API
- 内存保护 — PAGE_GUARD、PAGE_NOACCESS、PAGE_NOCACHE 等保护类型
- 页面目录和页表 — 二级页表结构实现虚拟地址到物理地址的映射
行动点
- 完成实习程序,测试不同参数对内存分配的影响
- 查阅 MSDN 理解各参数的完整含义
- 深入理解 Windows 虚拟内存管理机制
- 完成思考题分析报告