在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux操作系統(tǒng)的內(nèi)存使用機(jī)制研究

      Linux操作系統(tǒng)的內(nèi)存使用機(jī)制研究

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

        以下主要說明swap和buffer cache機(jī)制

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

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

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

        許多使用了虛擬內(nèi)存的方法。因?yàn)樗鼈儍H在運(yùn)行時(shí)才需要交換空間,以解決不會在同一時(shí)間使用交換空間,因此,除了當(dāng)前正在運(yùn)行的的交換空間,其它的就是一種浪費(fèi)。所以讓它們共享一個(gè)交換空間將會更有效率。

        注意,如果會有幾個(gè)人同時(shí)使用這個(gè)系統(tǒng),他們都將消耗內(nèi)存。然而,如果兩個(gè)人同時(shí)運(yùn)行一個(gè)程序,內(nèi)存消耗的總量并不是翻倍,因?yàn)榇a頁以及共享的庫只存在一份。

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

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

        高速緩沖

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

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

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

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

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

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

        在Linux中,bdflush是由update啟動的。通常沒有理由來擔(dān)心此事,但如果由于某些原因bdflush進(jìn)程死掉了,內(nèi)核會對此作出警告,此時(shí)你就要手工地啟動它了(/sbin/update)。

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

        緩沖的效力主要是由它的大小決定的。緩沖太小的話等于沒用:

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

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

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




      評論


      相關(guān)推薦

      技術(shù)專區(qū)

      關(guān)閉