日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

4 Linux管理員手冊--內(nèi)存管理( 三 )



高速緩存

與存取(真正的)內(nèi)存相比,從磁盤讀是很慢的 另外,在相對短的一端時間里,多次讀硬盤相同的部分是很常見的 。例如,你可能先讀了一封電子郵件,然后回復時又將它讀入編輯器,然后復制它到一個文件夾時又用郵件程序讀它 ?;蛘?,考慮命令ls 可能被系統(tǒng)上的很多用戶多么頻繁地使用 。只從磁盤讀一次信息,并保持在硬盤中,知道不再需要,除了第一次讀,其他都會較快 。這就叫磁盤緩存disk buffering,用于此目的的內(nèi)存叫buffer cache 。

不幸的是,由于內(nèi)存是有限且缺乏的資源,buffer cache一般不會足夠大(大到能夠裝下所有人可能用到的數(shù)據(jù)) 。當cache滿時,最長時間不用的數(shù)據(jù)將被丟棄,內(nèi)存釋放給最新的數(shù)據(jù) 。

磁盤緩沖也用于寫操作 。要寫的數(shù)據(jù)經(jīng)常馬上又被讀(例如一個源代碼文件保存到文件中后又被編譯器讀出),所以將要寫的數(shù)據(jù)放在緩沖里是個好主意 。另外,只將數(shù)據(jù)放如cache而不馬上寫到磁盤,寫操作的程序執(zhí)行速度更快 。寫操作然后可以在后臺完成,而不降低其他程序的速度 。

許多操作系統(tǒng)有buffer caches (即使名稱不同),但并非都根據(jù)上述原理 。有些是透寫write-through: 數(shù)據(jù)馬上寫到磁盤(當然也同時寫到cache) 不馬上寫的cache叫回寫write-back ?;貙懕韧笇懜行?,但也更容易出錯:如果系統(tǒng)崩潰,或電源突然掉電,或軟盤在cache回寫前被取出,那么cache中改變的數(shù)據(jù)將丟失 。這可能意味著文件系統(tǒng)is not in full working order, 可能由于未寫數(shù)據(jù)包含了系統(tǒng)記錄信息的重要的變化 。

因此,千萬不要不經(jīng)過正常的關閉過程直接關閉電源(見6章), 或沒有unmount就取出軟盤(如果是mount的),或什么程序還在用著軟盤,或軟盤燈還在閃 。sync 命令刷新緩沖,即強制將所有未寫數(shù)據(jù)寫回磁盤,如果要確保所有數(shù)據(jù)安全回寫,可以用它 。傳統(tǒng)的UNIX系統(tǒng)中,有個update 程序在后臺運行,它每30秒運行一次 sync,所以通常無須使用sync。Linux有一個另外的守侯程序bdflush,它克服了sync 有時因磁盤I/O負荷太重(因為頻繁的操作)而導致有時系統(tǒng)突然呆住的問題 。

Linux下,bdflush 由update 啟動 。一般無須考慮它,但如果bdflush 偶爾因為什么原因死了,核心會給出警告,此時應該手工啟動它(/sbin/update ) 。

cache并不真正緩沖文件,而是塊,就是磁盤I/O的最小單元(Linux下,一般是1kB) 。這樣,所有的目錄、超級塊、其他文件系統(tǒng)記錄數(shù)據(jù)和無文件系統(tǒng)磁盤都可以被緩沖 。

cache的效果決定于其大小 。太小的cache幾乎無用;它只能cache很少的數(shù)據(jù),而可能在被重用前就被清除了 。大小有賴于有多少數(shù)據(jù)被讀寫,相同的數(shù)據(jù)的存取頻度 。唯一的方法是實驗 。

如果cache是固定大小,那么不應該太大,否則,會由于空閑內(nèi)存空間太小而使用swap(也很慢) 。為了最有效地使用真實內(nèi)存,Linux自動使用所有空閑內(nèi)存作為buffer cache,當程序需要更多內(nèi)存時,自動減少cache 。

Linux下,對cache使用無須做任何工作,它完全是自動的 。除了要正常關閉系統(tǒng)和取出軟盤,無須關心cache 。

推薦閱讀