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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

  • 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

提交評論