當前位置:首頁 » 服務存儲 » 分頁存儲中找不到對應的塊號
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

分頁存儲中找不到對應的塊號

發布時間: 2023-01-24 10:09:50

Ⅰ 在二級頁表分頁存儲管理中怎樣由十進制的邏輯地址計算相對應的物理地址

1)092b(H)轉換成二進制就是0000 1001 0010 1011 前6位為頁號p得先轉換成10進制為2 ,對應的塊號為5,用5*1024加上後10位(0100101011轉換成10進制為1+2+8+32+256=299)為5419即為物理地址
2)2A12轉換成二進制為0010 1010 0001 0010 頁號為001010就是10 而頁號中缺頁了 溢出
3)2A5C十進制就是10844再除以1024等於 10餘604 10為塊號 而題目中沒有 也是溢出
不知道算對沒.

Ⅱ (操作系統)已知頁號怎麼求塊號(怎麼對應快表,看不懂,求大神了)

物理地址 (physical address): 放在定址匯流排上的地址。放在定址匯流排上,如果是讀,電路根據這個地址每位的值就將相應地址的物理內存中的數據放到數據匯流排中傳輸。如果是寫,電路根據這個 地址每位的值就將相應地址的物理內存中放入數據匯流排上的內容。物理內存是以位元組(8位)為單位編址的。
虛擬地址 (virtual address): 4G虛擬地址空間中的地址,程序中使用的都是虛擬地址。
如果CPU寄存器中的分頁標志位被設置,那麼執行內存操作的機器指令時,CPU會自動根據頁目錄和頁表中的信息,把虛擬地址轉換成物理地址,完成該指令。 比如 mov eax,004227b8h ,這是把地址004227b8h處的值賦給寄存器的匯編代碼,004227b8這個地址就是虛擬址。CPU在執行這行代碼時,發現寄存器中的分頁標志位已 經被設定,就自動完成虛擬地址到物理地址的轉換,使用物理地址取出值,完成指令。對於Intel CPU 來說,分頁標志位是寄存器CR0的第31位,為1表示使用分頁,為0表示不使用分頁。對於初始化之後的 Win2k 我們觀察 CR0 ,發現第31位為1。表明Win2k是使用分頁的。
使用了分頁機制之後,4G的地址空間被分成了固定大小的頁,每一頁或者被映射到物理內存,或者被映射到硬碟上的交換文件中,或者沒有映射任何東西。對於一 般程序來說,4G的地址空間,只有一小部分映射了物理內存,大片大片的部分是沒有映射任何東西。物理內存也被分頁,來映射地址空間。對於32bit的 Win2k,頁的大小是4K位元組。CPU用來把虛擬地址轉換成物理地址的信息存放在叫做頁目錄和頁表的結構里。
物理內存分頁,一個物理頁的大小為4K位元組,第0個物理頁從物理地址 0x00000000 處開始。由於頁的大小為4KB,就是0x1000位元組,所以第1頁從物理地址 0x00001000 處開始。第2頁從物理地址 0x00002000 處開始。可以看到由於頁的大小是4KB,所以只需要32bit的地址中高20bit來定址物理頁。
頁表,一個頁表的大小為4K位元組,放在一個物理頁中。由1024個4位元組的頁表項組成。頁表項的大小為4個位元組(32bit),所以一個頁表中有1024 個頁表項。頁表中的每一項的內容(每項4個位元組,32bit)高20bit用來放一個物理頁的物理地址,低12bit放著一些標志。
頁目錄,一個頁目錄大小為4K位元組,放在一個物理頁中。由1024個4位元組的頁目錄項組成。頁目錄項的大小為4個位元組(32bit),所以一個頁目錄中有 1024個頁目錄項。頁目錄中的每一項的內容(每項4個位元組)高20bit用來放一個頁表(頁表放在一個物理頁中)的物理地址,低12bit放著一些標 志。
對於x86系統,頁目錄的物理地址放在CPU的CR3寄存器中。
CPU把虛擬地址轉換成物理地址:
一個虛擬地址,大小4個位元組(32bit),包含著找到物理地址的信息,分為3個部分:第22位到第31位這10位(最高10位)是頁目錄中的索引,第 12位到第21位這10位是頁表中的索引,第0位到第11位這12位(低12位)是頁內偏移。對於一個要轉換成物理地址的虛擬地址,CPU首先根據CR3 中的值,找到頁目錄所在的物理頁。然後根據虛擬地址的第22位到第31位這10位(最高的10bit)的值作為索引,找到相應的頁目錄項 (PDE,page directory entry),頁目錄項中有這個虛擬地址所對應頁表的物理地址。有了頁表的物理地址,根據虛擬地址的第12位到第21位這10位的值作為索引,找到該頁表 中相應的頁表項(PTE,page table entry),頁表項中就有這個虛擬地址所對應物理頁的物理地址。最後用虛擬地址的最低12位,也就是頁內偏移,加上這個物理頁的物理地址,就得到了該虛 擬地址所對應的物理地址。
一個頁目錄有1024項,虛擬地址最高的10bit剛好可以索引1024項(2的10次方等於1024)。一個頁表也有1024項,虛擬地址中間部分的 10bit,剛好索引1024項。虛擬地址最低的12bit(2的12次方等於4096),作為頁內偏移,剛好可以索引4KB,也就是一個物理頁中的每個 位元組。
一個虛擬地址轉換成物理地址的計算過程就是,處理器通過CR3找到當前頁目錄所在物理頁,取虛擬地址的高10bit,然後把這10bit右移2bit(因 為每個頁目錄項4個位元組長,右移2bit相當於乘4)得到在該頁中的地址,取出該地址處PDE(4個位元組),就找到了該虛擬地址對應頁表所在物理頁,取虛 擬地址第12位到第21位這10位,然後把這10bit右移2bit(因為每個頁表項4個位元組長,右移2bit相當於乘4)得到在該頁中的地址,取出該地 址處的PTE(4個位元組),就找到了該虛擬地址對應物理頁的地址,最後加上12bit的頁內偏移得到了物理地址。

Ⅲ 分頁式存儲管理系統

進程大小是64/16*3=12KB
起始地址分別是2*4、4*4、7*4
物理地址5276/(1024*4)=1.....1180
1對應的是4
4*4+1180就是物理地址

Ⅳ 基本分頁存儲管理

假設是按位元組編址

考慮支持多道程序的兩種連續分配方式

原因:連續分配要求進程佔有的必須是一塊連續的內存區域
能否講一個進程分散地裝入到許多不相鄰的分區,便可充分利用內存

基本分頁存儲管理的思想:把內存分為一個個相等的小分區,再按照分區大小把進程拆分成一個個小部分

頁框/頁幀:內存空間分成的一個個大小相等的分區(比如4KB)
頁框號:頁框的編號,從0開始,從低地址開始

頁/頁面:用戶進程的地址空間分為和頁框大小相等的一個個區域
頁號:頁/頁面的編號,從0開始

進程的最後一個頁面可能沒有一個頁框那麼大,頁框不能太大,否則可能產生過大的內部碎片

操作系統以頁框為單位為各個進程分配內存空間。進程的每個頁面分別放入一個頁框中,也就是說,進程的頁面與內存的頁框有一一對應的關系
每個頁面不必連續存放,也不必按照先後順序,可以放到不相鄰的各個頁框中

進程在內存中連續存放時,通過動態重定位實現邏輯地址到物理地址的轉換。在裝入模塊之後,內存中指令使用的依然是邏輯地址,直到指令執行的時候才會進行地址轉換。系統會設置一個重定位寄存器,用來存放裝入模塊存放的起始位置,重定位寄存器中的值加上邏輯地址就是該邏輯地址實際對應的物理地址

如果採用分頁技術

頁框大小為4KB,地址空間為4GB的系統
頁號為前20位,頁內偏移量為後12位

頁表:為了能知道進程的每個頁面在內存中存放的位置,操作系統要為每個進程建立一張頁表

一個進程對應一張頁表
進程的每一頁對應一個頁表項
每個頁表項由頁號和頁框號組成
頁表記錄進程頁面和實際存放的頁框之間的對應關系

每個頁表項的長度是相同的,頁號是隱含的
各頁表項會按順序連續存放在內存中,如果該頁表在內存中的起始地址是X,4GB/4KB系統的頁框有

用於實現邏輯地址到物理地址轉換的一組硬體機構

通常會在系統中設置一個頁表寄存器(PTR),存放頁表在內存中的起始地址F和頁表長度M(M個頁表項)
進程未執行時,頁表的起始地址和頁表長度放在進程式控制制塊(PCB)中,當進程被調度時,操作系統內核會把他們放到頁表寄存器中

基本分頁存儲管理中地址是一維的,即只要給出一個邏輯地址,系統就可以自動計算出頁號、偏移量,不需要顯式告訴系統偏移量是多少

理論上,頁表項長度為3即可表示內存塊號的范圍,但是為了方便頁表查詢,會讓頁面恰好能裝得下整數個頁表項,令每個頁表項佔4位元組
4KB頁面,可以放4096/3 =1365個頁表項,有4096%3 =1B的碎片,訪問1365及之後的頁表項時,還要考慮前面的頁框中的碎片,才能得到頁表項的物理地址,比較麻煩

進程頁表通常存放在連續的頁框中,這樣就能用統一的計算方式得到想要得到的頁表項存儲的位置

地址變換過程中有兩次訪存操作:查詢頁表、訪問目標內存單元

局部性原理

如果這個程序將程序對應的指令存放在10號內存塊,將程序中定義的變數存放在23號內存塊,當這個程序執行時,會很頻繁地反問10、23號內存塊

時間局部性:如果執行了程序中的某條指令,那麼不久後這條指令很有可能被再次執行;如果某個數據被訪問過,不久之後該數據很有可能再次被訪問(因為程序存在大量循環)
空間局部性:一旦程序訪問了某個存儲單元,在不久之後,其附近的存儲單元也很有可能被訪問(因為很多數據在內存中連續存放)

基本地址變換機構中,每次要訪問一個邏輯地址,都要查詢頁表,由於局部性原理,可能連續多次查詢同一個頁表項

快表:又稱聯想寄存器(TLB),是一種訪問速度比內存塊很多的高速緩存,用來存放當前訪問的若干頁表項,以加速地址變換的過程。內存中的頁表常稱為慢表

引入快表後地址的變換過程

一般來說,快表的命中率可以達到90%以上

單級頁表存在的問題

對問題1

可將頁表進行分組,使每個內存塊剛好可以放入一個分組。為離散分配的頁表再建立一張頁表,稱為頁目錄表,或外層頁表
各級頁表的大小不能超過一個頁面

針對兩級頁表

對問題2

可以在需要訪問頁面時,才把頁面調入內存(虛擬存儲技術),可以在頁表項中增加一個標志位,用於表示該頁面是否已經調入內存
若想訪問的頁面不在內存中,會產生缺頁中斷(內中斷),然後將目標頁面從外存調入內存
之後的文章會有展開

兩級頁表訪存次數分析:如果沒有TLB,第一次訪存是訪問內存中的頁目錄表,第二次訪存是訪問內存中的二級頁表,第三次訪存是訪問目標內存單元

Ⅳ 操作系統,某分頁存儲管理系統,

是不是這個意思:
int main(int argc, char *argv[])
{
int page[]={0,1,2,3};
int block[]={2,3,1,6};
int addr[]={1011,2148,3000,4000,5012};
int i3,i4;
int i,j;

for(i=0;i<5;i++)
{
i3=addr[i]/1024;//頁號
i4=addr[i]%1024;//塊內地址

for(j=0;j<4;j++)
{
//查找頁對應的塊
if(i3==page[j])
{
i3=block[j];
cout<<addr[i]<<"對應塊號:"<<i3<<" 塊內地址:"<<i4<<endl;
break;
}
}
}

system("PAUSE");
return 0;
}

Ⅵ 基本分頁存儲管理

  閱讀前請先閱讀 內存管理基礎 。從本文開始就介紹不連續分配的幾種方式,本文主要介紹基本分頁存儲管理。

  假設進程A的大小為23MB,但是每個分區的大小隻有10MB,如果進程只能佔用一個分區,顯然是放不下的。
  解決思路:如果允許進程佔用多個分區,那麼可以把進程拆分成 10MB + 10MB + 3MB三個部分 ,再把這三個部分別放在三個分區中(這些分區不要求連續).....

  將內存空間分為一個個大小相等的分區(如每個分區4KB,每個分區就是一個 「頁框」 ,或稱 「內存塊」 「物理塊」 。每個頁框有一個編號,即 「頁框號」 ,或 「內存塊號」 「物理塊號」 ,頁框號 從0開始 )。將用戶進程的地址空間也分為與頁框大小相等的一個個區域,稱為 頁面 。頁框的大小不能太大,否則可能會產生過大的內存碎片。
  操作系統 以頁框為單位為各個進程分配內存空間。 進程的每個頁面分別放入一個頁框中,即進程的 頁面和內存的頁框 一一對應 的關系。

  進程分頁後,進程的各個頁面可以放在不連續的頁框中,所以如何實現邏輯地址到物理的地址的轉換?
  如下圖,將下面的進程分頁,假設每頁大小為50B,那麼就分為4個頁面。

  手動計算方法:
   頁號 = 邏輯地址 / 頁面長度(取整數部分)。
   頁內偏移量 = 邏輯地址 % 頁面長度
   頁面在內存中的起始位置 :操作系統需要用某種數據結構記錄進程各個頁面的起始位置。
  對於計算機,通常將 頁面的大小劃分為2的整數次冪 。假設用32個二進制位表示邏輯地址,頁面大小為取2 12 B = 4096B = 4KB。

  如邏輯地址2,用二進製表示00000000 00000000 0000 0000 00000010 ,前24位二進制對應的十進制值就是邏輯地址2對應的頁號,即0號頁,而後12二進制位對應的十進制值就是偏移量。如果0號頁在內存中的起始地址為X,那麼邏輯地址2對應的物理地址就是 X + 2.
  同理,邏輯地址4097,用二進製表示00000000 00000000 0001 0000 00000001 ,前24位二進制對應的十進制值就是邏輯地址4097對應的頁號,即1號頁,而後12二進制位對應的十進制值就是偏移量。如果0號頁在內存中的起始地址為Y,那麼邏輯地址4097對應的物理地址就是 Y + 1.
  結論: 如果每個頁面的大小為2 k B,用二進製表示邏輯地址,則末尾的K位表示頁內偏移量,其餘部分就是頁號。
  因此,如果讓 每個頁面的大小為2的整數次冪, 計算機就可以很方便的得出一個邏輯地址對應的頁號和頁內偏移量。
  如果一個頁面的大小為2KB,那分頁存儲管理的邏輯地址結構為:

  地址結構包括兩個部分:前一個部分表示頁號,後一個部分表示頁內偏移量W。

  在知道如何計算頁號和偏移量後,要計算實際的物理地址,還需要知道頁號在內存中的起始地址,如何知道每個頁面在內存中存放的位置——操作系統要為 每個進程建立一張頁表。

  按照之前的方法計算出邏輯地址所對應的頁號N,然後根據頁表區查詢實際的內存塊號M,由於每個內存塊號的大小都是相等的,所以實際地址 = M * 內存塊大小 + 偏移量。

  在實際上,頁表中是沒有頁號的,那怎麼找到實際對應的內存塊號呢?
  假設某系統物理內存大小為4GB,頁面大小為4KB,則每個頁表項至少應該佔用多少位元組?

  各頁表項會 按順序連續地 存放在內存中,如果該頁表在內存中存放的地址為X,則M號頁對應的頁表項存放的地址為:X + M * 3B
  因此,頁表的頁號可以是隱含的。只需要知道 頁表存放的起始地址 頁表項長度 ,即可找到各個頁號對應的頁表項存放的位置,找到位置後就可以讀取該位置的值,即實際內存塊號。
  舉個例子,如果按照邏輯地址計算出了偏移量為20,頁號為1,頁表中的頁號是隱藏的,那麼根據頁表在內存中的起始地址20(假設的值),以及頁表項長度3B,那麼頁號為1所對應的實際內存塊號的值所在的地址就是:20 + 3 * 1 = 23的位置,然後在該位置的值,該值就是實際內存塊號,如果是4的話,那麼實際地址就是: 4 * 頁面大小(4096B) + 20 = 16404。

  基本地址變換結構可以藉助進程的頁表將邏輯地址轉換為物理地址。
  通常在系統中設置一個 頁表寄存器(PTR Page-Table Register) ,存放 頁表在內存中起始地址F 頁表長度M
  進程在未執行時,頁表的起址和頁表長度放在 進程式控制制塊(PCB)中 ,當進程被調度時,操作系統內核會把它們放在頁表寄存器中。

  邏輯地址到物理地址變換的過程:

  比較頁表長度,頁表項長度和頁面大小三個概念:

  在分頁存儲管理(頁式管理)系統中,只要確定了每個頁面的大小,邏輯地址結構就確定了。因此, 頁式管理中地址是一維的。 即只要給出一個邏輯地址,系統就可以自動算出頁號、頁內偏移量兩個部分,並不需要顯示告系統這個邏輯地址中,頁內偏移量佔多少位。
  基本地址變換結構需要訪問兩次內存: 第一次訪問內存查找頁表;第二次訪問物理內存對應的內存單元。

  對於上圖,會很頻繁地訪問10號塊中的指令、23號塊。
   時間局部性 :如果執行了程序中的某條指令,那麼不久後這條指令很有可能再次執行:如果某個數據被訪問過,不久之後該數據很有可能再次被訪問。(因此程序中存在大量循環)。
   空間局限性 :一旦程序訪問了某個存儲單元,在不久之後,其附近的存儲單元也很有可能被訪問。(因為很多數據在內存中都是連續存放的。如上面的數組,每次循環一次都會訪問鄰近的下一個元素地址)。
  在基本地址變換機構中,每次訪問一個邏輯地址,都需要查詢內幕才能中的頁表。由於局部性原理,可能連續很多次查找到的都是一個頁表項。既然如此,就可以利用這個特性減少訪問頁表的次數——快表。

   快表 ,又稱 聯想寄存器(TLB) ,是一種 訪問速度比內存快很多 的高速緩沖存儲器,用來存儲當前訪問的若干頁表項,以加速地址變換的過程。與此對應,內存中的頁表常稱為 慢表。
  快表的地址包換過程:
  (1) CPU給出邏輯地址,由某個硬體算得頁號、頁內偏移量,將頁號與快表中的所有頁號進行比較。
  (2) 如果找到匹配的頁號,說明要訪問的頁表項在快表中有副本,則直接從中取出該頁對應的內存塊號,再根據內存塊號中與頁內偏移量算地物理地址。最後訪問該物理地址對應的內存單元。因此如果快表命中,則訪問某個邏輯地址只需 一次 訪問內存即可。
  (3) 如果沒有找到匹配的頁號,則就需要訪問頁表,需要兩次訪問內存,在第一次訪問內存查詢得到頁號後,需要將頁號添加到快表中,以便後面再次被訪問。如果快表已滿,則必須按照一定的演算法對舊的頁表項進行替換。
  由於查詢快表比查詢頁表的速度快很多,因此只要快表命中,就可以節省很多時間。因為局部性原理,一般來說快表的命中率可以達到90%以上。

Ⅶ (存儲管理)01.分頁式存儲管理

將內存劃分為若干個大小相等的分區,叫做塊;將邏輯空間劃分出與塊大小一致的分區,叫做頁。作業運行時,通過地址重定位技術,實現頁與塊的對應。這樣就以頁的方式來管理存儲塊,就叫分頁式存儲管理。

在分配存儲塊時,會根據作業的邏輯地址的大小計算所需要多少個存儲塊,然後查找空閑塊並更新空閑塊的狀態為佔用;回收存儲塊時,會將作業關聯的所有空閑塊的狀態設置為空閑。記錄空閑塊狀態的方法有兩種:點陣圖法和鏈表法。

在分配存儲塊之後,就在頁表中,增加頁和塊對應關系的記錄;同理,回收存儲塊時,就會刪除對應記錄。

訪問存儲塊時,就會根據邏輯地址的頁號,在頁表找到對應的塊號,然後再通過塊號計算出物理地址,找到對應的存儲塊。如下圖:

補充

頁表:記錄頁號與塊號對應關系的表,包含頁號和塊號兩個欄位。

邏輯地址:由 「頁號」 和 「頁內地址」 組成。其中頁內地址是通過頁大小來決定。

例如:邏輯地址長度為 16 位,頁大小是 1kb (二的十次冪),那麼頁內地址占低十位,高六位是頁號。如下:

在重定位存儲塊時,需要訪問頁表。為了加快重定位,就會通過快表(聯想存儲器,記錄常用的頁號和塊號的對應關系)來快速通過頁號找到對應的塊號。但是如果不能通過快表找到對應的塊號,那麼就會按照查找頁表的方式來完成重定位。

Ⅷ 分頁式存儲管理

進程有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 應該是物理地址

Ⅸ 若一分頁存儲管理系統中

1011/1024=0(頁號)----餘1011(頁內偏移地址),說明它的頁號為0,查頁表得相應塊號為2,頁面大小為1024字,所以1011的物理地址為:2*1024+1011=3059;
同理,下面的那些地址就自己算了。
至於5012,因為頁表內不存在頁號為4的,所以5012會產生一個越界中斷