?? chapter6.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0036)http://www.xtrj.org/smr/chapter6.htm -->
<HTML><HEAD><TITLE>?????TLB</TITLE><!-- http://www.xtrj.org/smr/chapter6.htm -->
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.2180" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId></HEAD>
<BODY>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=ZH-CN
style="FONT-SIZE: 18pt; FONT-FAMILY: SimSun; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">內存管理與</SPAN><SPAN
style="FONT-SIZE: 18pt; mso-bidi-font-size: 12.0pt">TLB<O:P>
</O:P></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我們傾向于直接從最底層引入本書中的大部分主題進行探討,對于一本關注計算機底層體系結構的書而言,這似乎是自然而然的。然而,為了說清楚內存管理硬件,我們得從</SPAN>MIPS
R2000<SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所尋求實現的</SPAN>unix<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">風格的虛擬存儲系統開始講起。本章的后面我們還會討論一下相同的硬件如何在其他環境下工作。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">早期的</SPAN>MIPS
CPU<SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定位于支持運行在</SPAN>UNIX<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工作站與服務器上的應用程序,因此內存管理硬件被構想為一個最小化的能幫助</SPAN>BSD
UNIX<SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">——一個經過完善設計并擁有充分多虛擬存儲需求的操作系統的典型——提供內存管理功能的硬件。很明顯的是,這些設計者們十分熟悉</SPAN>DEC
VAX<SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">小型機,并且在從這種體系結構中獲取了眾多思路的同時,也摒棄了許多復雜設計。尤其是許多</SPAN>VAX<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用微代碼來解決的問題,在</SPAN>MIPS<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中被交由軟件處理。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本章中我們將從</SPAN>MIPS<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的設計起點開始,面對著一個</SPAN>unix<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">類型的操作系統以及它的虛存系統的眾多需求。我們將會展示一下</SPAN>MIPS<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的硬件是如何滿足這些需求的。結尾時,我們會討論一下在不能像通常一樣使用內存管理硬件的嵌入式系統中,您可以采取的幾種使用方式。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">內存地址轉譯硬件(下面我們將稱其</SPAN>MMU<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,全稱為</SPAN>memory
management unit<SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">)有幾類不同用途:</SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 42.0pt"><SPAN
style="FONT-FAMILY: Wingdings">n<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN><SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">重定位(</SPAN>Relocation<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">):程序的函數方法和預先聲明的數據地址均在編譯期間決定,</SPAN>MMU<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">允許程序在任何物理地址運行。</SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 42.0pt"><SPAN
style="FONT-FAMILY: Wingdings">n<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN><SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">為程序分配內存:</SPAN>MMU<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以從物理內存里許多零散的頁中創建連續的程序空間,使我們能從一個充滿固定大小頁面的池里分配內存。如果我們不停分配釋放大小不一的內存塊,就會碰上內存碎片問題:我們不得不止步于一個布滿“小孤島”的內存空間,無法滿足對較大塊內存的申請要求,哪怕此時所有的空閑空間之和是足夠的。</SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 42.0pt"><SPAN
style="FONT-FAMILY: Wingdings">n<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN><SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">隱藏和保護:用戶級程序只能訪問</SPAN>kuseg<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">內存區域(較低的程序地址)內的數據。這類程序只能在操作系統所許可的內存區域中取得數據。</SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 42pt"><SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">此外,每一頁可以獨立的指定為可寫權限或者寫保護權限;操作系統甚至可以停止一個意外的寫覆蓋代碼空間的應用程序。</SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 42.0pt"><SPAN
style="FONT-FAMILY: Wingdings">n<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN><SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">擴展地址空間:</SPAN><SPAN
lang=ZH-CN> </SPAN><SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有些</SPAN>CPU<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不能直接訪問它們擁有的全部物理空間。盡管</SPAN>MIPS
I <SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系列</SPAN>CPU<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是真正的</SPAN>32<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位體系結構,它們卻布局了地址映射,使得未被映射的地址空間窗口</SPAN>kseg0<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN>kseg1<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">(它們不依賴</SPAN>MMU<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">進行地址轉換)落在了物理內存的開頭的</SPAN>512M<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">內。如果你要訪問更高地址,則必須通過</SPAN>MMU<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 42.0pt"><SPAN
style="FONT-FAMILY: Wingdings">n<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN><SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">內存映射對程序的適應化:在</SPAN>MMU<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的幫助下,你的程序能夠去使用適合它的地址。同一段程序的許多份拷貝可能會同時運行在一個龐大的操作系統里,令它們去使用相同的程序地址變得更容易。</SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 42.0pt"><SPAN
style="FONT-FAMILY: Wingdings">n<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN><SPAN lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">調頁能力:程序可以好像已經得到它們所申請分配的所有資源一樣正常的運行,而操作系統實際上只分配給它們當前所需的資源。訪問未分配空間的程序會導致一個交由操作系統處理的異常(</SPAN>exception<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">),操作系統此時才在這塊內存中裝入適當數據并令應用程序繼續運行。</SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt"> <O:P> </O:P></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt">UNIX<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">內存管理工作的本質是為了能運行眾多不同的任務(即</SPAN>multitasking<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">——多進程),并且每個任務各自擁有自己的內存空間。如果這個工作圓滿完成,那么各任務的命運將彼此獨立開來(操作系統自身也因此得以保護):一個任務自身崩潰或者錯誤的做某些事不會影響整個系統。顯然,對一個使用分布終端來運行學生們程序的大學而言,這是一個很有用的特性;然而不僅如此,甚至是要求最嚴格的商業系統環境也需要能夠在運行的同時支持實驗軟件或原型軟件一并進行調試和測試。</SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt">MMU<SPAN
lang=ZH-CN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并不僅僅為了建立巨大而完備的虛擬存儲系統,小的嵌入式程序也能在重定位和更有效的內存分配里受益。如果能把應用程序觀念上的地址映射到任何可獲得的物理地址,系統在不同時刻運行不同程序就會更加容易。</SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><SPAN lang=ZH-CN
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -