分頁式存儲管理代碼
『壹』 設計一個請求頁式存儲管理方案,並編寫模擬程序實現之。
#include "utility.h"
#include "lk_queue.h"
//定義頁表結構
struct table
{
int no; //頁號
int state; //狀態位(1 表示在內存,0 表示不在內存)
int block_no; //塊號
};
void main()
{
int loc[10]; //直接用的是十進制的邏輯地址
int i,j,e;
table page_table[64];
LinkQueue <int> bno;
//隨機邏輯地址並顯示出來
cout<<"十進制的邏輯地址:";
for( i=0;i<10;i++)
{
loc[i]=rand()%640000;
cout<<loc[i]<<" ";
}
cout<<endl<<endl;
//初始化頁表
for( i=0;i<64;i++)
{
page_table[i].no=i;
page_table[i].state=0;
page_table[i].block_no=-1;
}
int a[2];
for( i=0;i<10;i++)
{
a[0]=loc[i]/1024; //計算出的頁號
a[1]=loc[i]%1024; //計算出的頁內偏移量
//找到頁表中的該頁
for( j=0;j<64;j++)
{
if(page_table[j].no==a[0]) break;
}
//該頁在內存
if(page_table[j].state==1)
{
bno.Traverse(Write); // 輸出隊列里的頁面
cout<<endl;
cout<<page_table[j].no<<' '<<page_table[j].state<<' '<<page_table[j].block_no<<endl<<endl; // 輸出頁表信息
}
//該頁不在內存,FIFO演算法
if(page_table[j].state==0)
{
//內存有空閑
if(bno.Length()<5)
{
page_table[j].state=1;
page_table[j].block_no=i+10;
bno.InQueue(page_table[j].no);
bno.Traverse(Write);
cout<<endl;
cout<<page_table[j].no<<' '<<page_table[j].state<<' '<<page_table[j].block_no<<endl<<endl;
}
//內存沒有空閑
else if(bno.Length()==5)
{
bno.OutQueue(e);
page_table[e].state=0;
page_table[j].state=1;
page_table[j].block_no=page_table[e].block_no;
bno.InQueue(page_table[j].no);
bno.Traverse(Write);
cout<<endl;
cout<<page_table[j].no<<』'<<page_table[j].state<<' '<<page_table[j].block_no<<endl<<endl;
}
}
}
}
『貳』 (操作系統) 編寫代碼對存儲管理部件的工作過程進行模擬
採用分頁存儲器允許把一個作業存放到若干不相鄰的分區中,既可免去移動信息的工作,又可盡量減少主存的碎片。分頁式存儲管理的基本原理如下:
1、 頁框:物理地址分成大小相等的許多區,每個區稱為一塊;
2、址分成大小相等的區,區的大小與塊的大小相等,每個稱一個頁面。
3、 邏輯地址形式:與此對應,分頁存儲器的邏輯地址由兩部分組成,頁號和單元號。邏輯地址格式為 頁號 單元號(頁內地址) 採用分頁式存儲管理時,邏輯地址是連續的。所以,用戶在編製程序時仍只須使用順序的地址,而不必考慮如何去分頁。
4、頁表和地址轉換:如何保證程序正確執行呢?
採用的辦法是動態重定位技術,讓程序的指令執行時作地址變換,由於程序段以頁為單位,所以,我們給每個頁設立一個重定位寄存器,這些重定位寄存器的集合便稱頁表。頁表是操作系統為每個用戶作業建立的,用來記錄程序頁面和主存對應頁框的對照表,頁表中的每一欄指明了程序中的一個頁面和分得的頁框的對應關系。絕對地址=塊號*塊長+單元號 以上從拓撲結構角度分析了對稱式與非對稱式虛擬存儲方案的異同,實際從虛擬化存儲的實現原理來講也有兩種方式;即數據塊虛擬與虛擬文件系統. 數據塊虛擬存儲方案著重解決數據傳輸過程中的沖突和延時問題.在多交換機組成的大型Fabric結構的SAN中,由於多台主機通過多個交換機埠訪問存儲設備,延時和數據塊沖突問題非常嚴重.數據塊虛擬存儲方案利用虛擬的多埠並行技術,為多台客戶機提供了極高的帶寬,最大限度上減少了延時與沖突的發生,在實際應用中,數據塊虛擬存儲方案以對稱式拓撲結構為表現形式. 虛擬文件系統存儲方案著重解決大規模網路中文件共享的安全機制問題.通過對不同的站點指定不同的訪問許可權,保證網路文件的安全.在實際應用中,虛擬文件系統存儲方案以非對稱式拓撲結構為表現形式. 虛擬存儲技術,實際上是虛擬存儲技術的一個方面,特指以CPU時間和外存空間換取昂貴內存空間的操作系統中的資源轉換技術 基本思想:程序,數據,堆棧的大小可以超過內存的大小,操作系統把程序當前使用的部分保留在內存,而把其他部分保存在磁碟上,並在需要時在內存和磁碟之間動態交換,虛擬存儲器支持多道程序設計技術 目的:提高內存利用率 管理方式
A 請求式分頁存儲管理 在進程開始運行之前,不是裝入全部頁面,而是裝入一個或零個頁面,之後根據進程運行的需要,動態裝入其他頁面;當內存空間已滿,而又需要裝入新的頁面時,則根據某種演算法淘汰某個頁面,以便裝入新的頁面
B 請求式分段存儲管理 為了能實現虛擬存儲,段式邏輯地址空間中的程序段在運行時並不全部裝入內存,而是如同請求式分頁存儲管理,首先調入一個或若干個程序段運行,在運行過程中調用到哪段時,就根據該段長度在內存分配一個連續的分區給它使用.若內存中沒有足夠大的空閑分區,則考慮進行段的緊湊或將某段或某些段淘汰出去,這種存儲管理技術稱為請求式分段存儲管理
你好,希望採納!
『叄』 在一個分頁式虛擬存儲管理系統中,一個程序的頁面走向為在一個分頁式虛擬存儲管理系統中,一個程序的頁面
摘要 1)缺頁7次 缺頁6次
『肆』 跪求模擬頁式存儲管理FIFO的源代碼,具體要求如下 1、 編程組織對內存管理 a) 頁面大小為1K; b) 內存分配
#include"stdio.h"
#include"malloc.h"
#include"conio.h"
#define N 16
#define num 5 /*進程分配物理塊數目*/
int A[N]={1,2,3,4,5,6,7,8,5,2,3,2,7,8,1,4}; /*頁表映像*/
typedef struct page
{ int address; /*頁面地址*/
struct page *next;
}page;
struct page *head,*run,*rear;
void jccreat() /*進程分配物理塊*/
{ int i=1;
page *p,*q;
head=(page *)malloc(sizeof(page)); p=head;
for(i=1;i<=num;i++) { q=(page *)malloc(sizeof(page));
p->next=q; q->address=0; q->next=NULL; p=q; }
rear=p;}int search(int n){
page *p;
int i=0;
p=head;
while(p->next)
{
if(p->next->address==n)
{
printf("Get it at the page %d\n",i+1);
run=p;
return 1;}
p=p->next;
i++;
}
return 0;
}
void changeOPT(int n,int position)
{
int i;
int total=0;
int flag=1;
int distance[num];
int MAX;
int order=0;
page *p,*q;
p=head->next;
q=head->next;
for(i=0;i<num;i++)
distance[i]=100;
i=0;
while(p)
{
if(p->address==0)
{flag=0;
break;}
p=p->next;
i++;
}
if(!flag)
{p->address=n;
printf("Change the page %d\n",i+1);
}
else
{
while(q)
{
for(i=position;i<N;i++)
{if(q->address==A[i])
distance[total]=i-position;}
total++;
q=q->next;
}
MAX=distance[0];
for(i=0;i<num;i++)
{
if(distance[i]>MAX)
{
MAX=distance[i];
order=i;
}
}
printf("Change the page %d\n",order+1);
i=0;
while(p)
{
if(i==order)
p->address=n;
i++;
p=p->next;
}
}
}
void changeLRU(int n)
{
int i=0;
int flag=1;
page *p,*delect;
p=head->next;
while(p)
{
if(p->address==0)
{flag=0;
p->address=n;
printf("Change the page %d\n",i+1);
break;}
p=p->next;
i++;
}
if(flag)
{
delect=head->next;
head->next=delect->next;
printf("Delect from the head, and add new to the end.\n");
delect->address=n;
rear->next=delect;
rear=delect;
rear->next=NULL;
}
}
float OPT()
{
int i;
int lose=0;
float losef;
float percent;
for(i=0;i<N;i++)
{
if(search(A[i])==0)
{
lose++;
changeOPT(A[i],i);
}
}
losef=lose;
percent=1-(losef/N);
return percent;
}
float LRU()
{
int i;
int lose=0;
float losef;
float percent;
page *p;
for(i=0;i<N;i++)
{
if(search(A[i])==0)
{
lose++;
changeLRU(A[i]);
}
else
{
p=run->next;
run->next=p->next;
rear->next=p;
rear=p;
rear->next=NULL;
printf("Move it to end of queue.\n");
}
}
losef=lose;
percent=1-(losef/N);
return percent;
}
main() /*主函數部分*/
{float percent;
int choice;
printf("Select the arithmetic:\n(1)OPT\n(2)LRU\nyour choice is:");
scanf("%d",&choice);/*選擇頁面置換演算法*/
jccreat(); /*創建進程*/
if(choice==1) /*採用OPT演算法置換*/
{percent=OPT();/*計算OPT時的缺頁率*/
printf("The percent of OPT is %f",percent);}
else if(choice==2)/*採用LRU演算法置換*/
{percent=LRU();/*計算LRU時的缺頁率*/
printf("The percent of OPT is %f",percent);}
else printf("Your choice is invalid.");
getch();
}
『伍』 計算機系操作系統分頁存儲
105, 217, 567, 1120都可以轉換
因為頁大小是64位元組, 代碼段是11頁, 即0x2c0,即八進制的1600
小於1600的,都可以訪問
『陸』 用c語言分頁式存儲管理的地址轉換過程實現
邏輯地址轉換為物理地址
#include<stdio.h>
main()
{int p,d,la,pa,ps,a[100],n,i;/*pa為物理地址,la為物理地址,ps為頁面大小,a[100]存放頁表中對應主存的頁號,n為頁面數*/
printf("請輸入邏輯地址la=");/*輸入邏輯地址*/
scanf("%d",&la);
printf("請輸入頁面大小ps=");/*輸入頁面大小*/
scanf("%d",&ps);
printf("請輸入頁面數n=");/*輸入頁面數*/
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("輸入頁表中第%d頁項中主存頁號=",i);
scanf("%d",&a[i]);
}/*輸入頁表中主存的頁號*/
p=la/ps;d=la-p*ps;/*p為頁表項的頁號,d為頁內位移*/
pa=a[p]*ps+d;
printf("邏輯地址為%d的物理地址為%d",la,pa);
}
『柒』 分頁式存儲管理
進程有3頁, 那就是3* 64/16=12 K,
0塊 1塊 2塊 3塊 4塊 5塊 6塊 7塊
0 4K-1 4K 8K-1 8K --12k_1 12K 16K-1 16K -- 20K-1 20K 24K 28K----32K-1
邏輯地址=塊號 + 塊內地址,5276 ,應該是在第5塊的276位元組處, 20*1024+276 應該是物理地址
『捌』 敘述分頁式存儲管理(帶有快表)的遇輯地址到物理地址的映射過程敘述分頁式存儲管理(帶有快表)的遇輯地
摘要 (1)這種分配方法能夠提高處理器(CPU)的利用率。