Linux操作系統(tǒng)存儲器管理_第1頁
Linux操作系統(tǒng)存儲器管理_第2頁
Linux操作系統(tǒng)存儲器管理_第3頁
Linux操作系統(tǒng)存儲器管理_第4頁
Linux操作系統(tǒng)存儲器管理_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 Linux是一種自由和開放源碼的類Unix操作系統(tǒng)。目前存在著許多不同的Linux,但它們都使用了Linux內(nèi)核。Linux可安裝在各種計(jì)算機(jī)硬件設(shè)備中,從手機(jī)、平板電腦、路由器和視頻游戲控制臺,到臺式計(jì)算機(jī)、大型機(jī)和超級計(jì)算機(jī)。Linux 操作系統(tǒng)的誕生1981 年IBM 公司推出享譽(yù)全球的微型計(jì)算機(jī)IBM PC。 Linux實(shí)現(xiàn)了基于虛擬頁式存儲管理的虛擬存儲,在i386結(jié)構(gòu)的機(jī)器上,每個(gè)用戶任務(wù)的虛擬地址空間都可達(dá)到4GB。Linux的存儲管理使用了三層頁表來處理邏輯地址到物理地址的轉(zhuǎn)換,分別是PGD(頁表目錄)、PMD(中間頁表目錄)和PT(頁表)。Linux將存儲管理分為物理內(nèi)存管

2、理、內(nèi)核內(nèi)存管理、虛擬內(nèi)存管理、內(nèi)核虛擬內(nèi)存管理和用戶級內(nèi)存管理。一 存儲器管理的目的 (1).為多道程序設(shè)計(jì)提供支持 (2).提高內(nèi)存利用率 (3).簡化內(nèi)存的使用,為用戶開發(fā)應(yīng)用程序提供支持 多道次序設(shè)計(jì)的主要目的是提高微處理器的利用律。而為了實(shí)現(xiàn)多道程序的并行運(yùn)行,存儲器管理系統(tǒng)必須能夠?qū)?nèi)存分為多個(gè)部分,每部分都裝入一道程序,以便多道程序的并行運(yùn)行。影響內(nèi)存利用率的一個(gè)重要因素是內(nèi)存的管理開銷。為了便于管理,內(nèi)存分配有一個(gè)最小單位。小于該單位的內(nèi)存請求,將按此最小單位分配內(nèi)存,其多余的未使用空間被稱為“碎片”。 減少碎片的方法,是縮小該基本單位。從內(nèi)存的分區(qū)管理到分段管理再到分頁管理和

3、分段分頁結(jié)合的段頁式管理都體現(xiàn)了這一思路。為了方便用戶使用,存儲器管理應(yīng)該提供相應(yīng)的功能,以支持用戶的應(yīng)用程序開發(fā)。比如分段機(jī)制可以幫助用戶按功能組織代碼,共享存儲器機(jī)制可以方便用戶高速通信。 二存儲管理1物理內(nèi)存管理: 物理內(nèi)存管理以頁為單位,記錄、分配和回收物理內(nèi)存,物理內(nèi)存管理使用Buddy(伙伴)算法。(1)空閑物理內(nèi)存單元的管理 Linux物理內(nèi)存管理使用Buddy算法實(shí)現(xiàn)。其物理頁面的信息由mem_map_t結(jié)構(gòu)描述,系統(tǒng)中的所有物理頁面由一個(gè)mem_map_t類型的數(shù)組mem_map來表示。該數(shù)組的每一項(xiàng)都代表物理內(nèi)存的一個(gè)頁面,該叔祖的大小由實(shí)際的物理內(nèi)存大小決定。mem_ma

4、p_t結(jié)構(gòu)的定義參考linuxlinux-2.4.xincludelinuxmm.h. Linux內(nèi)核定義了free_area數(shù)組記錄系統(tǒng)中的當(dāng)前空閑物理內(nèi)存單元。每一項(xiàng)都是一個(gè)free_area_struct結(jié)構(gòu),描述了一組由相同大小的空閑物理頁塊構(gòu)成的雙向鏈表。 另外,Linux使用全局變量nr_free_pages來跟蹤系統(tǒng)中的空閑物理內(nèi)存頁面的總數(shù),該變量的值等于free_area數(shù)組中空閑頁的總數(shù)。使用該變量,Linux可以知道系統(tǒng)物理內(nèi)存的使用狀況,當(dāng)空閑的物理內(nèi)存頁面樹立低于某個(gè)指標(biāo)時(shí),Linux將喚醒內(nèi)核交換守護(hù)進(jìn)程kswapd,讓其盡可能回收一些物理內(nèi)存。 (2)物理頁的分配

5、 所有物理內(nèi)存的分配和釋放必須針對連續(xù)的物理內(nèi)存。因此,Buddy酸法將內(nèi)存劃分成2的i次方頁大小的連續(xù)的頁塊,每一組有相同的i值。并且將同一組的空閑頁塊鏈接成一個(gè)雙向鏈表然后將所有鏈表的頭節(jié)點(diǎn)組成一個(gè)數(shù)組。 分配空間時(shí),首先要在頁塊大小相應(yīng)的空閑頁塊鏈中找到一塊空間來返回給調(diào)用者,如果在這個(gè)鏈里沒有找到合適的空間分配,則到free_area數(shù)組中的下一個(gè)元素的空閑鏈中去查找,直至找到能夠分配的空間。(3)物理頁的釋放內(nèi)存管理系統(tǒng),在分配空間時(shí)將大頁塊都劃分成了小頁塊,這使得系統(tǒng)中的頁塊都越變越小,這對于分配大塊內(nèi)存是不利的。為了避免產(chǎn)生大量的內(nèi)存碎片,內(nèi)存管理系統(tǒng)在物理頁釋放時(shí),應(yīng)該斤可能地

6、將小頁塊合并成大頁塊。(4)物理內(nèi)存管理評價(jià)為了內(nèi)存對齊,Buddy算法往往會(huì)分配一些多余的內(nèi)存空間給用戶,這對提供內(nèi)存利用率是不利的;但是Buddy算法避免了內(nèi)存碎片的產(chǎn)生,避免了內(nèi)存緊抽的開銷,效率很高。2內(nèi)核內(nèi)存管理: 內(nèi)核內(nèi)存管理主要負(fù)責(zé)為各種內(nèi)核數(shù)據(jù)結(jié)構(gòu)分配空間,其大小一般較小。如果使用以頁為單位的物理內(nèi)存管理則浪費(fèi)較大,為此Linux專門提供了使用Slab算法的內(nèi)核內(nèi)存管理。3虛擬內(nèi)存管理: 在物理內(nèi)存管理的基礎(chǔ)上,使用請求調(diào)頁機(jī)制和交換機(jī)制,為系統(tǒng)中的每個(gè)進(jìn)程都提供高達(dá)4GB(i386平臺)的虛擬內(nèi)存空間。(1)頁表的管理 一個(gè)頁表入口標(biāo)識一個(gè)物理頁,它包含了物理頁的大量信息,如

7、該頁是否有效、該頁的讀寫權(quán)限等。最重要的是頁表入口給出了物理頁的頁框號,根據(jù)這個(gè)物理頁框號就可以找到這個(gè)物理頁的實(shí)際起始物理地址。為了操作系統(tǒng)的可移植性,Linux使用三級頁表來存儲虛擬地址轉(zhuǎn)換為物理地址映射關(guān)系。一級頁表只占用一個(gè)頁,其中存放了二級頁表的入口指針,記為PGD;二級頁表中存放了三級頁表的入口的指針,記為pmd;在三級頁表中每個(gè)項(xiàng)都是一個(gè)頁表入口。在Linux的X86版本中,只使用了兩極頁表,即第一級和第三級,在Intel系列CPU中,一個(gè)物理頁面大小是4KB,而每個(gè)頁表項(xiàng)大小是4字節(jié)。因此,每個(gè)物理頁面可以包含1024個(gè)頁表項(xiàng),則在X86平臺上,每個(gè)進(jìn)程的地址空間為1024*1

8、024*4KB=4GB大小。(2)虛擬存儲空間的管理在Linux系統(tǒng)中,主要使用了3個(gè)層次的數(shù)據(jù)結(jié)構(gòu)page、mm_struct和vm_area_struct來表示進(jìn)程的虛擬地址空間。最底層的page結(jié)構(gòu)描述了一個(gè)物理頁楨及其頁內(nèi)消息的相關(guān)屬性和鏈接指針,包括標(biāo)志位、引用技術(shù)等。 vm_area_struct結(jié)構(gòu)是中間層次,它描述了一個(gè)虛擬內(nèi)存區(qū)域(即一段連續(xù)的虛擬地址空間)的屬性。其中,包括虛擬內(nèi)存區(qū)域的開始、結(jié)束地址、訪問權(quán)限、頁目錄、映射文件和鏈接指針。其定義參考linuxlinux-2.4.xincludelinuxmm.h.mm_struct是描述進(jìn)程虛擬地址空間的最高層的數(shù)據(jù)結(jié)構(gòu),

9、一個(gè)mm_struct就代表一個(gè)獨(dú)立進(jìn)程的虛擬內(nèi)存空間。該結(jié)構(gòu)中記錄了實(shí)現(xiàn)任務(wù)管理的進(jìn)程模型所需要的內(nèi)存管理相關(guān)的全部信息,如: 進(jìn)程的也目錄的位置 進(jìn)程的代碼、數(shù)據(jù)、堆棧、堆、環(huán)境變量、入口參數(shù)等在虛擬地址空間中的存儲位置 進(jìn)程占用的物理頁楨樹木、進(jìn)程的LDT(局部描述符表)、引用計(jì)數(shù) 進(jìn)程的虛擬地址空間的虛擬內(nèi)存區(qū)域鏈表的鏈接信息和一些統(tǒng)計(jì)信息 (3)虛擬地址空間的創(chuàng)建進(jìn)程虛擬地址空間的創(chuàng)建實(shí)際上可以分為兩個(gè)步驟。首先,復(fù)制父進(jìn)程的地址空間;然后,根據(jù)可執(zhí)行映像的要求,創(chuàng)建新的內(nèi)存地址空間。虛擬地址空間的復(fù)制: 完全復(fù)制父進(jìn)程的地址空間,需要將父進(jìn)程的內(nèi)存管理結(jié)構(gòu)、mm_struct、vm

10、_area_struct、頁目錄表、頁表以及對應(yīng)物理頁楨的內(nèi)容都復(fù)制到子進(jìn)程中。顯然,開銷太大。 針對這個(gè)問題,Linux對于fork調(diào)用,Linux使用了COW技術(shù),同時(shí)也提供vfork系統(tǒng)調(diào)用,使用vfork系統(tǒng)調(diào)用創(chuàng)建的進(jìn)程完全和父進(jìn)程共享同一個(gè)地址空間。實(shí)際上,在Linux中,可以使用vfork系統(tǒng)調(diào)用實(shí)現(xiàn)線程管理。虛擬地址空間的重建:fork系統(tǒng)調(diào)用返回后,子進(jìn)程已經(jīng)通過虛擬內(nèi)存復(fù)制,創(chuàng)建了自己的地址空間。此后,當(dāng)進(jìn)程調(diào)用exec系統(tǒng)調(diào)用,希望執(zhí)行新的程序時(shí),將根據(jù)新的執(zhí)行映像,為該進(jìn)程創(chuàng)建新的虛擬地址空間。通常將這個(gè)過程叫做虛擬地址空間的重建。在Linux中采用內(nèi)存映射機(jī)制來處理映

11、像文件的裝入。在vm_area_struct結(jié)構(gòu)中,由一個(gè)file結(jié)構(gòu)的vm_file域和一個(gè)無符號長整型類型的vm_pgoff域分別表示該內(nèi)存區(qū)域映射文件的文件指針和偏移值。實(shí)際上內(nèi)存映射機(jī)制正是使用這兩個(gè)域描述了某段內(nèi)存空間對應(yīng)的內(nèi)容在文件中的位置。這樣,在重建虛擬地址空間時(shí),只需要建立一系列的數(shù)據(jù)結(jié)構(gòu),描述某段內(nèi)存區(qū)域內(nèi)容在可執(zhí)行映像中的位置,只有當(dāng)進(jìn)程真正使用該區(qū)域時(shí),才將其裝入內(nèi)存。使用這種機(jī)制,就避免了將映像中并不使用的部分也裝入了內(nèi)存中。 四 內(nèi)核虛擬內(nèi)存管理: Linux將每個(gè)進(jìn)程的4GB虛擬內(nèi)存分為用戶區(qū)(03GB)和內(nèi)核區(qū)(34GB),內(nèi)核虛擬內(nèi)存管理負(fù)責(zé)內(nèi)核區(qū)虛擬內(nèi)存的管

12、理。五 用戶級內(nèi)存管理: 用戶任務(wù)空間,即進(jìn)程的內(nèi)存空間管理,一般由C庫實(shí)現(xiàn),目的是為用戶的應(yīng)用編程提供支持。三 內(nèi)存管理分類1 按照內(nèi)存分配是否必須連續(xù)進(jìn)行,內(nèi)存管理分為連續(xù)分配方式和離散分配方式。 2 按照內(nèi)存分配是否支持超過真實(shí)物理內(nèi)存的大小的地址空間,內(nèi)存管理分為實(shí)內(nèi)存管理和虛內(nèi)存管理。四 早期連續(xù)內(nèi)存分配1 固定式分區(qū) 固定式分區(qū)的基本思想是在系統(tǒng)生成時(shí)就將主內(nèi)存劃分為若干個(gè)分區(qū),每個(gè)分區(qū)的大小可以不等,但事先必須固定,以后也不能改變。固定十分區(qū)在任務(wù)未裝入時(shí),分區(qū)的大小、樹木已預(yù)先確定,這樣容易造成分區(qū)內(nèi)的碎片問題,從而影響內(nèi)存的利用率。特點(diǎn):實(shí)行簡單,使用于簡單的多任務(wù)操作系統(tǒng)2

13、 可變式分區(qū) 可變式分區(qū)是動(dòng)態(tài)劃分存儲器的分區(qū)方法,它是在作業(yè)裝入和處理過程中建立的分區(qū),并且要使分區(qū)的容量正好能適應(yīng)作業(yè)的大小。在任務(wù)進(jìn)入系統(tǒng)前,將根據(jù)任務(wù)的大小申請所需存儲容量,然后由系統(tǒng)實(shí)施分配。需要一定的分配算法,碎片整理需要移動(dòng)用戶分區(qū)中的程序,需要硬件的支持。特點(diǎn):相對復(fù)雜,需要硬件的支持軟件也比較復(fù)雜五 基于段、頁的存儲管理基于離散分配的思想,具體的分配方式: 分頁存儲管理 分段存儲管理 段頁式存儲管理 1 分頁存儲管理分頁存儲管理把系統(tǒng)中用到的地址空間分為兩種。提供給用戶次序使用的是基于邏輯地址的連續(xù)的地址空間,系統(tǒng)使用的是真實(shí)物理地址;由系統(tǒng)負(fù)責(zé)將連續(xù)的邏輯地址映射到物理上并

14、不連續(xù)的實(shí)內(nèi)存地址。當(dāng)任務(wù)提出存儲分配請求時(shí),系統(tǒng)首先根據(jù)存儲塊大?。撁娲笮。┌讶蝿?wù)分成若干頁。每頁都裝入一個(gè)物理塊中。此時(shí),物理塊并不要求連續(xù),只要建立起程序的邏輯頁和內(nèi)存的存儲塊之間的對應(yīng)關(guān)系,借助動(dòng)態(tài)地址變換,原本連續(xù)的用戶程序在分散的不連續(xù)存儲塊中就能夠正常投入運(yùn)行。特點(diǎn):需要硬件支持2 分段存儲管理分段機(jī)制需要編譯程序的支持,目前,大多數(shù)流行的編譯器都支持分段,它們往往將程序劃分為代碼段、數(shù)據(jù)段、未初始化數(shù)據(jù)段和其他一些附加信息段等。分段和分頁存儲管理有許多相似處,概念上是完全不同的: 分頁的任務(wù)地址空間是一維的線性地址空間,分段的任務(wù)地址空間是二維的。 頁的大小固定,段的長度是動(dòng)態(tài)的。 分頁對用戶是透明的,而分段是用戶可見的。 頁是信息的物理單位,使用分頁機(jī)制是為了實(shí)現(xiàn)離散分配;段是信息的邏輯單位,而使用分段是為

溫馨提示

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

評論

0/150

提交評論