1. 什麼是頁面 什麼是物理塊
什麼是頁面 什麼是物理塊
頁面,物理塊——分頁存儲管理方式中的單元在分頁方式中,用戶程序的地址空間被劃分成若干個固定大小的區域,稱為「頁」(或「頁面」).相應地
2. 基本分頁存儲管理方式的頁面與頁表
1) 頁面和物理塊
分頁存儲管理是將一個進程的邏輯地址空間分成若干個大小相等的片,稱為頁面或頁,並為各頁加以編號,從0開始,如第0頁、第1頁等。相應地,也把內存空間分成與頁面相同大小的若干個存儲塊,稱為(物理)塊或頁框(frame),也同樣為它們加以編號,如0#塊、1#塊等等。在為進程分配內存時,以塊為單位將進程中的若干個頁分別裝入到多個可以不相鄰接的物理塊中。由於進程的最後旅缺一頁經常裝不滿一塊而形成了不可利用的碎片,稱之為「頁內碎片」。
2) 頁面大小
在分頁系統中的頁面其大小應適中。頁面若太小,一方面雖然可使內存碎片減小,從而減少了內存碎片的總空間,有利於提高內存利用率,但另一方面也會使每個進程佔用較多的頁面,從而導致進程的頁表過長,佔用大量內存;此外,還會降低頁面換進換出的效率。然而,如果選擇的頁面較大,雖然可以減少頁表的長度,提高頁面換進換出的速度,但卻又會使頁內碎片增大。因此,頁面的大小應選擇適中,且頁面大小應是2的冪,通常為512 B~8 KB。 分頁地址中的地址結構如下:
對於某特定機器,其地址結構是一定的。若給定一個邏輯地址空間中的地址為A,頁面的大小為L,則頁號P和頁內地址d可按右圖所示公式求得:
其中,INT是整除函數,MOD是取余函數。例如,其系統的頁面大小為1 KB,設A = 2170 B,則由上式可以求得P = 2,d = 122。 頁表的功能可以由一組專門的寄存器來實現。一個頁表項用一個寄存器。由於寄存器具有較高的訪問速度,因而有利於提高地址變換的速度;但由於寄存器成本較高,且大多數現代計算機的頁表又可能很大,使頁表項的總數可達幾千甚至幾十萬個,顯然這些頁表項不可能都用寄存器來實現,因此,頁表大多駐留在內存中。在系統中只設置一個頁表寄存器PTR(Page-Table Register),在其中存放頁表在內存的始址和頁表的長度。平時,進程未執行時,拆慎辯頁表的始址和頁表長度存放在本進程的PCB中。當調度程序調度到某進程時,才將這兩個孝喊數據裝入頁表寄存器中。因此,在單處理機環境下,雖然系統中可以運行多個進程,但只需一個頁表寄存器。
當進程要訪問某個邏輯地址中的數據時,分頁地址變換機構會自動地將有效地址(相對地址)分為頁號頁內地址兩部分,再以頁號為索引去檢索頁表。查找操作由硬體執行。在執行檢索之前,先將頁號與頁表長度進行比較,如果頁號大於或等於頁表長度,則表示本次所訪問的地址已超越進程的地址空間。於是,這一錯誤將被系統發現並產生一地址越界中斷。若未出現越界錯誤,則將頁表始址與頁號和頁表項長度的乘積相加,便得到該表項在頁表中的位置,於是可從中得到該頁的物理塊號,將之裝入物理地址寄存器中。與此同時,再將有效地址寄存器中的頁內地址送入物理地址寄存器的塊內地址欄位中。這樣便完成了從邏輯地址到物理地址的變換。右圖示出了分頁系統的地址變換機構。 由於頁表是存放在內存中的,這使CPU在每存取一個數據時,都要兩次訪問內存。第一次是訪問內存中的頁表,從中找到指定頁的物理塊號,再將塊號與頁內偏移量W拼接,以形成物理地址。第二次訪問內存時,才是從第一次所得地址中獲得所需數據(或向此地址中寫入數據)。因此,採用這種方式將使計算機的處理速度降低近1/2。可見,以此高昂代價來換取存儲器空間利用率的提高,是得不償失的。
為了提高地址變換速度,可在地址變換機構中增設一個具有並行查尋能力的特殊高速緩沖寄存器,又稱為「聯想寄存器」(Associative Memory),或稱為「快表」,在IBM系統中又取名為TLB(Translation Lookaside Buffer),用以存放當前訪問的那些頁表項。此時的地址變換過程是:在CPU給出有效地址後,由地址變換機構自動地將頁號P送入高速緩沖寄存器,並將此頁號與高速緩存中的所有頁號進行比較,若其中有與此相匹配的頁號,便表示所要訪問的頁表項在快表中。於是,可直接從快表中讀出該頁所對應的物理塊號,並送到物理地址寄存器中。如在塊表中未找到對應的頁表項,則還須再訪問內存中的頁表,找到後,把從頁表項中讀出的物理塊號送地址寄存器;同時,再將此頁表項存入快表的一個寄存器單元中,亦即,重新修改快表。但如果聯想寄存器已滿,則OS必須找到一個老的且已被認為不再需要的頁表項,將它換出。右圖示出了具有快表的地址變換機構。
3. 什麼是頁面文件和快照
頁面文件(pagefile.sys)也稱虛擬內存,就是在硬碟上拿出(設定出)一部分空間作為暫不被調用程序或叫「惰性」程序及相關數據的臨時存放空間。因內存容量總是有限,而實際運行的程序會很多,若都塞在內存中會大量佔用有限的內存資源,不利於系統正常、快速、流暢地調用、運行急需的程序及數據。於是系統就開辟出一部分硬碟空間將惰性程序及相關數據暫時存放於此,而讓即將被調用的程序或稱「活性」程序及數據存留在內存中方便馬上調用;而頁面文件中暫存的「惰性程序」及數據待CPU需要調用時再與內存交互,如此即為頁面文件的工作原理。頁面文件像內存一樣起到中間暫存、交換作用又是硬碟空間的一部分,所以又叫虛擬內存。
2。
頁面文件如同文件夾中常見文件一樣,是實實在在存在的文件,只是為安全起見系統將其默認為隱藏文件,顯示後一般可在廳明系統盤根目錄中見到名為pagefile.sys的文件,它就是頁面文件。
3。
要修改頁面文件(虛擬內存)的存放位置及大小,對XP而言:可在「我的電腦」上右擊選「屬性」—「高級」選項卡里的「性能」選項框中—「設置」—「高級」—「虛擬內存」框中—「更改」即來到虛擬內存設置窗口(WIN2000進入類似)。要先確定你的頁面文件在哪個驅動器盤符,然後將別的盤符驅動器的頁面文件全部禁用,可保留一個頁面文件。微軟的默認設置是,頁面族伏賀文件最小值應為物理內存的1.5倍,最大值為2-3倍。我的兆派設置建議是同意微軟的默認設置,不需要另設它值。若物理內存為1G又覺得1.5倍的最小值設置占硬碟空間較大,最小值可設為1G即物理內存的1倍,以後若出現問題則改回默認設置;最大值默認即可。因頁面文件的使用是由小至大、逐漸增加的過程,若最小值范圍內可正常運行、交互,系統就不會再增大到最大值的程度。
4。
頁面文件最好單獨設置在一個盤符里(我的機器就設置到了F盤中),如此能使系統調用虛擬內存中的程序及數據時能更快速、更流暢。還有,變更頁面文件的位置之前最好能對相應盤符進行磁碟碎片整理,以使頁面文件連續、規律地存放利於快速讀取。
4. 在初中物理上「頁」是什麼意思
你說的是用刻度尺測量課本上一張紙的厚度的實驗吧?課本上一張紙有正反兩個面,每一面就是一頁,一張紙就是兩頁,如果課本有208頁,那就是104張。課本總厚度除以104就是一張紙的厚度了。
5. 什麼是邏輯地址和物理地址
有網友問到我:什麼是邏輯地址和物理地址?怎麼轉換?針對此問題,我為大家分享了具體的操作 方法 ,希望對你有幫助!
什麼是邏輯地址是指由程式產生的和段相關的偏移地址部分。例如,你在進行C語言指針編程中,能讀取指針變數本身值(&操作),實際上這個值就是邏輯地址,他是相對於你當前進程數據段的地址,不和絕對物理地址相干。只有在Intel實模式下,邏輯地址才和物理地址相等(因為實模式沒有分段或分頁機制,Cpu不進行自動地址轉換);邏輯也就是在Intel保護模式下程式執行代碼段限長內的偏移地址(假定代碼段、數據段如果完全相同)。應用程式員僅需和邏輯地址打交道,而分段和分頁機制對你來說是完全透明的,僅由系統編程人員涉及。應用程式員雖然自己能直接操作內存,那也只能在 操作系統 給你分配的內存段操作。
什麼是物理地址用於內存晶元級的單元定址,與處理器和CPU連接的地址匯流排相對應。 ——這個概念應該是這幾個概念中最好理解的一個,但是值得一提的是,雖然可以直接把物理地址理解成插在機器上那根內存本身,把內存看成一個從0位元組一直到最大空量逐位元組的編號的大數組,然後把這個數組叫做物理地址,但是事實上,這只是一個硬體提供給軟體的抽像,內存的定址方式並不是這樣。所以,說它是“與地址匯流排相對應”,是更貼切一些,不過拋開對物理內存定址方式的考慮,直接把物理地址與物理的內存一一對應,也是可以接受的。也許錯誤的理解更利於形而上的抽像。 虛擬內存(virtual memory) 這是對整個內存(不要與機器上插那條對上號)的抽像描述。它是相對於物理內存來講的,可以直接理解成“不直實的”,“假的”內存,例如,一個0x08000000內存地址,它並不對就物理地址上那個大數組中0x08000000 - 1那個地址元素;之所以是這樣,是因為現代操作系統都提供了一種內存管理的抽像,即虛擬內存(virtual memory)。進程使用虛擬內存中的地址,由操作系統協助相關硬體,把它“轉換”成真正的物理地址。這個“轉換”,是所有問題討論的關鍵。有了這樣的抽像,一個程序,就可以使用比真實物理地址大得多的地址空間。(拆東牆,補西牆,銀行也是這樣子做的),甚至多個進程可以使用相同的地址。不奇怪,因為轉換後的物理地址並非相同的。 ——可以把連接後的程序反編譯看一下,發現連接器已經為程序分配了一個地址,例如,要調用某個函數A,代碼不是call A,而是call 0x0811111111 ,也就是說,函數A的地址已經被定下來了。沒有這樣的“轉換”,沒有虛擬地址的概念,這樣做是根本行不通的。打住了,這個問題再說下去,就收不住了。邏輯地址(logical address) Intel為了兼容,將遠古時代的段式內存管理方式保留了下來。邏輯地址指的是機器語言指令中,用來指定一個操作數或者是一條指令的地址。以上例,我們說的連接器為A分配的0x08111111這個地址就是邏輯地址。 ——不過不好意思,這樣說,好像又違背了Intel中段式管理中,對邏輯地址要求,“一個邏輯地址,是由一個段標識符加上一個指定段內相對地址的偏移量,表示為 [段標識符:段內偏移量],也就是說,上例中那個0x08111111,應該表示為[A的代碼段標識符: 0x08111111],這樣,才完整一些” 線性地址(linear address)或也叫虛擬地址(virtual address) 跟邏輯地址類似,它也是一個不真實的地址,如果邏輯地址是對應的硬體平台段式管理轉換前地址的話,那麼線性地址則對應了硬體頁式內存的轉換前地址。
邏輯地址和物理地址拓展知識存儲器中每一個單元的地址可以用兩種方法表示:
1.邏輯地址:其表達形式為“段地址:段內偏移地址”。
2.物理地址:CPU與存儲器進行數據交換時在地址匯流排上
提供的20位地址信息稱為物理地址。
物理地址=段地址×10H+段內偏移量
CPU一次處理的數據是16位,地址匯流排實際上代表CPU的定址能力,地址線為20條那麼CPU實際的定址能力就是2的20次方就是1M。實際的物理地址是這樣形成的:
段地址*10H+偏移地址,偏移地址用IP指向,IP是16位的。
例如段地址是1234H,偏移地址是4321H
那麼實際的物理地址怎麼算呢:1234H*10H+4321H=12340H+4321H=16661H
實際上可以這么來理解,就是段地址左移一位後加上偏移地址就得出實際的物理地址。
這里邏輯地址和物理地址的關系又可以用一個比喻來說明:
比如你的學號是0102,這是你的真實地址亦即物理地址,那麼又假如01表示你的班級名稱,02表示你相對整個班級的位置,這就是邏輯地址,道理是一樣的,只不過在實際由邏輯地址合成物理地址的時候需要將物理地址左移一位,再加上偏移地址。
邏輯地址到物理地址的轉換方法以一個例子的形式講解邏輯地址到物理地址的轉換:
某虛擬存儲器的用戶編程空間共32個頁面,每頁為1KB,內存為16KB。假定某時刻一用戶頁表中已調入內存的頁面的頁號和物理塊號的對照表如下:
則邏輯地址0A5C(H)所對應的物理地址是什麼?要求:寫出主要計算過程。
解題過程:
首先要知道頁式存儲管理的邏輯地址分為兩部分:頁號和頁內地址。物理地址分為兩部分:
關系為:邏輯地址=頁號+頁內地址d
物理地址=塊號*塊長度( 等於頁面長度 L )+頁內地址;
頁號: p = lnt( 邏輯地址 A / 頁面長度 L ); d = 邏輯地址 A % 頁面長度 L (取余)
分析題:已知:用戶編程空間共32個頁面,2ˆ5=32得知頁號部分佔5位,由“每頁為1KB”,1K=2^10,可知內頁地址佔10位。
由“內存為16KB”,2^4=16得知塊號佔4位。
邏輯地址0A5C(H)所對應的二進製表示形式是:0000101001011100,後十位1001011100是頁內地址,
00010(本題特例,因為頁面長度為1KB)為為頁號,頁號化為十進制是2,在對照表中找到2對應的物理塊號是11,11轉換二進制是1011,11* 2^10 + d即可求出物理地址為10111001011100,化成十六進制為2 E5C;
即則邏輯地址0A5C(H)所對應的物理地址是2E5C;
猜你喜歡:
1. IP地址和物理地址有什麼區別
2. 物理地址和邏輯地址的區別
3. 虛擬地址與物理地址的概念
4. 物理地址什麼意思
5. 邏輯地址如何轉換成物理地址
6. 物理地址有什麼用
7. 物理地址作用是什麼
6. 什麼是頁面什麼事物理塊頁面的大小應如何確定
①頁面:分頁存儲管理將進程的邏輯地址空間分成若干個頁,並為各頁加以編號。
②物理塊:把內存的物理地址空間分成若干個塊,並為各塊加以編號。
③頁面大小應選擇適中,且頁面大小應該是2的冪,通常為1KB~8KB。
7. 磁碟緩存,虛擬內存,頁面文件,和物理內存的關系
如果它不存在,但是你能看見它 -- 它是虛擬的(IBM宣傳虛擬內存之用語)。虛擬內存技術是計算機發展史上的一項重要的技術,它幫助應用程序擺脫了「體積」的限制。
記得上大學時,有一本書好像叫做「計算機網路 - 自頂向下」,全名記不太清了。書中從人們接觸最多也最熟悉的「應用層」開始講,一直講到「物理層」,看完這本書後感覺效果不錯。所以按照這種方法我也嘗試著自上而下的去學習「虛存」,從我們最熟悉的C庫介面調用說起,一直談到底層的硬體支持設施。
1、初學者的疑惑
初學者往往都會寫出以下這樣的例子程序來學習malloc和free的使用。
int main() {
int *p = malloc(10000);
printf("p's address is 0x%p\n", p);
free(p);
return 0;
}
但往往結果讓這些初學者們感到疑惑。比如上述的例子,在SUN SPARC 64編譯後其輸出如下:
p's address is 0x100100dc0
看到這樣的結果,初學者往往心裡嘀咕,「這台機器物理內存才4G,其地址空間總共才4294967296(dec),而0x100100dc0轉換十進制為4296019392(dec),這個地址明顯已經超出了我的物理內存的限制,這是怎麼回事呢?」。其實這里的解釋很簡單:因為我們看到的都是「虛擬內存地址」。
2、「堆」為何物
malloc是個極其常見的內存分配介面函數,它主要負責運行時在「堆」上為程序動態分配內存空間。我們總是在口頭上談論著「堆」,那麼「堆」到底為何物呢?我們已經知道了有「虛擬地址」這個東西的存在,想必「堆」和「虛擬地址」有著千絲萬縷的聯系^_^。我們來翻看一些經典書籍中的描述。在CS.APP[注1]中的描述是這樣的:「堆是進程地址空間中的一段「虛擬地址」空間。在大多數的Unix系統中,堆是映射「二進制零區域(demand-zero)」實現的。其位置在bss段後,其增長方向為高地址方向」。
3、內存映射
前面談到「demand-zero」這個新名詞,那麼什麼叫「映射到demand-zero」呢?這里蘊含著一個極其重要的概念「內存映射」。內存映射好似一道橋梁,將放在物理磁碟上的對象和一段進程「虛擬地址」空間連接起來。磁碟上的對象,主要指的就是文件,在多數Unix的實現中支持兩種文件的內存映射,分別為Regular File和匿名文件(如demand-zero)。映射的過程大致為將文件分成若干「虛擬內存基本單元(頁)」大小存於「交換區」,直到CPU指令第一次訪問到某個單元時,這個單元才真正被載入到物理內存中。
4、虛擬內存,何方神聖
看到這是不是有些「雲里霧里」的感覺亞^_^。其實對於用戶進程來說,它是看不到CPU和OS是如何相互配合完成內存管理的。它只認為它面前的是一個這樣的情景:「一個完全被我擁有的CPU、一個從擁有M地址空間的物理內存(M = 2的n次方,n為地址匯流排寬度)...」。這里的用戶進程眼中的「物理內存」實際就是「虛擬內存」。虛擬意味著假象,我們知道一個用戶進程運行時可能僅僅佔用的物理內存的一小部分。看來用戶進程被欺騙了。而這個騙局是由操作系統和CPU共同布置的。為了讓這個騙局一直維持下去,CPU和OS還是做了很多工作的,究竟有哪些工作呢?我們一一來看看。
1) 交換區(swap)
為了支持虛擬內存,操作系統在物理內存、磁碟之間交換數據的基本單元為「頁」。頁的大小是固定的,其因操作系統而異。這樣一個用戶進程在被載入之前首先要被分成若干個「頁」,這些頁存儲在磁碟上。那麼是不是進程啟動後所有的頁都被載入到物理內存中呢?答案是NO。在當前的Unix操作系統中,都有一個叫「交換區」的地方,「交換區」在磁碟上,它存儲的是「已分配的虛擬內存頁」。又有些糊塗是吧,什麼叫已分配的頁呢?一個進程虛擬內存頁的載入流程大致是這樣的:一旦用戶進程一虛擬頁需要被載入,則操作系統會在「交換區」中為該頁分配一個頁,一旦CPU訪問的虛擬地址落入該頁地址空間,則該頁才被換入到物理內存中。在這個過程中虛擬頁有多個狀態,分別如下:
未分配的 - 進程虛擬頁未得到載入指令,仍安靜的待在磁碟上;
未緩存的 - OS為該進程虛擬頁在交換區分配了一個空間,但是該虛擬頁還未被引用;
已緩存的 - 該虛擬頁被引用,被載入到物理內存中。
2) 換入換出
物理內存容量有限,當物理內存無空間存儲新的內存頁的時候,就需要將某些內存頁從物理內存中移出以為新頁騰出空間。這個過程對於那些被移出的頁來說,就叫「換出」;相反對於那些新加入到物理內存中的頁來說就叫做「換入」。
5、從緩存角度看虛存
現代計算機的存儲體系是呈金字塔狀的。越接近頂層,速度越快,容量越小,價格越貴;越接近底層,速度越慢,容量越大,價格越低。這樣就形成了一個逐級緩存的機制。第K層設備永遠是第K+1層設備的緩存。按照這種說法,在早期計算機中,主存是磁碟的緩存,CPU內的高級Cache是主存的緩存。現代計算機基本都支持虛擬內存機制,而虛存頁是存儲在磁碟上的,虛存頁在主存中換入換出。按照緩存的概念,虛存屬於容量大,速度慢的第K+1層,而處於第K層的主存就可以看作是虛擬內存的緩存。那麼一切緩存理論就都可以應用在虛存和物理內存之間了,比如換入換出演算法等。
6、硬體支持
在支持虛擬內存機制的計算機中,CPU都是以虛擬地址形式生成指令地址或者數據地址的,而這個虛擬地址對於物理內存來說是不可見的,那麼是誰來屏蔽這個差異的呢?答案是MMU(Memory Management Unit)。MMU負責將CPU發出的虛擬地址轉換成相應的物理內存地址。MMU不是孤立工作的,OS為其提供了很好的支持,OS在物理內存中為MMU維護著一張全局的頁表,來幫助MMU找到正確地物理內存地址。
8. 什麼是頁面 什麼是物理塊
所謂物理內存是指你李鎮內存條的類存鎮滑,頁面文件是指系統在里電腦上存放的臨時文件,虛擬內存是指在硬御擾臘盤上劃分的一個固定大小的區域用來存放頁面文件,虛擬內存和頁面文件一樣大。