windows存儲文件設備管理_第1頁
windows存儲文件設備管理_第2頁
windows存儲文件設備管理_第3頁
windows存儲文件設備管理_第4頁
windows存儲文件設備管理_第5頁
已閱讀5頁,還剩98頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

3.WindowsXP文件組成WindowsXP安裝后一般在系統(tǒng)盤(通常為硬盤c:)上生成3個文件夾DocumentsandSettings、ProgramFilesWindows,除少數(shù)幾個系統(tǒng)文件存儲在系統(tǒng)盤根目錄中,絕大局部文件存儲在這3個文件夾中(1)DocumentsandSettings文件夾 DocumentsandSettings文件夾用于保存用戶配置信息等。默認情況下,此文件夾中會有Administrator、Allusers、DefaultUser、LocalService、NetworkService文件夾,以及用不同用戶名建立的文件夾(如果系統(tǒng)中創(chuàng)立了多個用戶)。其他文件夾都為用戶配置文件夾,且文件夾結構也大體相同。以DefaultUser文件夾為例,該文件夾一般包含以下一些主要子文件夾①ApplicationData:通用應用程序數(shù)據(jù)文件夾,用于存放已經(jīng)安裝的一些應用程序的專用數(shù)據(jù),其內(nèi)容是軟件安裝時自動生成的。Startup文件夾存在(如果安裝過Office,此處存放的是Word啟動時要自動翻開的文檔)。②"開始"菜單:存放"開始"菜單中的局部程序組和快捷方式。③桌面:存放該登錄用戶的局部桌面工程。④ApplicationData:用于存儲應用程序數(shù)據(jù)。⑤Templates:其中可能有Word、Excel等的模板文件,即右擊鼠標并選擇“新建〞命令創(chuàng)立文檔時使用的參考模板。⑥MyDocuments(我的文檔

):其中含有

MyMusic和

MyPictures兩個文件夾。該文件夾一般為默認文件夾

,用于存儲用戶的文檔。(2)ProgramFiles文件夾ProgramFiles文件夾用于存儲安裝的

Windows應用程序,包括

Windows操作系統(tǒng)內(nèi)置的一些應用程序

(例如

InternetExplorer、WindowsMediaPlayer、

WindowsUpdate等

)。在Windows環(huán)境下安裝應用程序時,假設用戶未特別指定安裝位置,系統(tǒng)通常將其安裝在該文件夾中,且大多數(shù)子文件夾與所安裝的應用程序相對應。其中的CommonFiles子文件夾是一個特別的文件夾,用于存儲應用程序公用的庫文件。(3)Windows文件夾 Windows文件是系統(tǒng)安裝的默認文件夾其中包含了操作系統(tǒng)的絕大多數(shù)系統(tǒng)文件(其中包含100多個文件夾、數(shù)千個文件)。表4.2中列出了在WindowsXP典型安裝時,系統(tǒng)在硬盤上創(chuàng)立的Windows文件夾的主要結構及其作用的簡要說明4.2Windows處理器管理處理器是計算機系統(tǒng)的核心資源之一,處理器管理是操作系統(tǒng)的重要組成局部。處理器管理的工作是對處理器資源進行合理的分配使用使各用戶(任務)公平地得到處理器,以提高處理器的利用率。對于操作系統(tǒng)來說運行的程序稱為進程,進程反映了程序運行的動態(tài)特征,因此處理器管理的重要任務就是對進程實施管理包括給進程分配資源、有效地控制進程的執(zhí)行、允許進程之間共享和交換信息、保護每個進程使其在運行期間免受其他進程的干擾等。多個進程可以被調(diào)度在一個處理器上交替執(zhí)行

,也可以在多個處理器上同時執(zhí)行。不同的操作系統(tǒng)可能采用不同的處理器調(diào)度策略,但無論是交替執(zhí)行還是同時執(zhí)行都屬于并發(fā)執(zhí)行。為了提高進程并發(fā)執(zhí)行的力度和降低并發(fā)的開銷,現(xiàn)代操作系統(tǒng)中又引入了線程的概念。4.2.1進程1.進程概述操作系統(tǒng)引入進程的概念,從理論角度上看

,是對正在運行的程序活動規(guī)律的抽象

;從實現(xiàn)角度看

,它是一種數(shù)據(jù)結構,目的在于刻畫動態(tài)系統(tǒng)的內(nèi)在規(guī)律有效地管理和調(diào)度程序的運行。進程作為程序執(zhí)行過程的描述,與程序既有密切聯(lián)系

,又有許多區(qū)別。進程具有動態(tài)性(地址空間的大小和內(nèi)容都是動態(tài)變化的)、獨立性(各進程的地址空間相互獨立)、并發(fā)性(宏觀上各進程是同時獨立運行的)等特征。進程從創(chuàng)立到終止其狀態(tài)一直在不斷變化。進程的狀態(tài)分成5種(見圖4.2),它在執(zhí)行過程中不斷地在就緒(ready)、運行(running)和阻塞(blocked)3種狀態(tài)間進行轉換。創(chuàng)立狀態(tài)指進程正在創(chuàng)立過程中,還不能運行;就緒狀態(tài)指進程已獲得除處理器外的所需資源,等待調(diào)度程序分配處理器資源,只要分配了處理器,進程就可以運行;運行狀態(tài)指進程占用了處理器資源正在運行,處于此狀態(tài)的進程的數(shù)目不能多于處理器的數(shù)目;當進程由于等待

I/O操作或其他事件而暫停運行時,它就轉入阻塞狀態(tài),在條件滿足之前,即使把處理器分配給該進程

,它也是無法繼續(xù)執(zhí)行的;進程結束運行

,系統(tǒng)收回它所使用的資源

,這時進程處于退出狀態(tài)。2.進程管理在WindowsXP中,進程是系統(tǒng)資源分配的根本單位,每個Windows進程都是由一個執(zhí)行體進程塊(EPROCESS)來表示的。執(zhí)行體進程塊不僅包含了許多與進程相關的屬性,還包含指向其他與進程控制相關的數(shù)據(jù)結構。①線程塊(ETHREAD)列表:描述屬于該進程的所有線程的相關信息,以便線程調(diào)度器進行處理器資源的分配和回收。②虛擬地址空間描述表(virtualaddressspacedescriptor,VAD):描述進程地址空間各局部的屬性,用于虛擬存儲管理。③對象句柄(handle)列表:句柄是Windows系統(tǒng)中用來標識對象的標識符,當進程創(chuàng)建或翻開一個對象時就會得到一個對象的句柄,用于對象訪問口對象句柄列表維護該進程正在訪問的所有對象列表。Windows支持的各個環(huán)境子系統(tǒng)都提供了相應的系統(tǒng)調(diào)用(API函數(shù)),用來實現(xiàn)進程控制。例如,調(diào)用Windows環(huán)境子系統(tǒng)提供的CreateProcess函數(shù)可以創(chuàng)立進程.創(chuàng)立一個Windows進程的過程是由操作系統(tǒng)的3個局部(kerne132.dll、Windows執(zhí)行體和Windows子系統(tǒng)進程)執(zhí)行一系列步驟完成的,在創(chuàng)立進程的第一個階段首先是要找到適當?shù)目蓤?zhí)行文件(映像文件),并根據(jù)其進行不同的處理。如果指定的是一個Win32應用程序,那么可以被直接使用。對于非Win32應用程序,因為Windows不能直接運行,必須通過一系列的步驟找到一個Windows支持映像以便運行①如果指定的是MS-DOS應用程序(擴展名為.Exe.Com)或Win16應用程序,那么運行ntvdm.Exe創(chuàng)立一個MS-DOS支持進程。②如果指定的是DOS命令程序(擴展名為.bat或.cmd),那么運行cmd.exe以創(chuàng)立一個支持進程。當用戶通過WindowsXP的"開始"菜單啟動"命令提示符"(翻開MS-DOS窗口)時,從"Windows任務管理器"窗口中可以查看相應的進程(進程的映像名稱為cmd.exe)

4.2.2線程為提高進程內(nèi)的并發(fā)性進一步提高處理器的利用效率,Windows引入了線程的概念,把線程作為處理器調(diào)度的對象,而把進程作為資源分配的單位。線程表示進程中的一個控制點和一條執(zhí)行途徑,任何進程都可以創(chuàng)立多個并發(fā)執(zhí)行的線程。線程(通常將該線程稱為初始線程),進程從初始線程開始進而創(chuàng)立一個或多個線程。由于同一進程內(nèi)各線程都可以訪問整個進程的所有資源,因此它們之間的通信比進程間的相互通信要方便,而同一進程內(nèi)的線程間切換也會由于許多上下文的相同而得到簡化。①初始(initialized):當一個線程被創(chuàng)立時,內(nèi)部使用此狀態(tài)。②就緒(ready):線程已獲得除處理器以外的所需資源,正等待調(diào)度執(zhí)行。③備用(standby):已選擇好執(zhí)行該線程的處理器(每個處理器只能有一個處于備用狀態(tài)的線程),正等待一次環(huán)境切換以執(zhí)行線程。需要說明的是,一個線程真正被執(zhí)行前,它可能會從備用狀態(tài)中被搶占掉。④運行

(running):線程處于執(zhí)行狀態(tài)。該線程一直執(zhí)行

,直到它的時限結束、被一個優(yōu)先級更高的線程搶占、線程終止或它自愿進入等待狀態(tài)。⑤終止

(terminated):當一個線程執(zhí)行完成時

,它進入終止狀態(tài)。⑥等待(waiting):線程正等待某對象,以同步線程的執(zhí)行。當?shù)却录霈F(xiàn)時,等待結束并根據(jù)優(yōu)先級進入運行或就緒狀態(tài)。⑦轉換(transition):如果一個線程已準備好執(zhí)行,但它的內(nèi)核堆校(該堆錢用于存儲線程執(zhí)行環(huán)境)被換出內(nèi)存(即位于外存中),那么該線程進入轉換狀態(tài)。一旦其內(nèi)核堆校被換回內(nèi)存中,該線程將進入就緒狀態(tài)。4.2.3處理器調(diào)度

1.調(diào)度概述WindowsXP實現(xiàn)了一個優(yōu)先級驅動、搶先式調(diào)度系統(tǒng)具有最高優(yōu)先級的可運行線程,總是最先運行,而且該線程可能僅限于在允許它運行的處理器上運行這種現(xiàn)象稱為處理器親和性

(processoraffinity)。處理器親和性是針對多處理器系統(tǒng)而言的,在默認情況下線程可以在任何一個空閑的處理器上運行,但可以通過調(diào)度函數(shù)或有關設置來改變處理器親和性。一個線程被選中運行的時候,它將運行一定時間

,這段時間稱為時限

(quantum)。時限是指一個線程在"系統(tǒng)將運行權交給同一優(yōu)先級別

(或更高優(yōu)先級別)上的另一個線程

"之前允許運行的時間長度。時限值可以隨著系統(tǒng)的不同而不同,也可以隨著進程的不同而不同(有關時限問題,后續(xù)將進一步介紹

)。此外,一個線程可能未能用完其時限,因為

Windows實現(xiàn)了一個搶先式調(diào)度器

,如果另一個具有更高優(yōu)先級的線程變成就緒狀態(tài)時,當前正在運行的線程可能在用完其時限前被搶占。實際上還可能發(fā)生這樣的情況

:一個線程被選中作為下一個將要運行的線程

,但是在它的時限開始前就可能被搶占了。以下情況可能要求線程調(diào)度

①一個線程變成就緒狀態(tài)時,例如一個線程已經(jīng)被創(chuàng)立好了或剛從等待狀態(tài)中釋放出來。②一個線程離開了運行狀態(tài),其原因可能是時限到了,或線程終止了,或線程放棄執(zhí)行或進入了等待狀態(tài)。③一個線程的優(yōu)先級改變了,可能是由于一個系統(tǒng)效勞調(diào)用的,也可能是因為Windows系統(tǒng)本身改變了優(yōu)先級值。④一個線程的處理器親和性改變了

,因而它不再在當前運行的處理器上運行了

(對于多處理器系統(tǒng)而言

)在以上情況下

,Windows必須確定接下來該哪個線程運行。當

Windows選擇一個新線程來運行時

,它執(zhí)行一次環(huán)境切換

,切換到該線程中。環(huán)境切換是指這樣一個過程

:將當前正在運行的線程的易失性機器狀態(tài)保存起來并裝入另一個線程的易失性狀態(tài)。2.優(yōu)先級別 Windows在內(nèi)部使用32個優(yōu)先級別(范圍為0-31),它們的劃分如下:系統(tǒng)級別,其優(yōu)先級別為0,保存給對系統(tǒng)中空閑物理頁面進行清零的零頁線程(zeropagethread);可變級別,其優(yōu)先級別為1-15;實時級別,其優(yōu)先級別為16-31。線程優(yōu)先級別的指定可從兩個不同的角度進行:通過WindowsAPI來指定線程的優(yōu)先級,Windows內(nèi)核也可以控制線程的優(yōu)先級。每個線程都有一個根本優(yōu)先級,它是進程優(yōu)先級和線程相對優(yōu)先級的一個函數(shù)。WindowsAPI可在進程創(chuàng)立時,將進程的優(yōu)先級類型指定為實時(real-time)、高(high)、高于標準(abovenormal)、標準(normal)、低于標準(belownor-mal)或低(low),然后根據(jù)這些進程內(nèi)部單個線程的相對優(yōu)先級來組織線程。線程的相對優(yōu)先級的類型分為時間關鍵(time-critical)、最高(highest)、高于標準(abovenormal)、標準(normal)、低于標準(belownormal)、最低(lowest)和空閑(idle)。在正常情況下,進程根本優(yōu)先級(同樣也是起始線程的根本優(yōu)先級)被默認設置為每個進程優(yōu)先級范圍的中間值。雖然一個進程只有一個根本優(yōu)先級值,但每個線程有兩個優(yōu)先級值,即根本優(yōu)先級和當前優(yōu)先級,處理器的調(diào)度是根據(jù)當前優(yōu)先級做出的。一個線程的初始根本優(yōu)先級是從進程的根本優(yōu)先級繼承得來的,正如后面關于優(yōu)先級提升的介紹,在特定的情況下系統(tǒng)會在很短的周期內(nèi)提升線程的優(yōu)先級(動態(tài)范圍為1-15)當前優(yōu)先級。需要說明的是,Windows從來不會在實時優(yōu)先級范圍內(nèi)(16-31)調(diào)整線程的優(yōu)先級,所以它們的根本優(yōu)先級和當前優(yōu)先級總是相同的。利用Windows支持工具箱(supporttools)中的進程查看工具(pviewer.exe)可以查看所選進程中線程的當前優(yōu)先級3.時限 在WindowsXP中

,時限只有兩種設置值

:短時限或長時限。時鐘間隔的長度隨著硬件平臺的不同而有所不同

,主要取決于

HAL。大多數(shù)

x86單處理器系統(tǒng)的時鐘間隔是

10ms左右

,而大多數(shù)

x86多處理器系統(tǒng)的時鐘間隔是

15ms左右。WindowsXP默認情況下使用短時限,而WindowsServer默認情況下使用長時限。之所以在效勞器系統(tǒng)上使用長時限,是因為要使環(huán)境切換的次數(shù)盡可能地減少,從而某個效勞器應用程序一旦接收到客戶請求而被喚醒時,有可能在時限結束之前完成相應的請求,并回到等待狀態(tài)中。每個進程在創(chuàng)立時都有一個時限值,當給線程分配一個新的時限時就會用到該值。在系統(tǒng)內(nèi)部,此時限值被設置為3的倍數(shù),即3作為一個時限單元口這意味著,默認情況下WindowsXP系統(tǒng)中線程的時限值為6(2X3),WindowsServer中線程的默認時限值為36(12x3)。線程運行時,在每一個時鐘間隔其時限值都會被減少,如果沒有剩余的線程時限那么會觸發(fā)時限結束處理事件。在WindowsXP中,用戶可以通過修改注冊表中相關的值來改變時限設置。4.處理器調(diào)度 Windows調(diào)度代碼是在內(nèi)核中實現(xiàn)的,但內(nèi)核中不存在單獨的"調(diào)度器"模塊,調(diào)度代碼散布在內(nèi)核中但凡會發(fā)生與調(diào)度相關的事件的各個局部,執(zhí)行這些任務的例程合起來稱為內(nèi)核的"調(diào)度器"(dispatcher)。為了進行線程調(diào)度,內(nèi)核維護了一組數(shù)據(jù)結構

,它們合稱為

"調(diào)度器數(shù)據(jù)庫"。該數(shù)據(jù)庫負責記錄各線程的狀態(tài)

,如哪些線程正在等待執(zhí)行、處理器正在執(zhí)行哪個線程等,其中最主要的內(nèi)容是調(diào)度器的就緒隊列一一包含了那些處于就緒狀態(tài)、正在等待被調(diào)度執(zhí)行的線程。該就緒隊列由

32個

"子隊列

"組成

,每個子隊列對應一個調(diào)度優(yōu)先級。WindowsXP嚴格基于線程的優(yōu)先級來確定哪一個線程將占用處理器

,并進入運行狀態(tài)。但在實際系統(tǒng)中

,線程調(diào)度也根據(jù)不同的情況采用相應的調(diào)度策略。此外

,對于單處理器系統(tǒng)和多處理器系統(tǒng)來說

,其調(diào)度策略也有所不同。以下討論的處理器調(diào)度是針對單處理器系統(tǒng)而言的。(1)自愿切換一個線程可能會通過調(diào)用某個Windows等待函數(shù)來等待某個對象

(例如一個事件、

I/O操作、進程、線程或窗口消息等

),從而由運行狀態(tài)進入等待狀態(tài)

,自愿放棄對處理器的使用。這時

Windows選擇一個新的線程來運行。當一個線程放棄處理器后

,被移到該線程正在等待對象的等待隊列中。通常進入等待狀態(tài)的線程的時限值不會被重置

,而是在等待事件出現(xiàn)時時限值被減

1(相當于

1/3個時鐘間隔

);如果線程的優(yōu)先級大于或等于

14,在等待事件出現(xiàn)時其時限值被重置。(2)搶先模式當一個高優(yōu)先級線程的等待完成了(即一個線程等待的事件出現(xiàn)了),或一個線程的優(yōu)先級被增加或減少了。當一個線程被搶占時,它被轉移到它剛剛運行時所在優(yōu)先級的就緒隊列的頭部(開始處),在搶占的線程完成運行后,被轉移的線程可以繼續(xù)使用它的時限。處于實時優(yōu)先級的線程在被搶占時,時限值被重置為一個完整的時間片,而處于動態(tài)優(yōu)先級的線程在被搶占時,其時限值保持不變。需要說明的是

,用戶模式下的線程可以搶占內(nèi)核模式下運行的線程

,即

"搶占

"與線程當前所處的模式并沒有關系線程優(yōu)先級是決定因素。(3)時限結束當正在運行的線程用完了其時限Windows必須決定該線程的優(yōu)先級是否應該被降低,然后決定是否應該調(diào)度另一個線程到當前處理器上來運行。如果剛用完時限的線程的優(yōu)先級被降低了,那么Windows尋找一個更加適宜的線程進入運行狀態(tài)。所謂"更加適宜的線程",是指優(yōu)先級高于"剛用完時限的線程的新優(yōu)先級"的就緒隊列中的一個線程。如果剛用完時限的線程的優(yōu)先級沒有被降低,并且有其他優(yōu)先級相同的就緒線程,那么Windows從同一優(yōu)先級的就緒隊列中選擇下一個線程來運行,并且將原來運行的線程移到該隊列的尾部(賦予其新的時限值,將其狀態(tài)從運行態(tài)變?yōu)榫途w態(tài))。(4)線程終止當一個線程結束運行時它從運行狀態(tài)變?yōu)榻K止狀態(tài)。如果處于終止狀態(tài)的線程對象上沒有未關閉的句柄,那么該線程將被從進程的線程列表中刪除,相關聯(lián)的數(shù)據(jù)結構等也被釋放。5.線程優(yōu)先級提升在以下5種情況下,WindowsXP會提升線程的當前優(yōu)先級。需要說明的是,前面已提到優(yōu)先級提升僅適用于動態(tài)優(yōu)先級范圍內(nèi)的線程,即不管如何提升優(yōu)先級,優(yōu)先級永遠不會超過15而到達實時優(yōu)先級范圍內(nèi)。(1)I/O操作完成后在完成I/O操作后,WindowsXP將臨時提升等待該操作的線程的優(yōu)先級,以保證等待I/O操作的線程有更多的時機立即運行,從而盡快地完成正在等待處理的任務。線程優(yōu)先級的實際提升值是由設備驅動程序決定的2)信號量或事件等待結束后當一個等待執(zhí)行事件或信號量對象的線程完成等待后

,其線程提升一個優(yōu)先級

(即優(yōu)先級提升值為

1)其中

,信號量是由操作系統(tǒng)提供的管理公有資源的有效手段

,代表可用資源實體的數(shù)量。這種線程優(yōu)先級的提升同樣是以線程根本優(yōu)先級為基點,提升后的優(yōu)先級同樣不會超過15。在等待結束時,線程的時限值被減1,并在提升后的優(yōu)先級上執(zhí)行完剩余的時限值;隨后降低一個優(yōu)先級,運行一個新時限值直到優(yōu)先級減退到原來的根本優(yōu)先級。(3)前臺進程中的線程完成一個等待操作后對于前臺進程中的線程,一個內(nèi)核對象上的等待操作完成時,相關的內(nèi)核函數(shù)會提升線程的當前優(yōu)先級(而不是根本優(yōu)先級)。這種前臺線程優(yōu)先級的提升,可以增強交互式應用程序的響應性當前臺應用程序完成一個等待操作時小幅提升其優(yōu)先級使它更有可能立刻進入運行狀態(tài)。(4)由于窗口活動而喚醒CUI線程時擁有窗口的線程在被窗口活動喚醒(例如收到窗口信息)時將得到一個幅度為2的額外優(yōu)先級提升。這種優(yōu)先級提升的理由同樣是有利于改進交互式應用的響應時間。(5)線程處于就緒狀態(tài)超過一定時間但沒能進入運行狀態(tài)時線程處于就緒狀態(tài)超過一定時間但沒能進入運行狀態(tài)

,這種現(xiàn)象被稱為處理器饑餓。一個優(yōu)先級為

7的線程正處于運行狀態(tài)

,另一個優(yōu)先級為

4的線程在這種情況下是不會獲得處理器使用權的

,然而一個優(yōu)先級為

11的線程正等待某種被優(yōu)先級為

4的線程鎖定的資源

,這個優(yōu)先級為

4的線程將永遠得不到足夠的時間來完成它所要做的工作

,并釋放阻塞優(yōu)先級為

11的線程所需要的資源。對于這種情況,平衡集管理器(balancesetmanager,這是一個用于內(nèi)存管理的系統(tǒng)線程,在后面有關存儲管理的小節(jié)中將作進一步的介紹)會每秒鐘掃描就緒隊列一次,查找已在就緒隊列中排隊超過300個時鐘間隔(將近4s)的線程。如果找到了一個這樣的線程,那么將其優(yōu)先級提升到15,并為其分配一個時限為正常值兩倍的時限值。一旦被提升線程用完其時限后,該線程的優(yōu)先級立即被減退到它原來的根本優(yōu)先級。如果該線程結束前出現(xiàn)了其他更高優(yōu)先級的線程,該線程將返回就緒隊列中(如果它在該隊列中又等待了300個時鐘間隔,那么它再次獲得優(yōu)先級提升)。4.3Windows存儲管理

雖然PC的存儲器容量不斷擴大、速度不斷提高但它仍然不能滿足軟件開展的需要。特別是多任務處理的出現(xiàn),一方面要求CPU能同時運行多個程序,另一方面還要求存儲器能被不同的任務所共享,因而如何對存儲器進行有效的管理,不僅直接影響到存儲器的利用率,而且還對系統(tǒng)的性能有重大影響。所以,存儲管理是操作系統(tǒng)的一項非常重要的任務。4.3.1內(nèi)存管理概述 多任務處理系統(tǒng)中,存儲管理的主要任務包括內(nèi)存的分配和回收、地址變換、內(nèi)存擴充、內(nèi)存共享和保護等功能。

1.分區(qū)式存儲管理內(nèi)存在程序之間的分配有多種方法。為一個用戶程序分配一個連續(xù)的內(nèi)存空間是最簡單的做法。為了支持多道程序并發(fā)執(zhí)行,引入了分區(qū)式存儲管理,它把內(nèi)存分為一些大小相等或不等的分區(qū),操作系統(tǒng)占用其中一局部分區(qū),其余的分區(qū)由應用程序使用,每個應用程序占用一個或幾個分區(qū)。這種做法雖然可以支持多任務并發(fā),但難以實現(xiàn)內(nèi)存分區(qū)的共享,內(nèi)存的使用效率不高。與分區(qū)式存儲管理配合使用的是覆蓋(overlay)技術,它的原理很簡單:一個程序(進程)的幾個代碼段或數(shù)據(jù)段按照時間先后來占用同一內(nèi)存空間。將程序(進程)常用局部的代碼和數(shù)據(jù)常駐內(nèi)存,不常用的局部平時存放在外存(覆蓋文件)中,需要時才裝入內(nèi)存。覆蓋技術的缺點是編程時必須劃分程序模塊并確定模塊之間的覆蓋關系,這增加了編程的復雜度。還有一種類似的技術稱為交換(swapping)技術,它在多個程序(進程)并發(fā)執(zhí)行時,將暫時不執(zhí)行的程序(進程)送到外存中,從而獲得空閑內(nèi)存來裝入新程序(進程),或讀入保存在外存中而處于就緒狀態(tài)的程序(進程)。它也與分區(qū)式存儲管理配合使用,其優(yōu)點是增加了并發(fā)運行的程序(進程)數(shù)目,但缺乏之處是換入和換出的控制增加了處理器的負擔。分區(qū)式存儲管理會使存儲器產(chǎn)生碎片

(被占用分區(qū)內(nèi)未被利用的空間是內(nèi)碎片,占用分區(qū)之間難以利用的空閑區(qū)是外碎片

),整理碎片需要內(nèi)存數(shù)據(jù)搬移

,會占用

CPU不少時間。2.頁式和段式存儲管理 在上面介紹的存儲管理方法中,為程序(進程)分配的空間是連續(xù)的,所使用的地址都是物理地址。如果能將一個程序(進程)分散到許多不連續(xù)的空間,就可以防止和減少碎片。為此引入了邏輯地址的概念,使程序(進程)的地址空間與實際使用的存儲空間別離,以增加存儲管理的靈活性。386處理器的邏輯地址指的是進程中使用的地址,它們需要經(jīng)過轉換后才能生成用于訪問存儲器的物理地址。所有邏輯地址的集合稱為該程序的地址空間,所有物理地址的集合稱為存儲空間。根據(jù)分配時所采用的根本單位不同,可以將分配管理方式分為3種:頁式存儲管理、段式存儲管理和段頁式存儲管理。所謂頁式存儲管理

,就是將程序的邏輯地址空間劃分為固定大小的頁

(page),而物理內(nèi)存也劃分為同樣大小的頁幀

(pageframe)。程序加載時,可將任意一頁放入內(nèi)存的任意一個頁幀中

,且這些頁幀不必連續(xù)。在段式存儲管理中,將程序的地址空間劃分為假設干個段(seg-ment),這樣每個進程有一個二維(需要給出段名和段內(nèi)地址)的地址空間,系統(tǒng)為每個段分配一個連續(xù)的分區(qū),而進程中的各個段可不連續(xù)地存放在內(nèi)存的不同分區(qū)中。段頁式存儲管理是前兩者結合的產(chǎn)物---采用段內(nèi)分頁。3.虛擬存儲器 隨著計算機硬件的開展,雖然PC的內(nèi)存配置越來越高但由于在系統(tǒng)中并發(fā)運行的程序越來越多且單個程序也越來越大,有限的內(nèi)存總是不能滿足系統(tǒng)的要求。為了解決內(nèi)存供需矛盾,Windows采用了虛擬存儲技術(也稱為虛擬內(nèi)存技術)。其根本思想是:在程序裝入時,不必將其全部讀入到內(nèi)存,而只需將當前需要執(zhí)行的一局部頁讀入內(nèi)存,就可以讓程序開始執(zhí)行。在程序執(zhí)行過程中,如果需執(zhí)行的指令或訪問的數(shù)據(jù)尚未在內(nèi)存(稱為"缺頁"),那么由處理器通知操作系統(tǒng)將相應的頁調(diào)入到內(nèi)存然后繼續(xù)執(zhí)行程序。另一方面

,操作系統(tǒng)也將內(nèi)存中暫時不使用的頁調(diào)出

,保存在外存上

,從而騰出空間存放將要裝入的程序以及將要調(diào)人的頁。頁的調(diào)人和調(diào)出完全是由操作系統(tǒng)自動完成的

,從編程的角度來看

,該系統(tǒng)具有的內(nèi)存容量將比實際的內(nèi)存容量大得多

,所以稱之為虛擬存儲器。虛擬存儲器的根底是局部性原理(principleoflocality)。所謂局部性原理,是指程序在執(zhí)行過程中的一個較短時期內(nèi),所執(zhí)行的指令地址和操作數(shù)的地址分別局限于一定區(qū)域內(nèi)。這主要表現(xiàn)在以下兩方面一是時間局部性即一條指令的一次執(zhí)行和下次執(zhí)行、一個數(shù)據(jù)的一次訪問和下次訪問都集中在一個較短時期內(nèi);二是空間局部性,即當前指令和鄰近的幾條指令、當前訪問的數(shù)據(jù)和鄰近的數(shù)據(jù)都集中在一個較小區(qū)域內(nèi)。虛擬存儲技術的引入給用戶提供了一個遠遠大于實際物理內(nèi)存的虛擬存儲空間,使得用戶能在較小的內(nèi)存中執(zhí)行較大的用戶程序并且可在內(nèi)存中容納更多的程序并發(fā)地執(zhí)行。與覆蓋技術比較,虛擬存儲技術的一個顯著優(yōu)點是不影響編程時的程序結構,不增加程序員的額外負擔,也就是說虛擬存儲器對程序員是透明的。4.3.2內(nèi)存管理器WindowsXP的內(nèi)存管理主要由內(nèi)存管理器組件實現(xiàn),它有兩個根本任務:一是將一個進程的虛擬地址空間轉換或映射到物理內(nèi)存中,這樣,當一個在該進程環(huán)境中運行的線程讀寫虛擬地址空間時,可以引用正確的地址;二是當內(nèi)存被過度提交(指運行線程試圖使用比當前可用內(nèi)存更多的物理內(nèi)存)時,將內(nèi)存中的某些內(nèi)容轉移到磁盤上(即頁面文件中),并且在以后需要這些內(nèi)容時再將其讀回到內(nèi)存中。內(nèi)存管理器是Windows執(zhí)行體的一局部,位于ntoskrnl.exe文件中(在HAL中沒有內(nèi)存管理器的任何局部)。它主要由以下幾個局部構成。①一組執(zhí)行體系統(tǒng)效勞,負責分配、釋放和管理虛擬內(nèi)存。這些效勞中的大多數(shù)以Win-dowsAPI或核心模式的設備驅動程序接口形式出現(xiàn)。②一個轉換無效和訪問錯誤中斷處理程序,用于解決硬件檢測到的內(nèi)存管理異常,并代表進程將虛擬頁面裝入內(nèi)存。4.3.3虛擬地址空間布局與地址轉換機制1.虛擬地址空間的布局結構對于

x86系統(tǒng)的

32位

Windows操作系統(tǒng)來說

,虛擬地址空間為

4GB。為了有效地使用和管理

,WindowsXP對它們的區(qū)域劃分作了統(tǒng)一的規(guī)定

:在默認情況下

,每個用戶進程可以占用

2GB的地址空間

(稱為用戶地址空間

),系統(tǒng)占用剩下的

2GB地址空間

(稱為系統(tǒng)地址空間

)(1)用戶地址空間布局 每個進程都有一個私有的地址空間,其他的進程不能訪問此地址空間。進程內(nèi)的線程永遠不能訪問此私有地址空間以外的虛擬地址

,除非它們映射到共享內(nèi)存區(qū)

,以及

(或者)通過跨進程的內(nèi)存函數(shù)以允許訪問另一個進程的地址空間。(2)系統(tǒng)地址空間分布系統(tǒng)空間包含全局操作系統(tǒng)代碼和數(shù)據(jù)結構它們對所有的進程都是可見的。在WindowsXP中,系統(tǒng)地址空間(2GB)布局的詳細說明如表4.5所示2.地址轉換機制應用程序以32位虛擬地址方式編址CPU利用內(nèi)存管理器創(chuàng)立和維護的數(shù)據(jù)結構頁表(pagetable),將虛擬地址轉換為物理地址。4.3.4內(nèi)存分配方式

在WindowsXP中

,系統(tǒng)采用了不同的方式進行用戶空間內(nèi)存和系統(tǒng)內(nèi)存的分配。1.用戶空間內(nèi)存分配WindowsAPI有

3組函數(shù)可用來管理應用程序中的內(nèi)存

:頁面粒度的虛擬內(nèi)存函數(shù)、內(nèi)存映射文件函數(shù)和堆函數(shù)。(1)以頁為單位的虛擬內(nèi)存分配方式在應用程序的地址空間中,頁面有3種狀態(tài):空閑(free)、被保存(reserved)或已被提交(committed)a應用程序可以先保存地址空間,然后向此地址空間提交物理頁面。(2)內(nèi)存映射文件內(nèi)存映射文件的根本思想是:在虛擬地址空間中保存一段地址空間,并把目標文件的全部或局部映射到這個空間中,使用戶可以以訪問內(nèi)存的方式直接操作文件中的數(shù)據(jù)。(3)內(nèi)存堆方式 堆是保存的地址空間中一個或多個頁組成的區(qū)域,這個區(qū)域可以由"堆管理器"按更小的塊劃分和分配,用于滿足應用程序內(nèi)存分配的請求O堆管理器是分配和回收可變內(nèi)存的函數(shù)集,位于ntdll.dll和ntoskrnl.dll中。進程初始化時系統(tǒng)在進程的地址空間中創(chuàng)立一個默認堆(位于私有地址空間中),默認堆的大小通常是1MB,如果需要它會自動擴大,Win32的應用程序和一些需要分配臨時內(nèi)存塊的Win32函數(shù)將使用這個默認堆。需要時,進程也可以創(chuàng)立另外的私有堆,當進程不再需要私有堆時可以釋放其地址空間。堆的優(yōu)點是可以不考慮其分配的區(qū)域位置和大小,使程序集中精力處理任務。其缺點是分配和釋放內(nèi)存塊的速度比其他機制要慢并且無法直接控制物理內(nèi)存的提交和回收。文件管理計算機中的程序和數(shù)據(jù)通常都以文件的形式存放在磁盤或其他外存儲器上,用戶或程序必須通過文件操作才能使用它們。文件管理是通過目錄來完成的,而目錄又是建立在分區(qū)卷根底上的。操作系統(tǒng)中與文件和目錄操作相關的子系統(tǒng)稱為文件管理系統(tǒng)。4.4.1根本概念

1.文件文件是一組相關數(shù)據(jù)的集合,它存儲在軟盤、硬盤、光盤等外存儲器上。為了方便使用,每個文件都有一個自己的名字早期的DOS系統(tǒng)及Windows95以前的版本中,使用"8.3"命名規(guī)那么,即規(guī)定文件名為8個字符,外加句點和3個字符的擴展名。2.文件目錄(文件夾)文件目錄最根本的功能就是通過文件名可以快速、方便地獲取文件的說明信息,如文件的物理位置、長度等,以便完成對文件的讀寫操作。此外,它還具有如下幾個功能:提高文件的檢索速度,允許文件在不同的目錄中使用相同的名字,允許多個用戶共享一個(組)文件。3.有關存儲的術語(2)扇區(qū)(sector)是磁盤上固定大小、可尋址的存儲塊。扇區(qū)大小是由硬件決定的,大多數(shù)(3)簇(cluster)是許多文件系統(tǒng)使用的可尋址數(shù)據(jù)塊,磁盤空間的分配通常以簇為根本單位。簇的大小總是扇區(qū)大小的整數(shù)倍,與磁盤的大小及采用的文件系統(tǒng)有關。(4)分區(qū)分區(qū)

(partition)是硬盤上一組連續(xù)扇區(qū)的集合。分區(qū)表中保存了

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論