<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è) > 嵌入式系統 > 設計應用 > Linux操作系統的內存使用機制研究

Linux操作系統的內存使用機制研究

作者: 時(shí)間:2017-06-06 來(lái)源:網(wǎng)絡(luò ) 收藏
  linux的產(chǎn)生與發(fā)展,更多的應用與服務(wù)器,那么對于linux的各個(gè)管理機制要非常清楚,一個(gè)完整的linux系統主要有存儲管理,內存管理,文件系統和進(jìn)程管理等幾方面組成。本文介紹。

  以下主要說(shuō)明swap和buffer cache機制

  支持虛擬內存(virtual memory),虛擬內存是指使用磁盤(pán)當作RAM的擴展,這樣可用的內存的大小就相應地增大了。內核會(huì )將暫時(shí)不用的內存塊的內容寫(xiě)到硬盤(pán)上,這樣一來(lái),這塊內存就可用于其它目的。當需要用到原始的內容時(shí),它們被重新讀入內存。這些操作對用戶(hù)來(lái)說(shuō)是完全透明的;下運行的程序只是看到有大量的內存可供使用而并沒(méi)有注意到時(shí)不時(shí)它們的一部分是駐留在硬盤(pán)上的。當然,讀寫(xiě)硬盤(pán)要比直接使用真實(shí)內存慢得多(要慢數千倍),所以程序就不會(huì )象一直在內存中運行的那樣快。用作虛擬內存的硬盤(pán)部分被稱(chēng)為交換空間(swap space)。

  一般,在交換空間中的頁(yè)面首先被換入內存;如果此時(shí)沒(méi)有足夠的物理內存來(lái)容納它們又將被交換出來(lái)(到其他的交換空間中)。如果沒(méi)有足夠的虛擬內存來(lái)容納所有這些頁(yè)面,Linux就會(huì )波動(dòng)而不正常;但經(jīng)過(guò)一段較長(cháng)的時(shí)間Linux會(huì )恢復,但此時(shí)系統已不可用了。

  有時(shí),盡管有許多的空閑內存,仍然會(huì )有許多的交換空間正被使用。這種情況是有可能發(fā)生的,例如如果在某一時(shí)刻有進(jìn)行交換的必要,但后來(lái)一個(gè)占用很多物理內存的大進(jìn)程結束并釋放內存時(shí)。被交換出的數據并不會(huì )自動(dòng)地交換進(jìn)內存,除非有這個(gè)需要時(shí)。此時(shí)物理內存會(huì )在一段時(shí)間內保持空閑狀態(tài)。對此并沒(méi)有什么可擔心的,但是知道了是怎么一回事,也就無(wú)所謂了。

  許多使用了虛擬內存的方法。因為它們僅在運行時(shí)才需要交換空間,以解決不會(huì )在同一時(shí)間使用交換空間,因此,除了當前正在運行的的交換空間,其它的就是一種浪費。所以讓它們共享一個(gè)交換空間將會(huì )更有效率。

  注意,如果會(huì )有幾個(gè)人同時(shí)使用這個(gè)系統,他們都將消耗內存。然而,如果兩個(gè)人同時(shí)運行一個(gè)程序,內存消耗的總量并不是翻倍,因為代碼頁(yè)以及共享的庫只存在一份。

  Linux系統常常動(dòng)不動(dòng)就使用交換空間,以保持盡可能多的空閑物理內存。即使并沒(méi)有什么事情需要內存,Linux也會(huì )交換出暫時(shí)不用的內存頁(yè)面。這可以避免等待交換所需的時(shí)間:當磁盤(pán)閑著(zhù),就可以提前做好交換。

  可以將交換空間分散在幾個(gè)硬盤(pán)之上。針對相關(guān)磁盤(pán)的速度以及對磁盤(pán)的訪(fǎng)問(wèn)模式,這樣做可以提高性能。

  高速緩沖

  與訪(fǎng)問(wèn)(真正的)的內存相比,磁盤(pán)的讀寫(xiě)是很慢的。另外,在相應較短的時(shí)間內多次讀磁盤(pán)同樣的部分也是常有的事。例如,某人也許首先閱讀了一段e-mail消息,然后為了答復又將這段消息讀入編輯器中,然后又在將這個(gè)消息拷貝到文件夾中時(shí),使得郵件程序又一次讀入它?;蛘呖紤]一下在一個(gè)有著(zhù)許多用戶(hù)的系統中 ls命令會(huì )被使用多少次。通過(guò)將信息從磁盤(pán)上僅讀入一次并將其存于內存中,除了第一次讀以外,可以加快所有其它讀的速度。這叫作磁盤(pán)緩沖(disk buffering),被用作此目的的內存稱(chēng)為高速緩沖(buffer cache)。

  但是,由于內存是一種有限而又不充足的資源,高速緩沖不可能做的很大(它不可能包容要用到的所有數據)。當緩沖充滿(mǎn)了數據時(shí),其中最長(cháng)時(shí)間不用的數據將被舍棄以騰出內存空間用于新的數據。

  對寫(xiě)磁盤(pán)操作來(lái)說(shuō)磁盤(pán)緩沖技術(shù)同樣有效。一方面,被寫(xiě)入磁盤(pán)的數據常常會(huì )很快地又被讀出(例如,原代碼文件被保存到一個(gè)文件中,又被編譯器讀入),所以將要被寫(xiě)的數據放入緩沖中是個(gè)好主意。另一方面,通過(guò)將數據放入緩沖中,而不是將其立刻寫(xiě)入磁盤(pán),程序可以加快運行的速度。以后,寫(xiě)的操作可以在后臺完成,而不會(huì )拖延程序的執行。

  大多數操作系統都有高速緩沖(盡管可能稱(chēng)呼不同),但是并不是都遵守上面的原理。有些是直接寫(xiě)(write-through):數據將被立刻寫(xiě)入磁盤(pán)(當然,數據也被放入中)。如果寫(xiě)操作是在以后做的,那么該被稱(chēng)為后臺寫(xiě)(write-back)。后臺寫(xiě)比直接寫(xiě)更有效,但也容易出錯:如果機器崩潰,或者突然掉電,緩沖中改變過(guò)的數據就被丟失了。如果仍未被寫(xiě)入的數據含有重要的薄記信息,這甚至可能意味著(zhù)文件系統(如果有的話(huà))已不完整。

  針對以上的原因,出現了很多的日志文件系統,數據在緩沖區修改后,同時(shí)會(huì )被文件系統記錄修改信息,這樣即使此時(shí)系統掉電,系統重啟后會(huì )首先從日志記錄中恢復數據,保證數據不丟失。當然這些問(wèn)題不再本文的敘述范圍。

  由于上述原因,在使用適當的關(guān)閉過(guò)程之前,絕對不要關(guān)掉電源,sync命令傾空(flushes)緩沖,也即,強迫所有未被寫(xiě)的數據寫(xiě)入磁盤(pán),可用以確定所有的寫(xiě)操作都已完成。在傳統的UNIX系統中,有一個(gè)叫做update的程序運行于后臺,每隔30秒做一次sync操作,因此通常無(wú)需手工使用sync命令了。Linux另外有一個(gè)后臺程序,bdflush,這個(gè)程序執行更頻繁的但不是全面的同步操作,以避免有時(shí)sync的大量磁盤(pán)I/O操作所帶來(lái)的磁盤(pán)的突然凍結。

  在Linux中,bdflush是由update啟動(dòng)的。通常沒(méi)有理由來(lái)?yè)拇耸?,但如果由于某些原因bdflush進(jìn)程死掉了,內核會(huì )對此作出警告,此時(shí)你就要手工地啟動(dòng)它了(/sbin/update)。

  (cache)實(shí)際并不是緩沖文件的,而是緩沖塊的,塊是磁盤(pán)I/O操作的最小單元(在Linux中,它們通常是1KB)。這樣,目錄、超級塊、其它文件系統的薄記數據以及非文件系統的磁盤(pán)數據都可以被緩沖了。

  緩沖的效力主要是由它的大小決定的。緩沖太小的話(huà)等于沒(méi)用:

  它只能容納一點(diǎn)數據,因此在被重用時(shí),所有緩沖的數據都將被傾空。實(shí)際的大小依賴(lài)于數據讀寫(xiě)的頻次、相同數據被訪(fǎng)問(wèn)的頻率。只有用實(shí)驗的方法才能知道。

  如果緩存有固定的大小,那么緩存太大了也不好,因為這會(huì )使得空閑的內存太小而導致進(jìn)行交換操作(這同樣是慢的)。為了最有效地使用實(shí)際內存,Linux自動(dòng)地使用所有空閑的內存作為高速緩沖,當程序需要更多的內存時(shí),它也會(huì )自動(dòng)地減小緩沖的大小。

  這就是一般情況下linux內存的一般機制,當然linux內存的運行機制遠遠比這個(gè)復雜,但是只有了解了這個(gè)機制,我們管理服務(wù)器才能得心應手!




評論


相關(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>