1. 程式人生 > >實驗二 第一題 模擬分頁式儲存管理中硬體的地址轉換和產生缺頁中斷

實驗二 第一題 模擬分頁式儲存管理中硬體的地址轉換和產生缺頁中斷

#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)      執行設計的地址轉換程式,顯示或列印執行結果。因僅模擬地址轉換,並不模擬指令的執行,故可不考慮上述指令序列中的操作。

相關推薦

實驗 第一 模擬儲存管理硬體地址轉換產生中斷

#include<iostream> #include<iomanip> using namespace std; struct yebiao {int sign; long zhucunkuaihao;long cipanweizhi; yeb

請求儲存管理頁面置換演算法的java實現

        儲存管理的主要功能之一是合理地分配空間。請求頁式管理是一種常用的虛擬儲存管理技術。         模擬頁式虛擬儲存管理中硬體的地址轉換和缺頁中斷,並用先進先出排程演算法(FIFO)處理缺頁中斷。 &nb

作業系統 第四章 3 、分段、段儲存管理 +作業題

一、分頁儲存管理方式 1、(物理)塊:記憶體劃分成多個小單元,每個單元K大小         頁面:作業也按K單位大小劃分成片         物理劃分塊的大小 = 邏輯劃分的頁的大小

實驗(三) 請求儲存管理

#include<bits/stdc++.h> using namespace std; typedef long long LL; #define INF 0x3f3f3f3f #define SIZE 1<<8 //地址流數上限 #define MAXN 32

求職筆記-作業系統-段式儲存管理儲存管理的區別?

分頁式儲存管理 使用者程式的邏輯地址空間被劃分為若干個固定大小的地址空間,稱為“頁”,記憶體實體地址空間也分成相對應的若干個物理塊,頁和塊的大小相等,可將使用者程式的任一頁放在任一塊中,實現離散分配 。有效提高記憶體利用率。 分段式儲存管理 將使用者程

分段,與段儲存管理

一.  分頁儲存管理 1.基本思想 使用者程式的地址空間被劃分成若干固定大小的區域,稱為“頁”,相應地,記憶體空間分成若干個物理塊,頁和塊的大小相等。可將使用者程式的任一頁放在記憶體的任一塊中,實現了離散分配。 1)      等分記憶體 頁式儲存管理將記憶體空間

c++ 計算機作業系統虛擬儲存管理系統模擬實現

本系統裸機上模擬硬體開始,進行了對計算機虛擬頁式儲存管理系統的模擬,通過對記憶體、外存、儲存管理部件、缺頁中斷機構等硬體的模擬,以及對程序的PCB,頁表等軟體結構的模擬,以請求分頁的方式,實現了先來先服

、分段儲存管理方式

1.分頁管理   分頁儲存管理是將一個程序的邏輯地址空間分成若干個大小相等的片,稱為頁面或頁,併為各頁加以編號,從0開始,如第0頁、第1頁等。相應地,也把記憶體空間分成與頁面相同大小的若干個儲存塊,稱為(物理)塊或頁框(frame),也同樣為它們加以編號,如0

儲存管理模擬作業系統)

最近作業系統課程實踐要求,我們模擬頁式儲存管理,起初自己很沒有思路,但是在詳細的畫出整個的流程的時候自己還是發現了一些規律,並且發現可以陣列和佇列進行模擬,我在自己寫程式的時候用的是陣列模擬的,當然在程式中,也會有很多的陣列表示各種要記錄的東西,這就要求你對頁式儲存管理要相

儲存管理方式

基本分頁儲存管理方式 (1)頁面與頁表:頁面將一個程序的邏輯地址空間分成若干個大小相等的片,分頁地址中頁號和頁內地址的計算P=INT[A/L],d=[A] MOD L;頁表:系統為每個程序建立了一張頁面映像表簡稱頁表; (2)地址變換機構:實現從邏輯地址到實體地址的轉換  

記憶體管理,邏輯地址,線性地址,實體地址的區別

虛擬記憶體(Virtual Memory) 是指計算機呈現出要比實際擁有的記憶體大得多的記憶體量。因此它允許程式設計師編制並執行比實際系統擁有的記憶體大得多的程式。這使得許多大型專案也能夠在具有有限記憶體資源的系統上實現。一個很恰當的比喻是:你不需要很長的軌道就可以讓一列火車從上海開到北京。你只需要足夠長的鐵

作業系統儲存管理儲存管理深入淺出

用分割槽方式管理的儲存器,每道程式總是要求佔用主存的一個或幾個連續儲存區域,作業或程序的大小仍受到分割槽大小或記憶體可用空間的限制,因此,有時為了接納一個新的作業而往往要移動已在主存的資訊。這不僅不方便,而且開銷不小。採用分頁儲存器既可免去移動資訊的工作,又可儘

虛擬記憶體-儲存管理演算法

在請求分頁儲存管理系統中,由於使用了虛擬儲存管理技術,使得所有的程序頁面不是一次性地全部調入記憶體,而是部分頁面裝入。 這就有可能出現下面的情況:要訪問的頁面不在記憶體,這時系統產生缺

作業系統:虛擬儲存管理中斷、頁面置換演算法)

1、基本工作原理 1、基本工作原理 在程序開始執行之前,不是全部裝入頁面,而是裝入一個或者零個頁面,之後根據程序執行的需要,動態裝入其他頁面;當記憶體已滿,而又需要裝入 新的頁面時,則根據某種演算法淘

段式儲存管理試題及答案(整理)

1、段式和頁式儲存管理的地址結構很類似,但是它們有實質上的不同,以下錯誤的是(D)       A.頁式的邏輯地址是連續的,段式的邏輯地址可以不連續       B.頁式的地址是一維的,段式的地址是二維的       C.分頁是作業系統進行的,分段是使用者確定的       D.頁式採用靜態重定位方式,段式

java實現儲存管理

基本框架 page.java //page類 package pagedStorageManagement; public class page { private int pageNumber;//頁號 private

Hadoop()搭建偽集群

tro check -- conf XML 可能 ado dem daemon 前言   前面只是大概介紹了一下Hadoop,現在就開始搭建集群了。我們下嘗試一下搭建一個最簡單的集群。之後為什麽要這樣搭建會慢慢的分享,先要看一下效果吧! 一、Hadoop的三種運行模式(

)構建dubbo平臺-平臺功能導圖

springmvc+dubbo mybatis zookeeper j2ee web開發 上一篇我們介紹了構建dubbo分布式平臺的技術選型、目標、特點、獨立服務項目等,今天針對於獨立服務項目提供平臺功能導圖,也是我們未來逐步研發的功能。 我這邊不做多介紹,直接上圖了: 下面的章節中,我們

(十) 構建dubbo平臺-zookeeper註冊中心安裝

springmvc+mybatis dubbo+zookeeper j2ee web開發 上一篇我們介紹《構建dubbo分布式平臺-dubbo簡介》,結合dubbo基礎簡介,今天我們來學習基於zookeeper註冊中心的安裝。 註冊中心1、建議使用dubbo-2.3.3以上版本的使用zooke

Spark學習之路 (十八)圖計算系統

尺度 內存 底層 mapr 分區 ces 兩個 傳遞方式 cat 一、引言   在了解GraphX之前,需要先了解關於通用的分布式圖計算框架的兩個常見問題:圖存儲模式和圖計算模式。 二、圖存儲模式   巨型圖的存儲總體上有邊分割和點分割兩種存儲方式。2013年,Gra