-
大小: 5KB文件類型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-05-26
- 語言: C/C++
- 標簽:
資源簡介
產(chǎn)生一個需要訪問的指令地址流。它是一系列需要訪問的指令的地址。為不失一般性,你可以適當?shù)兀ㄓ萌斯ぶ付ǖ胤椒ɑ蛴秒S機數(shù)產(chǎn)生器)生成這個序列。為簡單起見,頁面淘汰算法采用FIFO頁面淘汰算法,并且在淘汰一頁時,只將該頁在頁表中抹去。而不再判斷它是否被改寫過,也不將它寫回到輔存。
具體的做法可以是:
產(chǎn)生一個需要訪問的指令地址流;
指令合適的頁面尺寸(例如以 1K或2K為1頁);
指定內(nèi)存頁表的最大長度,并對頁表進行初始化;
每訪問一個地址時,首先要計算該地址所在的頁的頁號,然后查頁表,判斷該頁是否在主存——如果該頁已在主存,則打印頁表情況;如果該頁不在主存且頁表未滿,則調(diào)入一頁并打印頁表情況;如果該頁不在主存且頁表已滿,則按FIFO頁面淘汰算法淘汰一頁后調(diào)入所需的頁,打印頁表情況;逐個地址訪問,直到所有地址訪問完畢。
代碼片段和文件信息
#include
#include
//#include
using?namespace?std;
class?page_table{
??????public:
?????????????int?page_num;
?????????????int?kuai_num;
?????????????page_table(int?page_noint?kuai_no)
?????????????{
????????????????????????????page_num=page_no;
????????????????????????????kuai_num=kuai_no;
????????????????????????????}????????????
?????????????};
?????????????
void?print(vector?&mem);?
int?main(){
int?ary[]={245103020543500460050003888888660049888466};
vectorivec(aryary+11);
vector?vec;
cout<<“頁面尺寸大小為?1k?“< cout<<“內(nèi)存中頁表最大為3k“< /*頁表初始化*/
/*頁號從0開始的*/?
for(int?i=0;i<10;i++)
{
????????page_table?pt(ii*2+1);
????????vec.push_back(pt);
????????}
????????
vector?mem;
int?ye_hao=0;
vector::iterator?it=ivec.begin();
while(it!=ivec.end()){???//while_start
??????????????????????int?i=(*it)/1024;
??????????????????????int?j=(*it)%1024;
??????????????????????if?(i>=1?&&?j>0)
??????????????????????ye_hao=i;
??????????????????????else?ye_hao=0;
??????????????????????cout<<“讀取物理地址為:“<<*it< ??????????????????????vector::iterator?itt=vec.begin();
??????????????????????for(int?k=0;k ??????????????????????itt++;
??????????????????????
??????????????????????if(mem.empty()){
??????????????????????mem.push_back(*itt);
??????????????????????//打印頁表情況
??????????????????????cout<<“第一次內(nèi)存頁表情況“< ??????????????????????cout<<“頁號:“<page_num<<‘\t‘<<“塊號:“<kuai_num< ??????????????????????}????????????????????
??????????????????????
??????????????????????else?if(!mem.empty()){
??????????????????????????????????????????????????????
??????????????????????vector::iterator?itt=vec.begin();
??????????????????????for(int?k=0;k ??????????????????????itt++;
??????????????????????
??????????????????????cout<<“這次讀取的頁號:“<page_num< ??????????????????
??????????????????????vector::iterator?iter=mem.begin();
??????????????????????vector::iterator?iter_end=mem.end();
???????????????????????????????????????
??????????????????????int?i=1;
??????????????????????while(iter!=mem.end()){????????//while_here
??????????????????????if(iter->page_num==ye_hao){
?????????????????????????????????????????????????cout<<“此頁在內(nèi)存中這時頁表情況“< ?????????????????????????????????????????????????//cout<<“打印頁表情況“< ?????????????????????????????????????????????????print(mem);
??????????????????????????????????????
評論
共有 條評論