- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统的存储管理方式.doc
操作系统 实验报告
实验名称:
操作系统的存储管理方式
班 级:
姓 名:
学 号:
类 型:
实验地点:
日 期:
一、实验目的:
动态测试WINDOWS2000/XP系统内存
二、实验环境:
PC机一台(VC、C、VB等编程环境)
三、实验内容和要求:
1.了解WINDOWS 用户进程地址空间分布、系统地址空间分布、WINDOWS中用户空间内存分配方式(以页为单位的虚拟内存分配方法)、WINDOWS的内存保护机制。
四、实验步骤:
#includeiostream
#includecstring
#includectime
#includewindows.h
using namespace std;
const int MM_SIZE=100; //内存块数
const int ROW=10; //绘制内存行数
const int COL=10; //绘制内存列数
const int NEME_LEN=10; //名字长度
const int WAITTIME=2000; //等待时间
int UsedNum=0; //当前已占用的内存块数
int FreeNum=MM_SIZE; //当前空闲的内存块数
int ProCnt=0; //当前用户进程数
int NowID=1; //当前分配的进程编号
int MM[MM_SIZE]; //Main Memony
//0 - 内存块未被使用
//-1 - 内存块在初始化时已被系统占用
//k - 内存块已被分配给pID=k 的用户进程
/*进程Obj*/
class PROCESS
{
public:
PROCESS():next(0){} //构造函数重载,用于构造队列队头
PROCESS(char* Name,int pN):PageNum(pN),next(0)
{
pName=new char[NEME_LEN];
strcpy(pName,Name);
PageTable=new int[MM_SIZE];
for(int i=0;iMM_SIZE;i++)
PageTable[i]=-1;
pID=NowID++;
}
~PROCESS()
{
delete pName;
delete PageTable;
}
PROCESS* next; //指向下一个进程
char* GetpName(void)const {return pName;} //获取进程名
int GetpID(void)const {return pID;} //获取进程编号
int GetPageNum(void)const {return PageNum;} //获取进程所需页数
void UnionTable(int i,int j); //关联页号i 与块号j(创建页表)
void PrintPageTable(void); //打印页表
protected:
char* pName; //进程名
int pID; //进程编号
int PageNum; //进程所需页数
int* PageTable; //页表
};
PROCESS* ProLinkHead=new PROCESS; //申请进程队列队头空间
void PROCESS::UnionTable(int i,int j)
{
PageTable[i]=j;
return;
}
void PROCESS::PrintPageTable(void)
{
cout PAGETABLE (页表)endl;
cout 页号ID 块号ID#endl;
for(int i=0;iMM_SIZE;i++)
if(PageTable[i]!=-1)
printf( %-2d %-2d\n,i,PageTable[i]);
coutendl;
return;
}
void Initial_MM(void); //初始化
void Menu(void); //菜单
void CheckMM(void); //查看内存状态
void PrintProList(void); //打印当前用户进程列表
void CheckPro(void); //查看进程状态
void CreatePro(void); //创建新用户进程
void DelPro(void); //删除用户进程
/*主函数*/
int main(void)
{
srand(time(0));
Initial_MM();
Menu();
return 0;
}
/*初始化内存状态*/
void Initial_MM(void)
{
memset(MM,0,sizeof(int)*MM_SIZE); //缺省所
文档评论(0)