資源簡(jiǎn)介 The Best R&D Courses存儲(chǔ)器管理4.1 存儲(chǔ)器的層次結(jié)構(gòu) 在計(jì)算機(jī)執(zhí)行時(shí),幾乎每一條指令都涉及對(duì)存儲(chǔ)器的訪問(wèn),因此要求對(duì)存儲(chǔ)器的訪問(wèn)速度能跟得上處理機(jī)的運(yùn)行速度。或者說(shuō),存儲(chǔ)器的速度必須非常快,能與處理機(jī)的速度相匹配,否則會(huì)明顯地影響到處理機(jī)的運(yùn)行。此外還要求存儲(chǔ)器具有非常大的容量,而且存儲(chǔ)器的價(jià)格還應(yīng)很便宜。The Best R&D Courses存儲(chǔ)器管理4.1.1 多層結(jié)構(gòu)的存儲(chǔ)器系統(tǒng) 1. 存儲(chǔ)器的多層結(jié)構(gòu) 對(duì)于通用計(jì)算機(jī)而言,存儲(chǔ)層次至少應(yīng)具有三級(jí):最高層為CPU寄存器,中間為主存,最底層是輔存。在較高檔的計(jì)算機(jī)中,還可以根據(jù)具體的功能細(xì)分為寄存器、高速緩存、主存儲(chǔ)器、磁盤緩存、固定磁盤、可移動(dòng)存儲(chǔ)介質(zhì)等6層。如圖4-1所示。The Best R&D Courses存儲(chǔ)器管理圖4-1 計(jì)算機(jī)系統(tǒng)存儲(chǔ)層次示意The Best R&D Courses存儲(chǔ)器管理 2. 可執(zhí)行存儲(chǔ)器 在計(jì)算機(jī)系統(tǒng)的存儲(chǔ)層次中,寄存器和主存儲(chǔ)器又被稱為可執(zhí)行存儲(chǔ)器。對(duì)于存放于其中的信息,與存放于輔存中的信息相比較而言,計(jì)算機(jī)所采用的訪問(wèn)機(jī)制是不同的,所需耗費(fèi)的時(shí)間也是不同的。進(jìn)程可以在很少的時(shí)鐘周期內(nèi)使用一條load或store指令對(duì)可執(zhí)行存儲(chǔ)器進(jìn)行訪問(wèn)。但對(duì)輔存的訪問(wèn)則需要通過(guò)I/O設(shè)備實(shí)現(xiàn),因此,在訪問(wèn)中將涉及到中斷、設(shè)備驅(qū)動(dòng)程序以及物理設(shè)備的運(yùn)行,所需耗費(fèi)的時(shí)間遠(yuǎn)遠(yuǎn)高于訪問(wèn)可執(zhí)行存儲(chǔ)器的時(shí)間,一般相差3個(gè)數(shù)量級(jí)甚至更多。The Best R&D Courses存儲(chǔ)器管理4.1.2 主存儲(chǔ)器與寄存器 1. 主存儲(chǔ)器 主存儲(chǔ)器簡(jiǎn)稱內(nèi)存或主存,是計(jì)算機(jī)系統(tǒng)中的主要部件,用于保存進(jìn)程運(yùn)行時(shí)的程序和數(shù)據(jù),也稱可執(zhí)行存儲(chǔ)器。 2. 寄存器 寄存器具有與處理機(jī)相同的速度,故對(duì)寄存器的訪問(wèn)速度最快,完全能與CPU協(xié)調(diào)工作,但價(jià)格卻十分昂貴,因此容量不可能做得很大。The Best R&D Courses存儲(chǔ)器管理4.1.3 高速緩存和磁盤緩存 1. 高速緩存 高速緩存是現(xiàn)代計(jì)算機(jī)結(jié)構(gòu)中的一個(gè)重要部件,它是介于寄存器和存儲(chǔ)器之間的存儲(chǔ)器,主要用于備份主存中較常用的數(shù)據(jù),以減少處理機(jī)對(duì)主存儲(chǔ)器的訪問(wèn)次數(shù),這樣可大幅度地提高程序執(zhí)行速度。高速緩存容量遠(yuǎn)大于寄存器,而比內(nèi)存約小兩到三個(gè)數(shù)量級(jí)左右,從幾十KB到幾MB,訪問(wèn)速度快于主存儲(chǔ)器。The Best R&D Courses存儲(chǔ)器管理 2. 磁盤緩存 由于目前磁盤的I/O速度遠(yuǎn)低于對(duì)主存的訪問(wèn)速度,為了緩和兩者之間在速度上的不匹配,而設(shè)置了磁盤緩存,主要用于暫時(shí)存放頻繁使用的一部分磁盤數(shù)據(jù)和信息,以減少訪問(wèn)磁盤的次數(shù)。但磁盤緩存與高速緩存不同,它本身并不是一種實(shí)際存在的存儲(chǔ)器,而是利用主存中的部分存儲(chǔ)空間暫時(shí)存放從磁盤中讀出(或?qū)懭?的信息。主存也可以看作是輔存的高速緩存,因?yàn)椋o存中的數(shù)據(jù)必須復(fù)制到主存方能使用,反之,數(shù)據(jù)也必須先存在主存中,才能輸出到輔存。The Best R&D Courses存儲(chǔ)器管理 4.2 程序的裝入和鏈接 用戶程序要在系統(tǒng)中運(yùn)行,必須先將它裝入內(nèi)存,然后再將其轉(zhuǎn)變?yōu)橐粋€(gè)可以執(zhí)行的程序,通常都要經(jīng)過(guò)以下幾個(gè)步驟: (1) 編譯,由編譯程序(Compiler)對(duì)用戶源程序進(jìn)行編譯,形成若干個(gè)目標(biāo)模塊(ObjectModule); (2) 鏈接,由鏈接程序(Linker)將編譯后形成的一組目標(biāo)模塊以及它們所需要的庫(kù)函數(shù)鏈接在一起,形成一個(gè)完整的裝入模塊(Load Module); (3) 裝入,由裝入程序(Loader)將裝入模塊裝入內(nèi)存。 圖4-2示出了這樣的三步過(guò)程。本節(jié)將扼要闡述程序(含數(shù)據(jù))的鏈接和裝入過(guò)程。The Best R&D Courses存儲(chǔ)器管理圖4-2 對(duì)用戶程序的處理步驟The Best R&D Courses存儲(chǔ)器管理4.2.1 程序的裝入 為了闡述上的方便,我們先介紹一個(gè)無(wú)需進(jìn)行鏈接的單個(gè)目標(biāo)模塊的裝入過(guò)程。該目標(biāo)模塊也就是裝入模塊。在將一個(gè)裝入模塊裝入內(nèi)存時(shí),可以有如下三種裝入方式: 1. 絕對(duì)裝入方式(Absolute Loading Mode) 當(dāng)計(jì)算機(jī)系統(tǒng)很小,且僅能運(yùn)行單道程序時(shí),完全有可能知道程序?qū)Ⅰv留在內(nèi)存的什么位置。此時(shí)可以采用絕對(duì)裝入方式。用戶程序經(jīng)編譯后,將產(chǎn)生絕對(duì)地址(即物理地址)的目標(biāo)代碼。The Best R&D Courses存儲(chǔ)器管理 2. 可重定位裝入方式(Relocation Loading Mode) 絕對(duì)裝入方式只能將目標(biāo)模塊裝入到內(nèi)存中事先指定的位置,這只適用于單道程序環(huán)境。而在多道程序環(huán)境下,編譯程序不可能預(yù)知經(jīng)編譯后所得到的目標(biāo)模塊應(yīng)放在內(nèi)存的何處。因此,對(duì)于用戶程序編譯所形成的若干個(gè)目標(biāo)模塊,它們的起始地址通常都是從0開(kāi)始的,程序中的其它地址也都是相對(duì)于起始地址計(jì)算的。The Best R&D Courses存儲(chǔ)器管理圖4-3 作業(yè)裝入內(nèi)存時(shí)的情況The Best R&D Courses存儲(chǔ)器管理 3. 動(dòng)態(tài)運(yùn)行時(shí)的裝入方式(Dynamic Run-time Loading) 可重定位裝入方式可將裝入模塊裝入到內(nèi)存中任何允許的位置,故可用于多道程序環(huán)境。但該方式并不允許程序運(yùn)行時(shí)在內(nèi)存中移動(dòng)位置。The Best R&D Courses存儲(chǔ)器管理4.2.2 程序的鏈接 1. 靜態(tài)鏈接(Static Linking)方式 在程序運(yùn)行之前,先將各目標(biāo)模塊及它們所需的庫(kù)函數(shù)鏈接成一個(gè)完整的裝配模塊,以后不再拆開(kāi)。在圖4-4(a)中示出了經(jīng)過(guò)編譯后所得到的三個(gè)目標(biāo)模塊A、B、C,它們的長(zhǎng)度分別為L(zhǎng)、M和N。在模塊A中有一條語(yǔ)句CALL B,用于調(diào)用模塊B。在模塊B中有一條語(yǔ)句CALL C,用于調(diào)用模塊C。B和C都屬于外部調(diào)用符號(hào),在將這幾個(gè)目標(biāo)模塊裝配成一個(gè)裝入模塊時(shí),須解決以下兩個(gè)問(wèn)題: (1) 對(duì)相對(duì)地址進(jìn)行修改。 (2) 變換外部調(diào)用符號(hào)。The Best R&D Courses存儲(chǔ)器管理圖4-4 程序鏈接示意圖The Best R&D Courses存儲(chǔ)器管理 2. 裝入時(shí)動(dòng)態(tài)鏈接(Load-time Dynamic Linking) 這是指將用戶源程序編譯后所得到的一組目標(biāo)模塊,在裝入內(nèi)存時(shí),采用邊裝入邊鏈接的鏈接方式。即在裝入一個(gè)目標(biāo)模塊時(shí),若發(fā)生一個(gè)外部模塊調(diào)用事件,將引起裝入程序去找出相應(yīng)的外部目標(biāo)模塊,并將它裝入內(nèi)存,還要按照?qǐng)D4-4所示的方式修改目標(biāo)模塊中的相對(duì)地址。裝入時(shí)動(dòng)態(tài)鏈接方式有以下優(yōu)點(diǎn): (1) 便于修改和更新。 (2) 便于實(shí)現(xiàn)對(duì)目標(biāo)模塊的共享。The Best R&D Courses存儲(chǔ)器管理 3. 運(yùn)行時(shí)動(dòng)態(tài)鏈接(Run-time Dynamic Linking) 在許多情況下,應(yīng)用程序在運(yùn)行時(shí),每次要運(yùn)行的模塊可能是不相同的。但由于事先無(wú)法知道本次要運(yùn)行哪些模塊,故只能是將所有可能要運(yùn)行到的模塊全部都裝入內(nèi)存,并在裝入時(shí)全部鏈接在一起。顯然這是低效的,因?yàn)橥鶗?huì)有部分目標(biāo)模塊根本就不運(yùn)行。比較典型的例子是作為錯(cuò)誤處理用的目標(biāo)模塊,如果程序在整個(gè)運(yùn)行過(guò)程中都不出現(xiàn)錯(cuò)誤,則顯然就不會(huì)用到該模塊。The Best R&D Courses存儲(chǔ)器管理 4.3 連續(xù)分配存儲(chǔ)管理方式4.3.1 單一連續(xù)分配 在單道程序環(huán)境下,當(dāng)時(shí)的存儲(chǔ)器管理方式是把內(nèi)存分為系統(tǒng)區(qū)和用戶區(qū)兩部分,系統(tǒng)區(qū)僅提供給OS使用,它通常是放在內(nèi)存的低址部分。而在用戶區(qū)內(nèi)存中,僅裝有一道用戶程序,即整個(gè)內(nèi)存的用戶空間由該程序獨(dú)占。這樣的存儲(chǔ)器分配方式被稱為單一連續(xù)分配方式。The Best R&D Courses存儲(chǔ)器管理4.3.2 固定分區(qū)分配 1. 劃分分區(qū)的方法 可用下述兩種方法將內(nèi)存的用戶空間劃分為若干個(gè)固定大小的分區(qū): (1) 分區(qū)大小相等(指所有的內(nèi)存分區(qū)大小相等)。 (2) 分區(qū)大小不等。The Best R&D Courses存儲(chǔ)器管理 2. 內(nèi)存分配 為了便于內(nèi)存分配,通常將分區(qū)按其大小進(jìn)行排隊(duì),并為之建立一張分區(qū)使用表,其中各表項(xiàng)包括每個(gè)分區(qū)的起始地址、大小及狀態(tài)(是否已分配),如圖4-5所示。The Best R&D Courses存儲(chǔ)器管理圖4-5 固定分區(qū)使用表The Best R&D Courses存儲(chǔ)器管理4.3.3 動(dòng)態(tài)分區(qū)分配 1. 動(dòng)態(tài)分區(qū)分配中的數(shù)據(jù)結(jié)構(gòu) 常用的數(shù)據(jù)結(jié)構(gòu)有以下兩種形式:① 空閑分區(qū)表,在系統(tǒng)中設(shè)置一張空閑分區(qū)表,用于記錄每個(gè)空閑分區(qū)的情況。每個(gè)空閑分區(qū)占一個(gè)表目,表目中包括分區(qū)號(hào)、分區(qū)大小和分區(qū)始址等數(shù)據(jù)項(xiàng),如圖4-6所示。② 空閑分區(qū)鏈。為了實(shí)現(xiàn)對(duì)空閑分區(qū)的分配和鏈接,在每個(gè)分區(qū)的起始部分設(shè)置一些用于控制分區(qū)分配的信息,以及用于鏈接各分區(qū)所用的前向指針,在分區(qū)尾部則設(shè)置一后向指針。通過(guò)前、后向鏈接指針,可將所有的空閑分區(qū)鏈接成一個(gè)雙向鏈,如圖4-7所示。The Best R&D Courses存儲(chǔ)器管理圖4-6 空閑分區(qū)表The Best R&D Courses存儲(chǔ)器管理圖4-7 空閑鏈結(jié)構(gòu)The Best R&D Courses存儲(chǔ)器管理 2. 動(dòng)態(tài)分區(qū)分配算法 為把一個(gè)新作業(yè)裝入內(nèi)存,須按照一定的分配算法,從空閑分區(qū)表或空閑分區(qū)鏈中選出一分區(qū)分配給該作業(yè)。由于內(nèi)存分配算法對(duì)系統(tǒng)性能有很大的影響,故人們對(duì)它進(jìn)行了較為廣泛而深入的研究,于是產(chǎn)生了許多動(dòng)態(tài)分區(qū)分配算法。The Best R&D Courses存儲(chǔ)器管理 3. 分區(qū)分配操作 1) 分配內(nèi)存 系統(tǒng)應(yīng)利用某種分配算法,從空閑分區(qū)鏈(表)中找到所需大小的分區(qū)。設(shè)請(qǐng)求的分區(qū)大小為u.size,表中每個(gè)空閑分區(qū)的大小可表示為m.size。The Best R&D Courses存儲(chǔ)器管理 2) 回收內(nèi)存 當(dāng)進(jìn)程運(yùn)行完畢釋放內(nèi)存時(shí),系統(tǒng)根據(jù)回收區(qū)的首址,從空閑區(qū)鏈(表)中找到相應(yīng)的插入點(diǎn),此時(shí)可能出現(xiàn)以下四種情況之一: (1) 回收區(qū)與插入點(diǎn)的前一個(gè)空閑分區(qū)F1相鄰接,見(jiàn)圖4-9(a)。此時(shí)應(yīng)將回收區(qū)與插入點(diǎn)的前一分區(qū)合并,不必為回收分區(qū)分配新表項(xiàng),而只需修改其前一分區(qū)F1的大小。 (2) 回收分區(qū)與插入點(diǎn)的后一空閑分區(qū)F2相鄰接,見(jiàn)圖4-9(b)。此時(shí)也可將兩分區(qū)合并,形成新的空閑分區(qū),但用回收區(qū)的首址作為新空閑區(qū)的首址,大小為兩者之和。The Best R&D Courses存儲(chǔ)器管理 (3) 回收區(qū)同時(shí)與插入點(diǎn)的前、后兩個(gè)分區(qū)鄰接,見(jiàn)圖4-9(c)。此時(shí)將三個(gè)分區(qū)合并,使用F1的表項(xiàng)和F1的首址,取消F2的表項(xiàng),大小為三者之和。 (4) 回收區(qū)既不與F1鄰接,又不與F2鄰接。這時(shí)應(yīng)為回收區(qū)單獨(dú)建立一個(gè)新表項(xiàng),填寫(xiě)回收區(qū)的首址和大小,并根據(jù)其首址插入到空閑鏈中的適當(dāng)位置。圖4-10示出了內(nèi)存回收時(shí)的流程。The Best R&D Courses存儲(chǔ)器管理圖4-9 內(nèi)存回收時(shí)的情況The Best R&D Courses存儲(chǔ)器管理 4.4 對(duì)換(Swapping) 對(duì)換技術(shù)也稱為交換技術(shù),最早用于麻省理工學(xué)院的單用戶分時(shí)系統(tǒng)CTSS中。由于當(dāng)時(shí)計(jì)算機(jī)的內(nèi)存都非常小,為了使該系統(tǒng)能分時(shí)運(yùn)行多個(gè)用戶程序而引入了對(duì)換技術(shù)。系統(tǒng)把所有的用戶作業(yè)存放在磁盤上,每次只能調(diào)入一個(gè)作業(yè)進(jìn)入內(nèi)存,當(dāng)該作業(yè)的一個(gè)時(shí)間片用完時(shí),將它調(diào)至外存的后備隊(duì)列上等待,再?gòu)暮髠潢?duì)列上將另一個(gè)作業(yè)調(diào)入內(nèi)存。這就是最早出現(xiàn)的分時(shí)系統(tǒng)中所用的對(duì)換技術(shù)。現(xiàn)在已經(jīng)很少使用。The Best R&D Courses存儲(chǔ)器管理4.4.1 多道程序環(huán)境下的對(duì)換技術(shù) 1. 對(duì)換的引入 在多道程序環(huán)境下,一方面,在內(nèi)存中的某些進(jìn)程由于某事件尚未發(fā)生而被阻塞運(yùn)行,但它卻占用了大量的內(nèi)存空間,甚至有時(shí)可能出現(xiàn)在內(nèi)存中所有進(jìn)程都被阻塞,而無(wú)可運(yùn)行之進(jìn)程,迫使CPU停止下來(lái)等待的情況;另一方面,卻又有著許多作業(yè),因內(nèi)存空間不足,一直駐留在外存上,而不能進(jìn)入內(nèi)存運(yùn)行。顯然這對(duì)系統(tǒng)資源是一種嚴(yán)重的浪費(fèi),且使系統(tǒng)吞吐量下降。The Best R&D Courses存儲(chǔ)器管理 2. 對(duì)換的類型 在每次對(duì)換時(shí),都是將一定數(shù)量的程序或數(shù)據(jù)換入或換出內(nèi)存。根據(jù)每次對(duì)換時(shí)所對(duì)換的數(shù)量,可將對(duì)換分為如下兩類: (1) 整體對(duì)換。 (2) 頁(yè)面(分段)對(duì)換。The Best R&D Courses存儲(chǔ)器管理4.4.3 進(jìn)程的換出與換入 1. 進(jìn)程的換出 對(duì)換進(jìn)程在實(shí)現(xiàn)進(jìn)程換出時(shí),是將內(nèi)存中的某些進(jìn)程調(diào)出至對(duì)換區(qū),以便騰出內(nèi)存空間。換出過(guò)程可分為以下兩步: (1) 選擇被換出的進(jìn)程。 (2) 進(jìn)程換出過(guò)程。The Best R&D Courses存儲(chǔ)器管理 2. 進(jìn)程的換入 對(duì)換進(jìn)程將定時(shí)執(zhí)行換入操作,它首先查看PCB集合中所有進(jìn)程的狀態(tài),從中找出“就緒”狀態(tài)但已換出的進(jìn)程。當(dāng)有許多這樣的進(jìn)程時(shí),它將選擇其中已換出到磁盤上時(shí)間最久(必須大于規(guī)定時(shí)間,如2 s)的進(jìn)程作為換入進(jìn)程,為它申請(qǐng)內(nèi)存。如果申請(qǐng)成功,可直接將進(jìn)程從外存調(diào)入內(nèi)存;如果失敗,則需先將內(nèi)存中的某些進(jìn)程換出,騰出足夠的內(nèi)存空間后,再將進(jìn)程調(diào)入。The Best R&D Courses存儲(chǔ)器管理 4.5 分頁(yè)存儲(chǔ)管理方式 (1) 分頁(yè)存儲(chǔ)管理方式。 (2) 分段存儲(chǔ)管理方式。 (3) 段頁(yè)式存儲(chǔ)管理方式。The Best R&D Courses存儲(chǔ)器管理4.5.1 分頁(yè)存儲(chǔ)管理的基本方法 1. 頁(yè)面和物理塊 (1) 頁(yè)面。 (2) 頁(yè)面大小。The Best R&D Courses存儲(chǔ)器管理 2. 地址結(jié)構(gòu) 分頁(yè)地址中的地址結(jié)構(gòu)如下:31 12 11 0頁(yè)號(hào) P 位移量 WThe Best R&D Courses存儲(chǔ)器管理對(duì)某特定機(jī)器,其地址結(jié)構(gòu)是一定的。若給定一個(gè)邏輯地址空間中的地址為A,頁(yè)面的大小為L(zhǎng),則頁(yè)號(hào)P和頁(yè)內(nèi)地址d可按下式求得:P INT A L , d = [A] MOD L The Best R&D Courses存儲(chǔ)器管理 3. 頁(yè)表 在分頁(yè)系統(tǒng)中,允許將進(jìn)程的各個(gè)頁(yè)離散地存儲(chǔ)在內(nèi)存的任一物理塊中,為保證進(jìn)程仍然能夠正確地運(yùn)行,即能在內(nèi)存中找到每個(gè)頁(yè)面所對(duì)應(yīng)的物理塊,系統(tǒng)又為每個(gè)進(jìn)程建立了一張頁(yè)面映像表,簡(jiǎn)稱頁(yè)表。The Best R&D Courses存儲(chǔ)器管理圖4-14 頁(yè)表的作用The Best R&D Courses存儲(chǔ)器管理4.5.2 地址變換機(jī)構(gòu) 1. 基本的地址變換機(jī)構(gòu) 進(jìn)程在運(yùn)行期間,需要對(duì)程序和數(shù)據(jù)的地址進(jìn)行變換,即將用戶地址空間中的邏輯地址變換為內(nèi)存空間中的物理地址,由于它執(zhí)行的頻率非常高,每條指令的地址都需要進(jìn)行變換,因此需要采用硬件來(lái)實(shí)現(xiàn)。頁(yè)表功能是由一組專門的寄存器來(lái)實(shí)現(xiàn)的。一個(gè)頁(yè)表項(xiàng)用一個(gè)寄存器。The Best R&D Courses存儲(chǔ)器管理圖4-15 分頁(yè)系統(tǒng)的地址變換機(jī)構(gòu)The Best R&D Courses存儲(chǔ)器管理 2. 具有快表的地址變換機(jī)構(gòu) 由于頁(yè)表是存放在內(nèi)存中的,這使CPU在每存取一個(gè)數(shù)據(jù)時(shí),都要兩次訪問(wèn)內(nèi)存。第一次是訪問(wèn)內(nèi)存中的頁(yè)表,從中找到指定頁(yè)的物理塊號(hào),再將塊號(hào)與頁(yè)內(nèi)偏移量W拼接,以形成物理地址。第二次訪問(wèn)內(nèi)存時(shí),才是從第一次所得地址中獲得所需數(shù)據(jù)(或向此地址中寫(xiě)入數(shù)據(jù))。因此,采用這種方式將使計(jì)算機(jī)的處理速度降低近1/2。可見(jiàn),以此高昂代價(jià)來(lái)?yè)Q取存儲(chǔ)器空間利用率的提高,是得不償失的。The Best R&D Courses存儲(chǔ)器管理圖4-16 具有快表的地址變換機(jī)構(gòu)The Best R&D Courses存儲(chǔ)器管理4.5.3 訪問(wèn)內(nèi)存的有效時(shí)間 從進(jìn)程發(fā)出指定邏輯地址的訪問(wèn)請(qǐng)求,經(jīng)過(guò)地址變換,到在內(nèi)存中找到對(duì)應(yīng)的實(shí)際物理地址單元并取出數(shù)據(jù),所需要花費(fèi)的總時(shí)間,稱為內(nèi)存的有效訪問(wèn)時(shí)間(Effective Access Time,EAT)。假設(shè)訪問(wèn)一次內(nèi)存的時(shí)間為t,在基本分頁(yè)存儲(chǔ)管理方式中,有效訪問(wèn)時(shí)間分為第一次訪問(wèn)內(nèi)存時(shí)間(即查找頁(yè)表對(duì)應(yīng)的頁(yè)表項(xiàng)所耗費(fèi)的時(shí)間t)與第二次訪問(wèn)內(nèi)存時(shí)間(即將頁(yè)表項(xiàng)中的物理塊號(hào)與頁(yè)內(nèi)地址拼接成實(shí)際物理地址所耗費(fèi)的時(shí)間t)之和:EAT = t + t = 2tThe Best R&D Courses存儲(chǔ)器管理 在引入快表的分頁(yè)存儲(chǔ)管理方式中,通過(guò)快表查詢,可以直接得到邏輯頁(yè)所對(duì)應(yīng)的物理塊號(hào),由此拼接形成實(shí)際物理地址,減少了一次內(nèi)存訪問(wèn),縮短了進(jìn)程訪問(wèn)內(nèi)存的有效時(shí)間。但是,由于快表的容量限制,不可能將一個(gè)進(jìn)程的整個(gè)頁(yè)表全部裝入快表,所以在快表中查找到所需表項(xiàng)存在著命中率的問(wèn)題。所謂命中率,是指使用快表并在其中成功查找到所需頁(yè)面的表項(xiàng)的比率。這樣,在引入快表的分頁(yè)存儲(chǔ)管理方式中,有效訪問(wèn)時(shí)間的計(jì)算公式即為:EAT=а×λ+(t+λ)(1—а)+t=2t+λ—t×а上式中,λ表示查找快表所需要的時(shí)間,а表示命中率,t表示訪問(wèn)一次內(nèi)存所需要的時(shí)間。The Best R&D Courses存儲(chǔ)器管理 可見(jiàn),引入快表后的內(nèi)存有效訪問(wèn)時(shí)間分為查找到邏輯頁(yè)對(duì)應(yīng)的頁(yè)表項(xiàng)的平均時(shí)間а × λ + (t + λ)(1 - а),以及對(duì)應(yīng)實(shí)際物理地址的內(nèi)存訪問(wèn)時(shí)間t。假設(shè)對(duì)快表的訪問(wèn)時(shí)間λ為20 ns(納秒),對(duì)內(nèi)存的訪問(wèn)時(shí)間t為100 ns,則下表中列出了不同的命中率а與有效訪問(wèn)時(shí)間的關(guān)系:命中率 (%) 有效訪問(wèn)時(shí)間а EAT0 22050 17080 14090 13098 122The Best R&D Courses存儲(chǔ)器管理4.5.4 兩級(jí)和多級(jí)頁(yè)表 1. 兩級(jí)頁(yè)表(Two-Level Page Table) 針對(duì)難于找到大的連續(xù)的內(nèi)存空間來(lái)存放頁(yè)表的問(wèn)題,可利用將頁(yè)表進(jìn)行分頁(yè)的方法,使每個(gè)頁(yè)面的大小與內(nèi)存物理塊的大小相同,并為它們進(jìn)行編號(hào),即依次為0# 頁(yè)、1# 頁(yè),…,n# 頁(yè),然后離散地將各個(gè)頁(yè)面分別存放在不同的物理塊中。同樣,也要為離散分配的頁(yè)表再建立一張頁(yè)表,稱為外層頁(yè)表(Outer Page Table),在每個(gè)頁(yè)表項(xiàng)中記錄了頁(yè)表頁(yè)面的物理塊號(hào)。The Best R&D Courses存儲(chǔ)器管理圖4-17 兩級(jí)頁(yè)表結(jié)構(gòu)The Best R&D Courses存儲(chǔ)器管理 為了方便實(shí)現(xiàn)地址變換,在地址變換機(jī)構(gòu)中,同樣需要增設(shè)一個(gè)外層頁(yè)表寄存器,用于存放外層頁(yè)表的始址,并利用邏輯地址中的外層頁(yè)號(hào)作為外層頁(yè)表的索引,從中找到指定頁(yè)表分頁(yè)的始址,再利用P2作為指定頁(yè)表分頁(yè)的索引,找到指定的頁(yè)表項(xiàng),其中即含有該頁(yè)在內(nèi)存的物理塊號(hào),用該塊號(hào)P和頁(yè)內(nèi)地址d即可構(gòu)成訪問(wèn)的內(nèi)存物理地址。圖4-18示出了兩級(jí)頁(yè)表時(shí)的地址變換機(jī)構(gòu)。The Best R&D Courses存儲(chǔ)器管理圖4-18 具有兩級(jí)頁(yè)表的地址變換機(jī)構(gòu)The Best R&D Courses存儲(chǔ)器管理 2. 多級(jí)頁(yè)表 對(duì)于32位的機(jī)器,采用兩級(jí)頁(yè)表結(jié)構(gòu)是合適的,但對(duì)于64位的機(jī)器,采用兩級(jí)頁(yè)表是否仍然合適,須做以下簡(jiǎn)單分析。如果頁(yè)面大小仍采用4 KB即212 B,那么還剩下52位,假定仍按物理塊的大小(212位)來(lái)劃分頁(yè)表,則將余下的42位用于外層頁(yè)號(hào)。此時(shí)在外層頁(yè)表中可能有4096 G個(gè)頁(yè)表項(xiàng),要占用16 384 GB的連續(xù)內(nèi)存空間。The Best R&D Courses存儲(chǔ)器管理 4.6 分段存儲(chǔ)管理方式 存儲(chǔ)管理方式隨著OS的發(fā)展也在不斷地發(fā)展。當(dāng)OS由單道向多道發(fā)展時(shí),存儲(chǔ)管理方式便由單一連續(xù)分配發(fā)展為固定分區(qū)分配。The Best R&D Courses存儲(chǔ)器管理4.6.1 分段存儲(chǔ)管理方式的引入 1. 方便編程 通常,用戶把自己的作業(yè)按照邏輯關(guān)系劃分為若干個(gè)段,每個(gè)段都從0開(kāi)始編址,并有自己的名字和長(zhǎng)度。因此,程序員們都迫切地需要訪問(wèn)的邏輯地址是由段名(段號(hào))和段內(nèi)偏移量(段內(nèi)地址)決定的,這不僅可以方便程序員編程,也可使程序非常直觀,更具可讀性。例如,下述的兩條指令便使用段名和段內(nèi)地址: LOAD 1,[A] |〈D〉; STORE 1,[B] |〈C〉;The Best R&D Courses存儲(chǔ)器管理 2. 信息共享 在實(shí)現(xiàn)對(duì)程序和數(shù)據(jù)的共享時(shí),是以信息的邏輯單位為基礎(chǔ)的。比如,為了共享某個(gè)過(guò)程、函數(shù)或文件。分頁(yè)系統(tǒng)中的“頁(yè)”只是存放信息的物理單位(塊),并無(wú)完整的邏輯意義,這樣,一個(gè)可被共享的過(guò)程往往可能需要占用數(shù)十個(gè)頁(yè)面,這為實(shí)現(xiàn)共享增加了困難。The Best R&D Courses存儲(chǔ)器管理 3. 信息保護(hù) 信息保護(hù)同樣是以信息的邏輯單位為基礎(chǔ)的,而且經(jīng)常是以一個(gè)過(guò)程、函數(shù)或文件為基本單位進(jìn)行保護(hù)的。The Best R&D Courses存儲(chǔ)器管理4.6.2 分段系統(tǒng)的基本原理 1. 分段 在分段存儲(chǔ)管理方式中,作業(yè)的地址空間被劃分為若干個(gè)段,每個(gè)段定義了一組邏輯信息。例如,有主程序段MAIN、子程序段X、數(shù)據(jù)段D及棧段S等,如圖4-19所示。 分段地址中的地址具有如下結(jié)構(gòu):段號(hào) 段內(nèi)地址31 16 15 0The Best R&D Courses存儲(chǔ)器管理 2. 段表 在前面所介紹的動(dòng)態(tài)分區(qū)分配方式中,系統(tǒng)為整個(gè)進(jìn)程分配一個(gè)連續(xù)的內(nèi)存空間。而在分段式存儲(chǔ)管理系統(tǒng)中,則是為每個(gè)分段分配一個(gè)連續(xù)的分區(qū)。進(jìn)程中的各個(gè)段,可以離散地裝入內(nèi)存中不同的分區(qū)中。為保證程序能正常運(yùn)行,就必須能從物理內(nèi)存中找出每個(gè)邏輯段所對(duì)應(yīng)的位置。The Best R&D Courses存儲(chǔ)器管理圖4-19 利用段表實(shí)現(xiàn)地址映射The Best R&D Courses存儲(chǔ)器管理3. 地址變換機(jī)構(gòu) 為了實(shí)現(xiàn)進(jìn)程從邏輯地址到物理地址的變換功能,在系統(tǒng)中設(shè)置了段表寄存器,用于存放段表始址和段表長(zhǎng)度TL。在進(jìn)行地址變換時(shí),系統(tǒng)將邏輯地址中的段號(hào)與段表長(zhǎng)度TL進(jìn)行比較。若S>TL,表示段號(hào)太大,是訪問(wèn)越界,于是產(chǎn)生越界中斷信號(hào)。若未越界,則根據(jù)段表的始址和該段的段號(hào),計(jì)算出該段對(duì)應(yīng)段表項(xiàng)的位置,從中讀出該段在內(nèi)存的起始地址。然后,再檢查段內(nèi)地址d是否超過(guò)該段的段長(zhǎng)SL。若超過(guò),即d>SL,同樣發(fā)出越界中斷信號(hào)。若未越界,則將該段的基址d與段內(nèi)地址相加,即可得到要訪問(wèn)的內(nèi)存物理地址。圖4-20示出了分段系統(tǒng)的地址變換過(guò)程。The Best R&D Courses存儲(chǔ)器管理圖4-20 分段系統(tǒng)的地址變換過(guò)程The Best R&D Courses存儲(chǔ)器管理 4. 分頁(yè)和分段的主要區(qū)別 (1) 頁(yè)是信息的物理單位。 (2) 頁(yè)的大小固定且由系統(tǒng)決定。 (3) 分頁(yè)的用戶程序地址空間是一維的。The Best R&D Courses存儲(chǔ)器管理 2. 分段系統(tǒng)中程序和數(shù)據(jù)的共享 在分段系統(tǒng)中,由于是以段為基本單位的,不管該段有多大,我們都只需為該段設(shè)置一個(gè)段表項(xiàng),因此使實(shí)現(xiàn)共享變得非常容易。我們?nèi)砸怨蚕韊ditor為例,此時(shí)只需在(每個(gè))進(jìn)程1和進(jìn)程2的段表中,為文本編輯程序設(shè)置一個(gè)段表項(xiàng),讓段表項(xiàng)中的基址(80)指向editor程序在內(nèi)存的起始地址。圖4-22是分段系統(tǒng)中共享editor的示意圖。The Best R&D Courses存儲(chǔ)器管理4.6.4 段頁(yè)式存儲(chǔ)管理方式 1. 基本原理 段頁(yè)式系統(tǒng)的基本原理是分段和分頁(yè)原理的結(jié)合,即先將用戶程序分成若干個(gè)段,再把每個(gè)段分成若干個(gè)頁(yè),并為每一個(gè)段賦予一個(gè)段名。圖4-23(a)示出了一個(gè)作業(yè)地址空間的結(jié)構(gòu)。該作業(yè)有三個(gè)段:主程序段、子程序段和數(shù)據(jù)段;頁(yè)面大小為 4 KB。在段頁(yè)式系統(tǒng)中,其地址結(jié)構(gòu)由段號(hào)、段內(nèi)頁(yè)號(hào)及頁(yè)內(nèi)地址三部分所組成,如圖4-23(b)所示。圖4-23 作業(yè)地址空間和地址結(jié)構(gòu)The Best R&D Courses存儲(chǔ)器管理 在段頁(yè)式系統(tǒng)中,為了實(shí)現(xiàn)從邏輯地址到物理地址的變換,系統(tǒng)中需要同時(shí)配置段表和頁(yè)表。段表的內(nèi)容與分段系統(tǒng)略有不同,它不再是內(nèi)存始址和段長(zhǎng),而是頁(yè)表始址和頁(yè)表長(zhǎng)度。圖4-24示出了利用段表和頁(yè)表進(jìn)行從用戶地址空間到物理(內(nèi)存)空間的映射。The Best R&D Courses存儲(chǔ)器管理圖4-24 利用段表和頁(yè)表實(shí)現(xiàn)地址映射The Best R&D Courses存儲(chǔ)器管理 2. 地址變換過(guò)程 在段頁(yè)式系統(tǒng)中,為了便于實(shí)現(xiàn)地址變換,須配置一個(gè)段表寄存器,其中存放段表始址和段長(zhǎng)TL。進(jìn)行地址變換時(shí),首先利用段號(hào)S,將它與段長(zhǎng)TL進(jìn)行比較。若S < TL,表示未越界,于是利用段表始址和段號(hào)來(lái)求出該段所對(duì)應(yīng)的段表項(xiàng)在段表中的位置,從中得到該段的頁(yè)表始址,并利用邏輯地址中的段內(nèi)頁(yè)號(hào)P來(lái)獲得對(duì)應(yīng)頁(yè)的頁(yè)表項(xiàng)位置,從中讀出該頁(yè)所在的物理塊號(hào)b,再利用塊號(hào)b和頁(yè)內(nèi)地址來(lái)構(gòu)成物理地址。The Best R&D Courses 展開(kāi)更多...... 收起↑ 資源預(yù)覽 縮略圖、資源來(lái)源于二一教育資源庫(kù)