操作系统——请求调页存储管理方式的各种模拟

1.设计目的通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。2.设计内容  1)假设每个页面中可存放10条指令,分配给作业的内存块数为4。  2)用c语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的
摘要由CSDN通过智能技术生成

1.设计目的

通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。

2.设计内容

  1)假设每个页面中可存放10条指令,分配给作业的内存块数为4。

  2)用c语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。

在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。

  3)置换算法:

1、采用先进先出(FIFO)置换算法。

2、最近最久未使用(LRU)算法。

3、最佳置换(OPT)算法。

4、最少访问(LFU)算法。

提示:

(1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:

① 50%的指令是顺序执行的;

  ② 25%的指令是均匀分布在前地址部分;

③ 25%的指令是均匀分布在后地址部分;

具体的实施方法是:

① 在[0,319]的指令地址之间随机选取一起点m;

② 顺序执行一条指令,即执行地址为m+1的指令;

③ 在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m

④ 顺序执行一条指令,其地址为m+1的指令;

⑤ 在后地址[m+2,319]中随机选取一条指令并执行;

⑥ 重复上述步骤①~⑤,直到执行320次指令。

(2)将指令序列变换为页地址流

① 设页面大小为1K;

② 用户内存容量为4页到32页;

③ 用户虚存容里为32K。

在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:

第0条~第9条指令为第0页(对应虚存地址为[0,9]);

第10条~第19条指令为第1页(对应虚存地址为[10,19]);

……

……

第310条~第319条指令为第31页(对应虚存地址为[310,319])。

按以上方式,用户指令可组成32页。

(3)计算先进先出(FIFO)算法在不同内存容量下的命中率。

 

其中,命中率=1-页面失效次数/页地址流长度

 

1、采用先进先出(FIFO)置换算法

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#include<ctime>
#include<cstring>
#include<cstdlib>
using namespace std;
struct node{
    int i,j;//进入内存的页面数和页内地址
    int p;//页面值
    int k;//记录页面在内存中中的位置1~4
};
struct NN{
    int flag;//表示是否存在在内存中
    int id;//在内存中的位置1~4
};

int page[33][11];//保存页面和指令
int qk=0,sss=0;//用于记录缺页的次数
queue<node> q;
int hashmap[330];//一共用320条指令

double random();//生成[0,1]之间的均匀数字
int random(int m);//生成[0,m-1]之间的均匀随机数
void Init(int r);//定义初始化函数,初始值为r
void Init_Page();//初始化页面
void Show();//显示页面信息
int Address(int i,int j);//计算每个页面对应的地址
void Oper_FIFO(int n);//FIFO操作算法
void Print();

int main()
{
    freopen("input.txt","r",stdin);
    freopen("output13.txt","w",stdout);
    Init(6);
    printf("生成的随机数\n");
    Show();
    Init_Page();
    printf("对应的调入
  • 14
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值