北理工操作系统内存管理实验报告Word文档格式.docx

上传人:b****2 文档编号:13653858 上传时间:2022-10-12 格式:DOCX 页数:9 大小:350.66KB
下载 相关 举报
北理工操作系统内存管理实验报告Word文档格式.docx_第1页
第1页 / 共9页
北理工操作系统内存管理实验报告Word文档格式.docx_第2页
第2页 / 共9页
北理工操作系统内存管理实验报告Word文档格式.docx_第3页
第3页 / 共9页
北理工操作系统内存管理实验报告Word文档格式.docx_第4页
第4页 / 共9页
北理工操作系统内存管理实验报告Word文档格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

北理工操作系统内存管理实验报告Word文档格式.docx

《北理工操作系统内存管理实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《北理工操作系统内存管理实验报告Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。

北理工操作系统内存管理实验报告Word文档格式.docx

图1页式存储管理程序参考流程

四、实验环境

硬件设备:

个人计算机。

系统软件:

windows操作系统,VisualC++6.0编译环境。

五、实验结果

说明:

模拟产生35个指令地址,随机产生20个指令地址进行排队,假设主存中共有10个工作集页帧。

将前9个指令调入内存,因为前9个指令中,页号为13的指令有两个,所以调入内存中共有8页。

此时主存中还有两个空闲帧。

此时按刚才随机顺序进行访问指令工作。

前9页因都在主存中可直接调用。

第10个随机地址为页号为5的指令,也在主存中,也可直接调用。

页号为24,3因不在主存中,需要调用进主存。

此时主存已满。

然后主存需要进行调用页号为27号的指令,因主存已满,需要执行FIFO算法,将最先进入主存的页号为30的指令调出,将27号放入第1000000帧。

以后需要调用的页面按照存在就无需调用,否则按FIFO原则进行调页工作。

六、实验感想

七、实验代码

#include<

iostream>

iomanip>

stdlib.h>

time.h>

vector>

queue>

//#include<

algorithm>

usingnamespacestd;

#definePAGETABLE_NUM 35 //模拟进程的页表表项数量;

#defineAVAILABLEFRAME_NUM 10 //主存中固定工作集页帧的数量;

#defineRANDOMNUMBER_NUM 20 //产生随机指令地址的数量;

structPageTableEntry

{

unsignedintFrameNum;

boolPressent;

};

voidInitRandomAddr(vector<

unsignedint>

&

RandomAddr);

voidInitIdleFrameQueue(queue<

IdleFrameQueue);

voidInitPageTable(vector<

PageTableEntry>

PageTable,vector<

RandomAddr,queue<

IdleFrameQueue,queue<

AvtiveFrameQueue);

voidSetPTE(PageTableEntry&

PTE);

intmain()

inta;

//初始化RANDERNUMBER_NUM条随机的32位指令地址;

vector<

RandomAddr(RANDOMNUMBER_NUM);

InitRandomAddr(RandomAddr);

//初始化FIFS指针;

:

iteratorFIFS_pintor;

FIFS_pintor=RandomAddr.begin();

//初始空闲帧队列;

queue<

IdleFrameQueue,ActiveFrameQueue;

InitIdleFrameQueue(IdleFrameQueue);

//初始进程页表(模拟进程初始时,工作集已经使用至少10个页帧);

PageTable(PAGETABLE_NUM);

InitPageTable(PageTable,RandomAddr,IdleFrameQueue,ActiveFrameQueue);

//Test

cout<

<

"

开始访问指令地址\n"

;

iteratorpt_RandomAddr;

for(pt_RandomAddr=RandomAddr.begin();

pt_RandomAddr!

=RandomAddr.end();

pt_RandomAddr++)

{

unsignedintPageNum=(*pt_RandomAddr)>

>

12;

cout<

地址:

0x"

hex<

*pt_RandomAddr<

dec<

\t页号:

PageNum;

if(PageTable[PageNum].Pressent==0) //该页不在主存中;

{

cout<

\t该页不在主存,"

;

if(IdleFrameQueue.empty()) //工作集空闲页帧已用完;

{

cout<

执行FIFO淘汰算法\t"

//FIFS算法淘汰一页;

unsignedintFrame_Num;

Frame_Num=ActiveFrameQueue.front();

ActiveFrameQueue.pop();

PageTable[(*FIFS_pintor)>

12].Pressent=0;

//标记此页已经被置换出主存;

//置换进新页;

PageTable[PageNum].FrameNum=Frame_Num;

PageTable[PageNum].Pressent=1;

ActiveFrameQueue.push(Frame_Num);

//移动FIFS指针;

FIFS_pintor++;

}

else

调入所需页到空闲页\t"

//调入当前所需的页到空闲页中;

Frame_Num=IdleFrameQueue.front();

IdleFrameQueue.pop();

}

else

\t该页在主存"

\t帧号:

PageTable[PageNum].FrameNum<

endl;

}

return0;

}

RandomAddr)

生成随机指令地址\n"

iteratorpd;

srand((unsigned)time(NULL));

for(pd=RandomAddr.begin();

pd!

pd++)

//产生随机页号0~PAGETABLE_NUM-1;

unsignedintHigh_20=rand()%PAGETABLE_NUM;

//产生随机偏移量0~4095;

unsignedintLow_12=rand()%4096;

unsignedintAddr=(High_20<

12)|Low_12;

*pd=Addr;

随机指令地址:

setw(8)<

setfill('

0'

)<

setiosflags(ios:

uppercase|ios:

fixed)<

*pd<

High_20<

\t偏移量:

Low_12<

IdleFrameQueue)

//帧号从0~1048575,这里取1000000~1000016;

for(unsignedintFrameNum=1000000;

FrameNum<

1000000+AVAILABLEFRAME_NUM;

FrameNum++)

IdleFrameQueue.push(FrameNum);

AvtiveFrameQueue)

初始化页表;

\n"

for_each(PageTable.begin(),PageTable.end(),SetPTE);

unsignedintPage_Num,Frame_Num;

for(intcount=0;

count<

9;

count++)

while(true)

Page_Num=RandomAddr[count]>

if(PageTable[Page_Num].Pressent!

=0)

break;

Frame_Num=IdleFrameQueue.front();

IdleFrameQueue.pop();

PageTable[Page_Num].FrameNum=Frame_Num;

//设置页帧号;

PageTable[Page_Num].Pressent=1;

//标记页帧在主存中;

AvtiveFrameQueue.push(Frame_Num);

//记录活动页帧;

将模拟进程的第"

Page_Num<

页初始化至主存中,帧号为:

Frame_Num<

endl;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1