<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 初學(xué)者如何熟悉Linux內存管理機制

初學(xué)者如何熟悉Linux內存管理機制

作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò ) 收藏

內存是Linux內核所管理的最重要的資源之一,內存管理系統是操作系統中最為重要的部分。對于Linux的初學(xué)者來(lái)說(shuō),熟悉Linux的內存管理非常重要。

本文引用地址:http://dyxdggzs.com/article/201610/305314.htm

進(jìn)程是運行于虛擬地址空間的一個(gè)程序??梢哉f(shuō),任何在Linux系統下運行的程序都是進(jìn)程。Linux系統中包括交互進(jìn)程和批處理進(jìn)程。交互進(jìn)程是由Shell控制和運行的,既可以在前臺運行,也可以在后臺運行。批處理進(jìn)程不屬于某個(gè)終端,被提交到一個(gè)隊列中以便順序執行。大多數的進(jìn)程都需要虛擬內存。

一般需要多少內存

對于典型的Linux應用系統,128MB內存是合理的選擇。如果不運行X-Window系統,那么在一臺特殊用途的機器(比如用于調試設備驅動(dòng)程序的“崩潰和燒毀”系統)上僅用8MB內存就可以工作。

筆者曾經(jīng)做過(guò)實(shí)驗,在128MB和256MB下編譯內核所需的時(shí)間幾乎一樣,都少于3分半鐘(筆者的Linux發(fā)行版本是Mandrake Linux 9.1,內核2.4.21)。在一個(gè)只有8MB內存的系統上,編譯需要的時(shí)間會(huì )更長(cháng)一些。類(lèi)似Web瀏覽器這樣的多媒體應用軟件,在內存充足時(shí)會(huì )運行得更流暢,特別是在一邊編譯程序,一邊上網(wǎng)瀏覽的時(shí)候更是如此。因此,如果只有128MB內存,則預期的性能會(huì )有所降低。類(lèi)似地,如果要開(kāi)發(fā)消耗大量?jì)却娴膽贸绦?,可能?huì )要求更多的內存。所以,需要多少內存由工作需求來(lái)決定。

實(shí)時(shí)監控內存使用情況

1.在命令行使用“Free”命令監控內存使用情況 #free

total  used  free shared buffers cached

Mem:    256024 192284  63740   0  10676 101004

-/+ buffers/cache: 80604  75420

Swap:    522072   0 522072

上面代碼給出了一個(gè)256MB的RAM和512MB交換空間的系統情況。第三行輸出(Mem:)顯示物理內存。Total列不顯示核心使用的物理內存(通常大約1MB)。Used列顯示被使用的內存總額(第二行不計緩沖)。Free列顯示全部沒(méi)有使用的內存。Shared列顯示多個(gè)進(jìn)程共享的內存總額。Buffers列顯示磁盤(pán)緩存的當前大小。第五行(Swap:)對換空間,顯示的信息類(lèi)似上面。如果這行為全0,那么就沒(méi)有使用對換空間。在缺省的狀態(tài)下,free命令以千字節(也就是1024字節為單位)來(lái)顯示內存使用情況。使用-h參數,以字節為單位顯內存使用情況;或者使用-m參數,以兆字節為單位顯示內存使用情況。還可以通過(guò)-s參數,使用命令來(lái)不間斷地監視內存使用情況:

#free -b -s5

這個(gè)命令將會(huì )在終端窗口中連續不斷地報告內存的使用情況,每5秒鐘更新一次。

2.使甩vmstat命令監視虛擬內存使用情況 # vmstat

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

r b  swpd  free  buff cache  si  so  bi  bo  in  cs us sy id wa

1 0   0 63692 10704 101008  0  0  239  42 126  105 48 45 7 0

vmstat()命令是一個(gè)通用監控程序,是Virtual Meomory Statistics(虛擬內存統計)的縮寫(xiě)。如果使用vmstat命令的時(shí)候沒(méi)有使用任何命令行參數,將會(huì )得到一個(gè)一次性的報告。vmstat命令報告主要的活動(dòng)類(lèi)型有進(jìn)程(procs)、內存(以千字節為單位)、交換分區(以千字節為單位)、來(lái)自塊設備(硬盤(pán)驅動(dòng)器)的輸入輸出量、系統中斷(每秒鐘發(fā)生的次數),以及中央處理單元(CPU)分配給用戶(hù)、系統和空閑時(shí)分別占用的比例。

虛擬內存實(shí)現的機制

存儲管理子系統是操作系統中最重要的組成部分之一。在早期計算時(shí)代,由于人們所需要的內存數目遠遠大于物理內存,因此設計出了各種各樣的策略來(lái)解決此問(wèn)題,其中最成功的就是虛擬內存技術(shù),它使得系統中有限的物理內存競爭進(jìn)程所需內存空間得到滿(mǎn)足。虛擬內存通過(guò)在各個(gè)進(jìn)程之間共享內存,而使系統看起來(lái)有多于實(shí)際內存的內存容量。Linux支持虛擬內存, 就是使用磁盤(pán)作為RAM的擴展,使可用內存相應地有效擴大。核心把當前不用的內存塊存到硬盤(pán),騰出內存給其它目的。當原來(lái)的內容又要使用時(shí),再讀回內存。運行于Linux的程序只看到大量的可用內存,而不關(guān)心哪部分在磁盤(pán)上。當然,讀寫(xiě)硬盤(pán)比真的內存慢(大約慢千倍),所以程序運行較慢。用做虛擬內存的這部分硬盤(pán)叫對換空間。

虛擬內存技術(shù)不僅僅讓我們可以使用更多的內存,它還提供了下面這些功能:

1.巨大的尋址空間

操作系統讓系統看上去有比實(shí)際內存大得多的內存空間。虛擬內存可以是系統中實(shí)際物理空間的許多倍。每個(gè)進(jìn)程運行在其獨立的虛擬地址空間中,這些虛擬空間相互之間都完全隔離開(kāi)來(lái),所以進(jìn)程間不會(huì )互相影響。同時(shí),硬件虛擬內存機構可以將內存的某些區域設置成不可寫(xiě),這樣可以保護代碼與數據不會(huì )受惡意程序的干擾。

2.公平的物理內存分配

內存管理子系統允許系統中每個(gè)運行的進(jìn)程公平地共享系統中的物理內存。

3.共享虛擬內存

盡管虛擬內存允許進(jìn)程有其獨立的虛擬地址空間,但有時(shí)也需要在進(jìn)程之間共享內存。例如,有可能系統中有幾個(gè)進(jìn)程同時(shí)運行BASH命令外殼程序。為了避免在每個(gè)進(jìn)程的虛擬內存空間內都存在BASH程序的拷貝,較好的解決辦法是系統物理內存中只存在一份BASH的拷貝,并在多個(gè)進(jìn)程間共享。動(dòng)態(tài)庫則是另外一種進(jìn)程間共享執行代碼的方式。共享內存可用來(lái)作為進(jìn)程間通信(IPC)的手段,多個(gè)進(jìn)程通過(guò)共享內存來(lái)交換信息。Linux支持SYSTEM V的共享內存IPC機制。

4.進(jìn)程的保護

系統中的每一個(gè)進(jìn)程都有自己的虛擬地址空間。這些虛擬地址空間是完全分開(kāi)的,這樣一個(gè)進(jìn)程的運行不會(huì )影響其它進(jìn)程,并且硬件上的虛擬內存機制是被保護的,內存不能被寫(xiě)入。這樣可以防止迷失的應用程序覆蓋代碼的數據。

5.Linux虛擬內存實(shí)現機制

Linux虛擬內存的實(shí)現需要6種機制的支持:地址映射機制、內存分配回收機制、緩存和刷新機制、請求頁(yè)機制、交換機制和內存共享機制。

內存管理程序通過(guò)映射機制把用戶(hù)程序的邏輯地址映射到物理地址。當用戶(hù)程序運行時(shí),如果發(fā)現程序中要用的虛地址沒(méi)有對應的物理內存,就發(fā)出了請求頁(yè)要求。如果有空閑的內存可供分配,就請求分配內存(于是用到了內存的分配和回收),并把正在使用的物理頁(yè)記錄在緩存中(使用了緩存機制)。如果沒(méi)有足夠的內存可供分配,那么就調用交換機制;騰出一部分內存。另外,在地址映射中要通過(guò)TLB(翻譯后援存儲器)來(lái)尋找物理頁(yè);交換機制中也要用到交換緩存,并且把物理頁(yè)內容交換到交換文件中,也要修改頁(yè)表來(lái)映射文件地址。Linux虛擬內存實(shí)現原理見(jiàn)圖1。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>