頁式虛擬存儲管理系統
『壹』 分頁式虛擬存儲系統中,頁面大小與可能產生的缺頁中斷次數____。 A.成正比 B.成反比 C.無關 D.成固定比例
分頁式虛擬存儲系統中,頁面大小與可能產生的缺頁中斷次數成固定比例;答案選擇D;
若執行的程序佔用內存很大或很多,則會導致內存消耗殆盡。為解決該問題,Windows中運用了虛擬內存技術,即勻出一部分硬碟空間來充當內存使用。當內存耗盡時,電腦就會自動調用硬碟來充當內存,以緩解內存的緊張。
調度方式
調度方式有分頁式、段式、段頁式3種。頁式調度是將邏輯和物理地址空間都分成固定大小的頁。主存按頁順序編號,而每個獨立編址的程序空間有自己的頁號順序,通過調度輔存中程序的各頁可以離散裝入主存中不同的頁面位置,並可據表一一對應檢索。
頁表對程序員來說是透明的,地址變換快,調入操作簡單;缺點是各頁不是程序的獨立模塊,不便於實現程序和數據的保護。段式調度是按程序的邏輯結構劃分地址空間,段的長度是隨意的,並且允許伸長,它的優點是消除了內存零頭,易於實現存儲保護,便於程序動態裝配;缺點是調入操作復雜。
將這兩種方法結合起來便構成段頁式調度。在段頁式調度中把物理空間分成頁,程序按模塊分段,每個段再分成與物理空間頁同樣小的頁面。段頁式調度綜合了段式和頁式的優點。其缺點是增加了硬體成本,軟體也較復雜。大型通用計算機系統多數採用段頁式調度
『貳』 頁式虛擬存儲管理,過小的頁會引起什麼問題
會引起內存變小。在頁式虛擬存儲管理系統中,頁面的大小是由計算機系統的地址結構所決定的,一般由軟硬體共同決定。對於某一種系統一般採用一種大小穗簡的頁面,也有部分現代操蘆皮作系統採用雙頁面系統的。在確定地址結構時,若選擇的頁面較小,一方面可使內碎片減小,並減少了內碎猜嘩褲片的總空間,有利於提高內存利用率。另一方面,也會使每個進程要求較多的頁面,從而導致頁表過長,佔用大量內存。此外還會降低頁面換進換出的效率。
『叄』 關於在一個採用頁式虛擬存儲管理的系統問題
需要完成先來先服務調度演算法和LRU調度演算法,痛苦在於下面的程序只有主體部分只把先來先服務調度演算法和LRU調度演算法以空函數形式出現,要求把這兩個演算法填入空函數中使得整個程序能實現這兩個演算法,小弟是菜鳥,暈了幾天了,望前輩們能幫幫小弟,給出源代碼,小弟斗橘感激不盡!
#include "conio.h"
#include "iostream.h"
#include "fstream.h"
//---------------------Menu---------------------
#define KEY_EXIT '-'
typedef struct {
char ch ;
char *label;
void (*pfunc)();
} MenuItemDef ;
void clearscr() { cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\首數n\n\n\n";}
int waitakey() {return getch();}
class MenuDef {
public:
int nCount ;
MenuItemDef menu[24] ;
public:
MenuDef() { nCount=0 ;}
public:
void display()
{ for ( int i=0 ; i< nCount; i++)
cout << " "<< menu[i].ch << ". " << menu[i].label << endl ;
cout << " " << KEY_EXIT << ". " << "Exit" << endl ;
}
void run()
{ int ch ;
do {clearscr();
display();
ch = waitakey() ;
for ( int i=0; i < nCount ; i++)
if ( menu[i].ch == ch )
menu[i].pfunc() ;
} while ( ch != KEY_EXIT) ;
}
void add( char ch0, char *plabel,void ( * func)())
{ menu[nCount].ch = ch0 ;
menu[nCount].label = plabel ;
menu[nCount].pfunc = func ;
nCount ++ ;
}
} ;
//----------------Page---------------------------------------
class Page {
public:
Page() { SetNull(); }
public:
enum { kLFU=0, kFCFS, kLRU } ; //調度演算法ID的定義
int nCurPage ; //當前頁面指針
int nAlgID ; //調度演算法者銷首ID
int nCountPage ; //頁面序列長度
int pages[128] ; //進程頁面序列
int nCountFrame ; //進程分到的物理頁個數
int nEmpty ; //進程分到的物理頁中空閑數
int frames[32] ; // 物理頁,最多32個
int counters[32] ; //頁面計數器
int nCount1 ; //缺頁中斷次數
int nCount2 ; //缺頁中斷後頁面調度次數
public:
void Input() ;
void Run() ;
int IsFinish() { return nCurPage >= nCountPage ; }
void SetAlgorithm( int kAlgId ) { nAlgID=kAlgId; }
void SetNull()
{ nCurPage=nCountPage=nCountFrame=nCount1=nCount2=nEmpty=0 ; nAlgID=kLRU; }
double IPercent() { return nCount1*1.0/nCurPage ; } //缺頁中斷率
double EPercent() { return nCount2*1.0/nCurPage ; } //缺頁置換率
void FCFS(){}; //先來先服務調度演算法
void LRU(){}; //LRU調度演算法
void Display(){}; //系統狀態
void DisplayAlg(){}; //演算法執行狀態
public:
friend istream& operator>> ( istream& stream, Page & p )
{ return stream ; }
friend ostream& operator<< ( ostream& stream, Page & p )
{ return stream ; }
} ;
void Page::Input()
{ cout << "Count of page-frames:" ;
cin >> nCountFrame ;
nEmpty = nCountFrame ;
cout << "Count of page:" ;
cin >> nCountPage ;
for ( int i=0;i<nCountPage;i++)
cin >> pages[i] ;
nCurPage = 0 ;
}
void Page::Run()
{ while ( ! IsFinish() ) {
waitakey();
if ( nAlgID == kFCFS)
FCFS() ;
else
LRU();
DisplayAlg();
nCurPage ++ ;
}
}
//-------------------global variables-----------------------------------------------------------------
//-
MenuDef menu ;
Page page ;
//-------------------call-back functions for menu-------------------------------------------------
void input()
{ clearscr();
page.SetNull();
page.Input();
}
void display()
{ clearscr();
page.Display();
}
void setalg1()
{ page.SetAlgorithm( Page::kFCFS );
}
void setalg2()
{ page.SetAlgorithm( Page::kLRU );
}
void run()
{ clearscr();
page.Run() ;
}
void load()
{ char fname[128] ;
cout << "\nLoad From file:" ;
cin >> fname ;
ifstream inFile ;
inFile.open( fname ) ;
page.SetNull() ;
inFile >> page ;
}
void save()
{ char fname[128] ;
cout << "\nSave to file:" ;
cin >> fname ;
ofstream outFile ;
outFile.open( fname ) ;
outFile << page ;
}
void main( int args, char *argv[] )
{ menu.add('1', "Input from keyboard" , input ) ;
menu.add('3', "Set Algorithm 2: FCFS", setalg1 ) ;
menu.add('4', "Set Algorithm 3: LRU", setalg2 ) ;
menu.add('5', "Display", display ) ;
menu.add('6', "Run", run ) ;
menu.add('7', "Load from file", load ) ;
menu.add('8', "Save to file", save ) ;
menu.run();
}
『肆』 求頁式虛擬存儲技術的原理。
虛擬存儲器是根據程序的邏輯地址轉換來的,也稱線性地址空間。一般每個進程,甚至每個段都有一個,以32位為例,則每個最大可達4G。 而主存目前一般為百M。因此程序中所指的存儲單元並不能都放到主存中,也就是並不是每個程序所用的存儲單元,都有具體的物理的存儲器單元與之對應。 但由於程序的兩個局部性原理,在一個時刻,程序只在一個比較小的范圍內運行。所以我們把程序可能用到的整個存儲空間分成一個個相同大小的頁(按頁管理硬體上容易實現),只把其中的一些頁放在主存中,而其它的頁則等需要時再建,或放在輔存(磁碟)中。同時建立一個頁表,對應於每一頁,如果該頁在主存中,則頁表記錄它在主存中的地址;如果不在主存中,則在頁表上作不在主存的標記。 這樣,當程序需要調用某個存儲單元的內容時,先根據它的線性地址,算出其所在的頁。查頁表,看是不是在主存中?如果在,則直接存取。如果查到頁表上是不在的標記,那就是一個page fault。要把主存中的某一頁(LRU策略)換到磁碟上,把要訪問的那個單元所在的頁調入主存,再進行存取。 就象一個預計有一萬學生的學校,理論上每個學生都應有一個位子上課(一萬個虛擬位子),而學校只有一千個(物理)位子。但實際上,學校也不會一萬個人同時上課,只要讓上課的同學有位子(在主存中),而其它同學只要留下聯系方法能找到就好。為了降低管理的復雜性,我們採用按學號分班(頁)管理。每個班要麼一起上課(主存),要麼一起呆在寢室(磁碟)。而在學校保留一個動態表(頁表)表明每個班在哪兒(物理地址)上課,或者沒上課(不在主存)。現在假設我們想按學號找一個同學,而且是女同學,只能在教室說話,呵呵。那麼: 先算出來是哪個班的,查動態表,看該班是否在教室。在,直接按位置找到(hit);不在(page fault),要先找個不上課的班趕回寢室,把要找女生所在的班調到教室,再按位置找那個同學。 動態表(頁表)的大小=表項數*每個表項所需的位數。 表項數=虛擬班數=虛擬人數(虛擬地址空間)/每班人數(每頁大小) 每個表項的位數=Log(教室數)+適當控制位數
麻煩採納,謝謝!
『伍』 虛擬頁式存儲系統
二維數組在內存中表現為連續的數據,100行 150列數據,則有15000個數據,存放在100個頁面中,因此,缺頁中斷為100次
『陸』 是虛擬存儲器,在頁式系統中如何實現虛擬存
由操作系統和硬體相配合完成主存和輔存之間的信息的動態調度,這樣的計算機好像為用戶提供了一個其存儲容量比主存大得多的存儲器,這個存儲器稱為虛擬存儲器。
(實現虛擬存儲技術需要有如下物質基礎,相當容量的主存,一定容量的輔存,地址變換機構)
在頁式系統中採用預調方式實現虛擬存儲。(也就是說,只需將作業的一部分頁面裝入內存即可運行,並且當運行過程中需要的頁面不在內存中再將其調入。)
『柒』 在一個採用頁式虛擬存儲管理的系統中,有一用戶作業,它依次要訪問的字地址序列是:115,228,120,88,44
(喚跡提示:由地址序列可知,依次訪問的頁面是1、2、1、0、4、1、3、4、2、1,因為頁大小租鏈慶為100字,而分給的內存大小為300字,所以該程序在內存中只能存在弊握3個頁面……)
『捌』 實現頁式虛擬存儲器需要哪些軟體支持
不需要軟體的支持。:頁式虛擬存儲器是把程序按邏輯結構分段、每段劃分為固定大小的頁,主存空間也劃分為相等的頁,程序對內存的調入、調出扔以頁為基本傳送單位,因此不許要軟體的支持。虛擬存儲器(VirtualMemory):在具有層次結構存儲器的計算機系統中,自動實現部分裝入和部分替換功能,能從邏輯上為用戶提供一個比物理貯存容量大得多,可定址的「主存儲器」。
『玖』 在一個採用頁式虛擬存儲管理的系統中,有一用戶作業,它依次要訪問的字地址序列是:
分配給改作業春顫的共3頁,剛開始已經把第0頁裝進去了,按照FIFO演算法,
第一次尋找的字地址為115,在第一頁,但是他不在該作業的內存中,發生一次缺頁中斷,將第一頁調入內存;
第二次訪問228,所在的第二頁也不模森納在內存中,發生缺頁中斷,並把第二頁調入內存;
第三次訪問88所在0頁在內存中,所以就沒發生缺頁中斷;
第四次訪問446,所在的4頁不在內存中,發生缺頁中斷,並把最早裝進去的0頁淘汰,用第四頁替換;
第五次訪問102,第一頁在內存中,所以就不發生缺頁中斷;
。。。。。。
共訪問10次,發生了5次缺頁中斷,所以0.5的旦沒缺頁中斷率。
lru演算法累似。。
『拾』 一個頁式虛擬存儲器的虛存空間大小為
4GB。頁面大小為4KB,每個頁基局表存儲字要佔用4個位元組,一個頁式虛擬存儲器有4096個位元組,也就是4096KB等於4GB,所以虛存空間大小為4GB。存儲系統是兩個或兩個以上速度、容量和價格各不相同的存儲器用態跡硬體、軟體搏閉讓、或軟體與硬體相結合的方法連接起來成為一個存儲系統。