1、 操作系统 实验报告 实验名称: 操作系统的存储管理方式 班 级: 姓 名: 学 号: 类 型: 实验地点: 日 期: 一、实验目的: 1. 动态测试WINDOWS2000/XP系统内存 二、实验环境: 1. PC机一台(VC、C、VB等编程环境) 三、实验内容和要求: 1.了解WINDOWS 用户进程地址空间分布、系统地址空间分布、WINDOWS中用户空间内存分配方式(以页为单位的虚拟内存分配方法)、WINDOWS的内存保护机制。 四、实验步骤:
2、
#include
3、 //当前空闲的内存块数 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=
4、new char[NEME_LEN];
strcpy(pName,Name);
PageTable=new int[MM_SIZE];
for(int i=0;i 5、/获取进程编号
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 6、 PROCESS::UnionTable(int i,int j)
{
PageTable[i]=j;
return;
}
void PROCESS::PrintPageTable(void)
{
cout<<" PAGETABLE (页表)"< 7、d); //初始化
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 Ini 8、tial_MM(void)
{
memset(MM,0,sizeof(int)*MM_SIZE); //缺省所有内存块空闲(0)
int USE=rand()%4+2; //初始内存占用系数
int UsedMM=MM_SIZE/USE; //初始内存占用数 (占用率=USEMM/MM_SIZE)
for(int i=0;i 9、
}
UsedNum+=UsedMM;
FreeNum-=UsedMM;
return;
}
/*菜单*/
void Menu(void)
{
int select;
while(true)
{
system("cls");
cout< 10、ut< 11、rn;
}
/*查看内存状态*/
void CheckMM(void)
{
system("cls");
cout< 12、< 13、");
cout< 14、turn;
}
else
{
ProCnt++;
UsedNum+=pN;
FreeNum-=pN;
}
/*创建新进程并插入进程队列*/
PROCESS* NewPro=new PROCESS(name,pN); //创建新进程对象并申请空间
PROCESS* tmp=NewPro; //把新进程插入进程队列
tmp->next=ProLinkHead->next;
ProLinkHead->next=tmp;
/*为进程分配内存*/
int j=0;
for(int i=0;i 15、ZE;j++) //枚举空闲的内存块号
if(MM[j]==0)
{
MM[j]=tmp->GetpID();
tmp->UnionTable(i,j);
break;
}
}
cout< 16、 17、ME);
return;
}
cout<<"输入PID 查看指定进程的详细信息: "< 18、l;
cout<<" PROCESS_"< 19、<<"你现在只能返回菜单"< 20、lect==1) //删除指定用户进程
{
int pid;
cout<<"输入页号 : ";
cin>>pid;
bool flag=false; //标记是否找到编号为pid 的进程
PROCESS* p1=ProLinkHead;
PROCESS* p2=ProLinkHead->next;
while(p2)
{
if(p2->GetpID()!=pid)
{
p1=p1->next;
p2=p2->next;
}
else
{
flag=true;
p1->next=p2->next;
delete p2; //释放pid 进程对象占用的空间
21、break;
}
}
if(flag)
{
ProCnt--;
for(int i=0;i 22、ESS* tmp=p;
p=p->next;
delete tmp;
}
ProLinkHead->next=0;
for(int i=0;i
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818