當前位置:首頁 » 服務存儲 » 動態頁式存儲管理中發生問題
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

動態頁式存儲管理中發生問題

發布時間: 2022-07-04 05:16:29

A. 操作系統頁式存儲管理的問題

存儲管理的基本原理內存管理方法 內存管理主要包括內存分配和回收、地址變換、內存擴充、內存共享和保護等功能。 下面主要介紹連續分配存儲管理、覆蓋與交換技術以及頁式與段式存儲管理等基本概念和原理。 1. 連續分配存儲管理方式 連續分配是操作系統頁式存儲管理的問題

B. 頁式管理的頁式管理的優缺點

1、由於它不要求作業或進程的程序段和數據在內存中連續存放,從而有效地解決了碎片問題。
2、動態頁式管理提供了內存和外存統一管理的虛存實現方式,使用戶可以利用的存儲空間大大增加。這既提高了主存的利用率,又有利於組織多道程序執行。 1、要求有相應的硬體支持。例如地址變換機構,缺頁中斷的產生和選擇淘汰頁面等都要求有相應的硬體支持。這增加了機器成本。
2、增加了系統開銷,例如缺頁中斷處理機,
3、請求調頁的演算法如選擇不當,有可能產生抖動現象。
4、雖然消除了碎片,但每個作業或進程的最後一頁內總有一部分空間得不到利用果頁面較大,則這一部分的損失仍然較大。

C. 在頁式虛擬存貯器中,什麼叫頁面失效什麼叫頁面爭用什麼時候兩者同時發生

頁面失效是該頁未裝入主存,需要從輔存中調頁。頁面爭用(沖突)是兩個以上的虛頁想要進入主存中同一頁面位置的現象。頁面失效不一定發生頁面沖突,頁面爭用一定由頁面失效引起。

D. 什麼事虛擬活頁式存儲管理中的抖動問題

在虛擬存儲的頁式存儲的換頁過程中,如果選用了一個不合適的調度演算法,就會出現這樣的現象:剛被淘汰了的頁面又立即要用,又要把它調入進來,而調入不久又被調出,調出不久再次被調入,如此反復,使得調度非常頻繁,以至於大部分時間都花費在來回調度上。這種現象叫「抖動」。一個好的調度演算法應減少和避免抖動現象

E. 內存的段頁式管理到底是如何管理的是為了解決什麼問題

頁式管理的基本原理將各進程的虛擬空間劃分成若干個長度相等的頁(page),頁式管理把內存空間按頁的大小劃分成片或者頁面(page frame),然後把頁式虛擬地址與內存地址建立一一對應頁表,並用相應的硬體地址變換機構,來解決離散地址變換問題。頁式管理採用請求調頁或預調頁技術實現了內外存存儲器的統一管理。

1 靜態頁式管理。靜態分頁管理的第一步是為要求內存的作業或進程分配足夠的頁面。系統通過存儲頁面表、請求表以及頁表來完成內存的分配工作。靜態頁式管理解決了分區管理時的碎片問題。但是,由於靜態頁式管理要求進程或作業在執行前全部裝入內存,如果可用頁面數小於用戶要求時,該作業或進程只好等待。而且作業和進程的大小仍受內存可用頁面數的限制。
2 動態頁式管理。動態頁式管理是在靜態頁式管理的基礎上發展起來的。它分為請求頁式管理和預調入頁式管理。
優點: 沒有外碎片,每個內碎片不超過頁大小。一個程序不必連續存放。便於改變程序佔用空間的大小(主要指隨著程序運行而動態生成的數據增多,要求地址空間相應增長,通常由系統調用完成而不是操作系統自動完成)。
缺點:程序全部裝入內存。
要求有相應的硬體支持。例如地址變換機構,缺頁中斷的產生和選擇淘汰頁面等都要求有相應的硬體支持。這增加了機器成本。增加了系統開銷,例如缺頁中斷處理機,請求調頁的演算法如選擇不當,有可能產生抖動現象。 雖然消除了碎片,但每個作業或進程的最後一頁內總有一部分空間得不到利用果頁面較大,則這一部分的損失仍然較大。

F. 操作系統里的請求頁式存儲管理的優缺點

具有段式和頁式管理的優點。但是系統的復雜性和開銷也隨之增加。

必須要採用聯想寄存器才能提高CPU的訪內速度。

段式與頁式的比較

段式:

分段由用戶設計自己劃分,每段對應的程序模塊,有完整的邏輯意義

段面是信息的邏輯單位便於段的共享,執行時按需動態鏈接裝入

段長不等,可動態裝入,有利於新數據的增長

二維地址空間:段名、段中地址;段號、段內單元號

管理形式上象頁式,但概念不同

頁式:

分頁用戶看不見,由操作系統為內存管理劃分

頁面是信息的物理單位。頁一般不能共享頁面大小相同,位置不能動態增加

一維地址空間

往往需要多次缺頁中斷才能把所需的信息完整地調入內存。

G. 頁式虛擬存儲管理中快表有問

在一個採用頁式
虛擬存儲
管理的系統中,有一用戶作業,它依次要訪問的字地址序列是:115,228,120,88,446,102,321,432,260,167,若該作業的第0頁已經裝入主存,現分配給該作業的主存共300字,頁的大小為
100字
,請回答下列問題:
1)按FIFO調度演算法將產生

缺頁中斷
,依次淘汰的頁號為
,缺頁中斷率為

2)按LRU調度演算法將產生
次缺頁中斷,依次淘汰的頁號為
,缺頁中斷率為

H. 操作系統問題(頁式存儲管理問題)

1.5000B約等於4.88KB 每個頁面有2KB 所以佔用3個頁面
頁表
頁號 塊號
0
3
1
7
2
9
2.頁內地址為11位【塊內地址(也叫塊內位移)長度與頁內地址相等 也是11位】 則每頁大小為2^11=2KB 邏輯地址長16位 所以頁號有16-11=5位 那麼最多有2^5=32頁

你給的邏輯地址4500應該是十進制數 轉換成二進制即
1000110010100 (數一下 總共13位)
後面11位是頁內地址 那麼頁號就是前面的兩位了 是10 也就是二進制的2
那麼根據頁表 對應的塊號是9 轉換成二進制即1001 即塊號是1001 而塊內地址是邏輯地址的頁內地址(4500的後11位)
那麼物理地址是1001+00110010100(這里+表示連接 而不是邏輯加)
即100100110010100 轉換成十進制就是18836 十六進制就是4994

多加點分

I. 關於在一個採用頁式虛擬存儲管理的系統問題

需要完成先來先服務調度演算法和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();
}