资源简介
利用键盘输入本模拟系统的物理块的大小,作业的页表中的块号;完成逻辑地址转换成相应的物理地址的过程。
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()
{
- 上一篇:图片浏览器实现和图像编辑器实现源代码
- 下一篇:C语言课程设计案例精编
相关资源
- 操作系统实验二存储管理动态分区分
- 北京林业大学操作系统B实验
- 操作系统实验 生产者消费者 PV操作
- 操作系统实验 循环首次适应算法C
- 文件系统 操作系统实验 C++
- 用C#和C++实现的进程调度算法程序操作
- 操作系统实验--电梯调度 VC++实现
- 进程调度的设计与实现图形界面实现
- 操作系统实验——spooling技术
- C语言实现调度算法源代码-山东大学操
- 计算机操作系统实验报告,C语言实现
- 操作系统实验报告处理机调度算法的
- 安徽大学操作系统实验九最终考试内
- 动态分区分配方式的模拟
- nachos操作系统实验三
- NUR算法和OPT算法实现-----操作系统实验
- 进程同步操作系统实验三,带实验报
- 操作系统实验-计算机进程管理和进程
- 操作系统实验-----MFC线程--购票系统演
- 分区式存储管理
- 进程的同步-吃水果问题
- 东北大学操作系统实验1进程的同步与
- c++ 实验:可变分区管理
- 操作系统存储管理地址转换和产生缺
- 东华大学 操作系统实验 进程调度 含
- 武汉大学操作系统实验
- 请求分页式存储管理源代码
- 操作系统实验 页式存储管理方案模拟
- 安徽大学操作系统实验七磁盘调度算
- 操作系统实验进程调度MFC源码+实验报
评论
共有 条评论