• 大小: 14KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-04
  • 语言: C/C++
  • 标签:

资源简介

利用键盘输入本模拟系统的物理块的大小,作业的页表中的块号;完成逻辑地址转换成相应的物理地址的过程。 1、建立一张位示图,用来模拟内存的分配情况,利用随机数产生一组0和1的数对应内存的使用情况。 2、输入块(页)的大小,通过模拟位示图为本作业分配内存空间建立相应的页表(长度不定); 3、录入逻辑地址转换成相应的物理地址 4、扩充页表,变成请求式的二维页表(增加存在位等)完成地址转换。 5、输入分配给本作业的块数,模拟作业执行的逻辑地址转换成页面调度次序; 6、分别采用OPT、FIFO、LRU置换算法,利用堆栈结构完成页面置换;记录被换出的页面和新换入的页面。

资源截图

代码片段和文件信息

#include
#include
using namespace std;
typedef struct node
{
    int name;
struct node *next;
}linklist;
typedef struct 
{
    linklist *front*rear;
}LQueue;
LQueue *p;
LQueue *q;
void InitQueue(LQueue *qu)//置空队OK
{
    qu->front=new linklist;
    qu->front->next=NULL;
    qu->rear=qu->front;
}
int Empty(LQueue *qu)//判队空 ok
{
    if(qu->front==qu->rear)
return 1;
else 
return 0;
}
void EnQueue(LQueue *quint n)//入队
{
qu->rear->next=new linklist;
qu->rear=qu->rear->next;
qu->rear->name=n;
qu->rear->next=NULL;
}
int DeQueue(LQueue *qu)//出队
{
    linklist *s;
if(Empty(qu))
    return NULL;
    else   
{
     s=qu->front;
 qu->front=qu->front->next;
 delete s;
 return(qu->front->name);
    }
}
int DeQueue_LRU(LQueue *quint xint memoryblock_size)
{
    linklist *s;
int ni;
if(Empty(qu))
return NULL;
else
{
    if(x==1)
{
    n=DeQueue(qu);
return(n);
}
else
{
s=qu->front;
for(i=0;i {
    s=s->next;
}
            s=s->next->next;
return(s->next->name);
}
}

}

//定义位视图
int system_memory[8][8];
//定义页表
struct pagetable_entry
{
int memory_number;//块号
int memory_state;//状态位
}page_table[20] page_tableLRU[20];
//初始化位视图
void initsystem_memory()
{
int ijk;
for(k=0;k<8;k++)
{
    system_memory[0][k]=1;
}
for(i=1;i<8;i++)
    for(j=0;j<8;j++)
   {
   system_memory[i][j]=rand()%2;
   }
/* for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
    cout< }
cout< }
*/
}
//初始化页表
void initpage_table()
{
int i;
for(i=0;i<20;i++)
{
page_table[i].memory_number=-1;
page_table[i].memory_state=0;

}
}
int saveopt[100];
struct new_OPT
{
int OPT_number;//块号
int OPT_state;//状态位
}save_OPT[20];
void initopt_table()
{
    int i;
for(i=0;i<20;i++)
{
    save_OPT[i].OPT_number=-1;
save_OPT[i].OPT_state=0;
}
}


//定义存储OPT时的内存块数组
int OPT_memoryblock[10];

//初始化OPT_memoryblock、OPT_memoryblocksub
void init_OPT_blocksub()
{
int i;
for(i=0;i<10;i++)
{
OPT_memoryblock[i] = -1;
}
}
void changeaddress(int b_numint memo_sizeint log_add)
{
    int abc;//页号页内地址
a=log_add/memo_size;
b=log_add%memo_size;
  c=b_num*memo_size+b;
    cout<<“页号和偏移量:“< cout<<“物理地址为:“<}
void displaypagetabel(int page_size)
{
int i;
cout<<“页号\t“<<“块号\t“<<“标识位“< for(i=0;i cout<}
void displaymemory(int memoblock_size)
{
    int i;
cout<<“主存块“< for(i=memoblock_size-1;i>=0;i--)
{
   cout< }
}
void displaylesspage(int n1int n2int n3)
{
    cout<<“总访问次数:“< cout<<“缺页次数:“< double sum;
sum=((n1+n2)*100)/(n1+n2+n3);
cout<<“缺页率:“<}
void main()
{

评论

共有 条评论