一、需求分析
为了更好地理解操作系统内存分配和管理的过程和机制,决定通过编程模拟操作系统内存分配的过程,以更好的理解操作系统内存分配过程中的具体执行流程。
题目描述如下:
编写一个程序,包括两个线程,一个线程用于模拟内存分配活动,另一个用于跟踪第一个线程的内存行为,要求两个线程之间通过信号量实现同步,模拟内存活动的线程可以从一个文件中读出要进行的内存操作。每个内存操作包含如下内容:
-
时间:每个操作等待时间
-
块数:分配内存的粒度
-
操作:包括保留一个区域、提交一个区域、释放一个区域、回收一个区域、加锁与解锁一个区域。可将它们的编号放置于一个文件中
- 保留是指保留进程的虚地址空间,而不分配物理地址空间
- 提交是指在内存中分配物理地址空间
- 回收是指释放物理地址空间,而保留进程的虚地址空间
- 释放是指将进程的物理地址与虚拟地址空间全部释放
-
大小:块的大小
-
访问权限:共五种 PAGE_READONLY, PAGE_READWRIYE, PAGE_EXEXUTE, PAGE_EXEXUTE_READ, PAGE_EXEXUTE_READWRIYE
二、概要设计
根据题意,要实现两个线程,通过内存分配线程从操作文件中读取操作参数,实现模拟内存分配的过程,监听线程则监视内存分配线程的执行过程,对内存分配过程中的模拟内存详细信息进行输出。采用Java的Thread实现对线程的创建,并通过重写run()方法,来设定线程中的执行代码。
内存分配线程流程图
参考文档和完整的文档和源码下载地址: