【实验名称】页式地址重定位模拟

【实验目的】

1.掌握和理解页式地址重定位模拟的基本思路和实现过程;

2. 理解页式地址重定位技术在多道程序设计中的作用和意义。

【实验原理】

页式管理是一种内存空间存储管理的技术,页式管理分为静态页式管理和动态页式管理。将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面,然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。

由于一个作业装入到与其地址空间不一致的存储空间所引起的,对有关地址部分的调整过程称为地址的重定位。这个调整过程就是把作业地址空间中使用的逻辑地址变换成主存中物理地址的过程。这种地址变换也称为地址映射。

【实验内容】

实验内容:用高级语言编写和调试模拟实现页式地址重定位

代码(详情见代码注释):

#include<iostream>
#include<time.h>
#include <iomanip>
using namespace std;//页表类
class page_table
{
public:friend class address;page_table(int page_all);void show(int page_all);
private:int block_number[100];
};//随机生成页表
page_table::page_table(int page_all)
{cout << "页表随机生成中..." << endl;srand((int)time(0));for (int i = 0; i < page_all; i++){if (i == 0){block_number[i] = (rand() % 4) + 1;}else{block_number[i] = block_number[i - 1] + (rand() % 4) + 1;}}cout << "页表生成完毕" << endl;
}//显示页表
void page_table::show(int page_all)
{cout << "***************" << endl;cout << " 页号    块号" << endl;for (int i = 0; i < page_all; i++){//setw(3)格式化输出cout << setw(3) << i << "  -->  " << setw(2) << block_number[i] << endl;}cout << "***************" << endl;
}//地址类
class address
{
public:friend class page_table;address(int a, int page_all, int page_size);int check(int page_all, int page_size);void position(page_table Page_table, int page_all, int page_size);void show();
private:int Log_add;//逻辑地址int Mac_add;//物理地址
};address::address(int a, int page_all, int page_size)
{Log_add = a;
}//检查输入的逻辑地址是否合法
int address::check(int page_all, int page_size)
{if (Log_add > page_all*page_size){cout << "输入非法,该地址越界!" << endl;return 0;}return 1;
}//计算物理地址
void address::position(page_table Page_table, int page_all,  int page_size)
{int page_num = Log_add / page_size;int shifting = Log_add % page_size;Mac_add = (Page_table.block_number[page_num]) * page_size + shifting;
}//显示物理地址
void address::show()
{cout << "对应的物理地址为:" << Mac_add << endl;
}int main()
{cout << "****************************" << endl;cout << "***    页面地址重定位    ***" << endl;cout << "*** 1.显示页表信息       ***" << endl;cout << "*** 2.计算物理地址       ***" << endl;cout << "*** 3.退出模拟器         ***" << endl;cout << "****************************\n" << endl;//输入int page_size, page_all;cout << "请输入页号的长度:";cin >> page_all;cout << "请输入页面的大小:";cin >> page_size;page_table Page_table(page_all);int flag;while (true){cout << "\n请选择功能:";cin >> flag;if (flag == 1){//显示页表信息Page_table.show(page_all);}else if (flag == 2){//检查逻辑地址&计算物理地址int AD;cout << "请输入逻辑地址:";cin >> AD;address add(AD, page_all, page_size);if (add.check(page_all, page_size)){add.position(Page_table, page_all, page_size);add.show();}}else if (flag == 3){//退出cout << "成功退出!\n" << endl;break;}}return 0;
}

运行演示:

从实验结果可以看出,实验成功。

【小结或讨论】

这次实验和之前的银行家算法实验相比,要简单一些,这次试验主要就是掌握页式地址重定位的基本思路,只要思路通了、过程理解了,通过代码实现的难度就不是很大。

这次实验,我设计了两个类:页表类和地址类,当然用C语言写也是完全可以的,但是我觉得用C++面对对象的方法写会条理清楚很多。关于页表的生成,我并没有采取人工输入的方法,而是采用随机生成。当然这也不是完全纯随机的,每个块号只会在前一个块号的基础上递增1至3之间的随机数,这比较符合我们上课时候例题中的大致情况。

页表确定了,其他就好办了。判断逻辑地址合法后,我们只要分别除以和模上页面大小,就可以得到页号的偏移量。再根据页号和页表就能得到块号。最后根据块号*页面大小+偏移量就能计算出我们要求的对应的物理地址。

操作系统实验3 页式地址重定位模拟相关推荐

  1. 页式地址重定位模拟(java版本)

    代码: import java.util.Scanner;public class Page {// private static int block_number[];private static ...

  2. 页式地址重定位模拟(JAVA语言)

    实验内容及步骤: 1.用户输入内存大小(单位GB),系统把内存分块,每块大小由用户输入设置,单位为KB,按字节寻址(B),也就是一个地址对应一个字节的大小 2.用户输入进程大小(单位KB) 3.为进程 ...

  3. 操作系统---页式地址重定位

    页式地址重定位 要求: 一.实验目的: 1. 用高级语言编写和调试模拟实现页式地址重定位. 2. 加深理解页式地址重定位技术在多道程序设计中的作用和意义. 二.实验原理: 当进程在CPU上运行时,如指 ...

  4. 2.3.1操作系统-存储管理:页式存储、逻辑地址、物理地址、物理地址逻辑地址之间的地址关系、页面大小与页内地址长度的关系、缺页中断、内存淘汰规则

    2.3.1操作系统-存储管理:页式存储.逻辑地址.物理地址.物理地址逻辑地址之间的地址关系.页面大小与页内地址长度的关系.缺页中断.内存淘汰规则 页式存储 逻辑地址.物理地址 如何判断物理地址和逻辑地 ...

  5. Linux 操作系统原理 — 内存 — 页式管理、段式管理与段页式管理

    目录 文章目录 目录 前文列表 页式管理 快表 多级页表 基于页表的虚实地址转换原理 应用 TLB 快表提升虚实地址转换速度 页式虚拟存储器工作的全过程 缺页中断 为什么 Linux 默认页大小是 4 ...

  6. 操作系统:虚拟页式存储管理(缺页中断、页面置换算法)

    1.基本工作原理 1.基本工作原理 在进程开始运行之前,不是全部装入页面,而是装入一个或者零个页面,之后根据进程运行的需要,动态装入其他页面:当内存已满,而又需要装入 新的页面时,则根据某种算法淘汰某 ...

  7. 操作系统实验3—实现请求页式存储管理模拟程序

    操作系统实验3-实现请求页式存储管理模拟程序 文章目录 操作系统实验3-实现请求页式存储管理模拟程序 实验描述 设计思路 上机代码 测试结果 心得体会 实验描述 实验内容: 编写一个请求页式存储管理程 ...

  8. 操作系统内存管理--简单、页式、段式、段页式

    一.内存管理的目的和功能 内存一直是计算机系统中宝贵而又紧俏的资源,内存能否被有效.合理地使用,将直接影响到操作系统的性能.此外,虽然物理内存的增长现在达到了N个GB,但比物理内存增长还快的是程序,所 ...

  9. 重定位相关知识,为什么要重定位

    在NT环境下隐藏进程,也就是说在用户不知情的条件下,执行自己的代码的方法有很多种,比如说使用注册表插入DLL,使用Windows挂钩等等.其中比较有代表性的是Jeffrey Richer在<Wi ...

最新文章

  1. 3D芯片大脑:在芯片上培养脑细胞,还能用来测试新药
  2. 手机重写alert方法(去除网址和关闭网页按钮)
  3. 从 Word2Vec 到 BERT
  4. windbg学习.formats--转换成各种进制
  5. ios url缓存策略——NSURLCache、 NSURLRequest
  6. 爱奇艺怎么开启从列表删除时同时删除本地文件
  7. 非空验证方法(多值)和BindingResult提示验证信息
  8. 执行环境,作用域链,闭包
  9. Oracle_JOB参数详解
  10. 软考计算机中级网络工程师,计算机软考中级哪个最有用
  11. 最新Hive/Hadoop高频面试点小集合
  12. python函数体里的if...else...与return语句
  13. 实践中如何优化MySQL
  14. c语言 long与integer,VB中Integer(整型)和Long(长整型)有什么区别?
  15. 高龄白菜java学习第109天(java数据结构和算法(27))
  16. base64图片转成文件流再转成链接 vue js
  17. android手机闹钟在那里面,手机闹钟软件哪个好用 安卓手机怎么设置闹钟
  18. 阿里、B站都是新股东,康佳旗下易平方有望成为A股首家OTT公司?
  19. kalman跟踪的实现
  20. 这些软件测试基础知识你得了解

热门文章

  1. Apache Doris 0.11.x 版本升级
  2. linux软链接命令,linux ln 命令使用参数详解(ln -s 软链接)
  3. 笨小孩--投资中的确定性
  4. 浅析 - 被歧视的小众需求
  5. 【Microsoft】Project Oxford
  6. c语言中单引号b是啥意思,c语言中单引号和双引号的区别和应用?
  7. 高德、百度地图自定义底图
  8. ZZ稻盛和夫:经营为何需要哲学
  9. IPFS Java实现
  10. Android基于mAppWidget实现手绘地图(十一)–移动地图到某个坐标