实验二 第一题 模拟分页式存储管理中硬件的地址转换和产生缺页中断
来源:互联网 发布:高淇java300集 知乎 编辑:程序博客网 时间:2024/06/07 22:15
#include<iostream>#include<iomanip>using namespace std;struct yebiao{int sign; long zhucunkuaihao;long cipanweizhi;yebiao(int c,long a,long b){zhucunkuaihao=a;cipanweizhi=b;sign=c;}yebiao(long a,long b){zhucunkuaihao=a;cipanweizhi=b;sign=1;}yebiao(long a){cipanweizhi=a;zhucunkuaihao=-1;sign=0;}};yebiao ing[7]={yebiao(1,5,11),yebiao(8,12),yebiao(9,13),yebiao(1,21),yebiao(22),yebiao(23),yebiao(121)};int zhucun[32];struct zhiling{int yehao;int danweihao;struct zhiling*next;//public:zhiling(int a,int b){yehao=a;danweihao=b;next=NULL;}zhiling(){next=NULL;}friend class zhilinglianbiao;};class zhilinglianbiao{zhiling*head,*p;public: //void show(){p=head;while(p!=NULL){char q;cin>>q; cout<<p->yehao<<ing[p->yehao].sign<<endl;p=p->next;}}zhilinglianbiao(){head=NULL;p=NULL;}void charu(zhiling &a){//while(p->next!=NULL) p=p->next;if(head==NULL) {zhiling*newzhi=new zhiling();newzhi=&a;head=p=newzhi; // cout<<p->yehao<<ing[p->yehao].zhucunkuaihao<<endl; }else {/*if(head->next==NULL||p==NULL){zhiling*newnode=&a;head->next=p=newnode;}else {zhiling*newnode=&a;p->next=newnode;p=newnode;}*/zhiling*newzhi=new zhiling();newzhi=&a;//cout<<"调试"<<newzhi->yehao<<endl;if(p==NULL)cout<<"p为空"<<endl;else cout<<"p不为空";int i;cin>>i;p->next=newzhi;//cout<<"yunxing"; cout<<ing[p->yehao].cipanweizhi; p=newzhi; //show();} }void run(){p=head;while(p!=NULL){//cout<<ing[p->yehao].sign<<endl; cout<<ing[p->yehao].cipanweizhi;if(ing[p->yehao].sign==1) {cout<<"第"<<p->yehao<<"页的"<<"绝对地址为"<<'\t';cout<<(ing[p->yehao].zhucunkuaihao*128+p->danweihao)<<endl;p=p->next;}else {cout<<"页号*"<<p->yehao<<"不在主存中,产生缺页中断随后调入主存"<<endl;int i;for(i=0;i<32;i++) {if(zhucun[i]==0) break;}ing[p->yehao].zhucunkuaihao=i;ing[p->yehao].sign=1;zhucun[i]=1;}}}};void main(){ cout<<"初始时页表为:"<<endl; cout<<"┏"<<"页号"<<"┳"<<"标志"<<"┳"<<"主存块号"<<"┳"<<"在磁盘位置"<<"┓"<<endl;for(int j=0;j<7;j++) {cout<<"┣"<<setw(4)<<j<<"╋"<<setw(4)<<ing[j].sign<<"╋"<<setw(8)<<ing[j].zhucunkuaihao<<"╋"<<setw(10)<<ing[j].cipanweizhi<<"┫"<<endl; } //cout<<ing[2].zhucunkuaihao<<endl; cout<<"┗"<<"━━"<<"┻"<<"━━"<<"┻"<<"━━━━"<<"┻"<<"━━━━━"<<"┛"<<endl;zhucun[1]=1;zhucun[5]=1;zhucun[8]=1;zhucun[9]=1;zhilinglianbiao a;zhiling zh[]={zhiling(0,70),zhiling(1,50),zhiling(2,15),zhiling(3,21),zhiling(0,56),zhiling(6,40),zhiling(4,53),zhiling(5,23),zhiling(1,37),zhiling(2,78),zhiling(4,1),zhiling(6,84)};for(int i=0;i<12;i++) {a.charu(zh[i]);}cout<<"运行..."<<endl;a.run();char q;cout<<"输入任意字符退出"<<endl;cin>>q;}
[提示]
(1) 分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表的格式为:
页号
标志
主存块号
在磁盘上的位置
其中,标志----用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存,标志位=0,则表示该页尚未装入主存。
主存块号----用来表示已经装入主存的页所占的块号。
在磁盘上的位置----用来指出作业副本的每一页被存放在磁盘上的位置。
(2) 作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式:
绝对地址=块号×块长+单元号
计算出欲访问的主存单元地址。如果块长为2的幂次,则可把块号作为高地址部分,
把单元号作为低地址部分,两者拼接而成绝对地址。若访问的页对应标志为“0”,
则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上
的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。
(3) 设计一个“地址转换”程序来模拟硬件的地址转换工作。当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断。该模拟程序的算法如图2-1。
图2-1 地址转换模拟算法
(4) 假定主存的每块长度为128个字节;现有一个共七页的作业,其中第0页至第3页已经装入主存,其余三页尚未装入主存;该作业的页表为:
0
1
5
011
1
1
8
012
2
1
9
013
3
1
1
021
4
0
022
5
0
023
6
0
121
如果作业依次执行的指令序列为:
操作
页号
单元号
操作
页号
单元号
+
0
70
移位
4
053
+
1
50
+
5
023
×
2
15
存
1
037
存
3
21
取
2
078
取
0
56
+
4
001
-
6
40
存
6
084
(5) 运行设计的地址转换程序,显示或打印运行结果。因仅模拟地址转换,并不模拟指令的执行,故可不考虑上述指令序列中的操作。
- 实验二 第一题 模拟分页式存储管理中硬件的地址转换和产生缺页中断
- 基本分页存储管理方式中关于逻辑地址和物理地址的转换
- 分页式存储管理及地址转换(网易笔试题)
- 页式存储和段页式存储的地址转换过程
- 【实验】请求调页存储管理方式的模拟
- 详述在设有快表的请求分页存储管理系统中,一个虚地址转换成物理内存地址的过程。
- 存储管理之分页存储管理方式C语言模拟(实验五)
- Linux 存储管理 缺页中断和页面换入
- 虚拟存储器管理-模拟分页请求和缺页调度
- 软件中断和硬件中断的区别
- 硬件中断和软件中断的区别
- 中断和硬件的关系
- 分页式和段式存储管理
- 分页式和段式存储管理
- 【实验二】图像文件的读写和转换
- 操作系统 实验二 请求分页存储器管理
- linux用户空间内存管理:内存映射和需求分页(缺页中断)
- 页式虚存地址和缺页中断(LRU的计数器算法)
- Java基础1
- Android 大神Dianne Hackborn对大家讨论Android流畅性为什么不如iOS的回应(二)
- VIM 编译C、C++、Fortran脚本
- 关于cetnos6.4 的网络配置
- 十进制转十六进制
- 实验二 第一题 模拟分页式存储管理中硬件的地址转换和产生缺页中断
- Android 大神Dianne Hackborn对大家讨论Android流畅性为什么不如iOS的回应(一)
- Spring transaction事宜 roll back各种回滚
- java 递归的总结
- 对于REST中无状态(stateless)的一点认识
- [Python]Build-in方法all和any
- InnoDB存储引擎
- Maximum Subarray & Climbing Stairs & Remove Element
- 嵌入式工程师面试_常见字符串类编程