📄 qqfy.cpp
字号:
// QQFY.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "iostream.h"
#include "windows.h"
#define size 64
//--------------------------------------------------------------------------------
/*全局定义 // 也可以通过传参数来实现*/
struct page_list
{
int lump;
int attitude;
}data[size];
int memory[8][8];
int stack[64];
int visit;
int absence;
//---------------------------------------------------------------------------------
/* 初始化函数 */
void init()
{
//------------------------------------------------------------------------------
/*初始化位示图*/
int i;
for(i=0;i<8;i++)
memory[0][i]=1;
for(i=1;i<8;i++)
for(int j=0;j<8;j++)
{
memory[i][j]=rand()%2;
}
cout<<"the memory is :"<<endl;
void show_maritext(int a[][8],int m,int n);
show_maritext(memory,8,8);
//-------------------------------------------------------------------------------
}
//-------------------------------------------------------------------------------
void show_maritext(int a[][8],int m,int n)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
//-------------------------------------------------------------------------------
void show_page_list(page_list data[],int page_length)
{
for(int i=0;i<page_length;i++)
{
printf("%d\t",i);
printf("%d\t",data[i].lump);
printf("%d\t",data[i].attitude);
printf("\n");
}
}
//-------------------------------------------------------------------------------
void show_stack(int stack[],int Give_memory)
{
printf("stack:\n");
for(int i=Give_memory-1;i>=0;i--)
{
printf("%d\t",i);
printf("%d\t",stack[i]);
printf("\n");
}
}
//-------------------------------------------------------------------------------
/* 操作函数 */
void control(int page_table,int Give_memory,int lump_length,int D_logical,char flag)
{
//
int physical_address;
/*if(D_logical<0)
break;*/
system("cls"); /* 清屏函数 */
if(D_logical<(page_table*lump_length)&&D_logical>=0)
{
int sign_lower;
sign_lower=D_logical/lump_length;
if(data[sign_lower].attitude==1)
{ /*命中 先进先出算法*/
if(flag=='f'||flag=='F')
physical_address=lump_length*data[sign_lower].lump+D_logical%lump_length;
else /*LRU 算法*/
{
for(int j=0;j<Give_memory;j++)
if(stack[j]==sign_lower)
for(int i=j;i<Give_memory-1;i++)
stack[i]=stack[i+1];
for(int i=Give_memory-1;i>=0;i--)
{
if(stack[i-1]!=-1)
{
stack[i]=sign_lower;
break;
}
}
physical_address=lump_length*data[sign_lower].lump+D_logical%lump_length;
}
}
else /*未命中*/
if(stack[Give_memory-1]!=-1) /*给的内存已满时*/
{
absence++;
data[sign_lower].lump=data[stack[0]].lump;
data[sign_lower].attitude=1;
data[stack[0]].attitude=0;
for(int id_memory=0;id_memory<Give_memory-1;id_memory++)
stack[id_memory]=stack[id_memory+1];
stack[Give_memory-1]=sign_lower;
physical_address=lump_length*data[sign_lower].lump+D_logical%lump_length;
}
else /*给的内存不满时,不发生置换*/
{
absence++;
data[sign_lower].attitude=1;
for(int i=1;i<8;i++)
{
for(int j=0;j<8;j++)
if(memory[i][j]==0)
{
data[sign_lower].lump=i*8+j+1; /*从位示图中找到空内存的位置*/
memory[i][j]=1;
break;
}
break;
}
int t=0;
while(t<Give_memory&&stack[t]!=-1)
t++;
stack[t]=sign_lower;
physical_address=lump_length*data[sign_lower].lump+D_logical%lump_length;
}
}
printf("page\tlump\tattitude\n");
show_page_list(data,page_table);
show_stack(stack,Give_memory);
printf("----------------------------------------------------------------\n");
cout<<"physical address :"<<physical_address<<endl<<endl;
}
//-------------------------------------------------------------------------------
int main(int argc, char* argv[])
{
visit=0;
absence=0;
system("color 6a"); /*控制颜色的函数*/
//-------------------------------------------------------------------------------
printf("input lump's size(kb):");
int n;
scanf("%d",&n); /*n 表示块的长度*/
printf("the memory lump is %d kb\n",n);
printf("input programm's length:");
int job_length;
scanf("%d",&job_length); /*lump_length表示作业的长度*/
int i;
i=job_length/(n*1024);
if(job_length%(n*1024)==0)
;
else
i=i+1; /*i 表示页表的长度 */
printf("the page_table is %d kb\n",i);
int t;
t=i;
//data=(data *)malloc((i+1)*sizeof(data));
for(int j=0;j<i;j++)
{
cout<<j<<" "<<data[j].lump<<" "<<data[j].attitude<<endl;
}
//------------------------------------------------------------------------------
/* 初始化栈表 */
int M_lump;
printf("input the memory give cout:");
scanf("%d",&M_lump); /*M_lump表示分配内存的块数*/
for(i=0;i<M_lump;i++)
{
stack[i]=-1;
cout<<i<<" "<<stack[i]<<endl;
}
//----------------------------------------------------------------------------
init();
float rate;
char flag;
printf("please select FIFO(f) or LRU(l) algrithm: ");
getchar();
flag=getchar();
int D_logical=0;
int lump_length;
int flag_d;
lump_length=n*1024;
while(D_logical!=-1)
{
/*逻辑地址*/
flag_d=0;
printf("input the logical address: ");
scanf("%d",&D_logical);
visit++;
control(t,M_lump,lump_length,D_logical,flag);
printf("logical address: %d\n\n",D_logical);
if(D_logical>t*lump_length||D_logical<0)
{
visit--;
flag_d=1;
//cout<<"error:the logical is overflow!"<<endl;
}
printf("visit:\t\t%d\n\n",visit);
printf("absence:\t%d\n\n",absence);
rate=((float)absence/visit)*100;
printf("absence rate: %f",rate);
printf("%\n");
printf("----------------------------------------------------------------\n");
if(flag_d==1)
{
cout<<"error:the logical is overflow!"<<endl;
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -