值得每個程序員了解,操作系統(tǒng)的底層核心知識,頁緩存學(xué)會了么
最近操作系統(tǒng)不可謂不火,無論是華為的鴻蒙,還是騰訊的嵌入式操作系統(tǒng),都激起不少水花。今天,我們來分享一個操作系統(tǒng)的底層技術(shù),頁緩存。
背景
我們都知道,在馮諾依曼計算機(jī)架構(gòu)體系中,存儲器有著舉足輕重的作用,相對于計算單元,存儲器的讀寫速度明顯慢很多。無論是機(jī)械硬盤,固態(tài)硬盤還是最新的Flash閃存,其讀寫速度都比內(nèi)存慢很多。一旦一個應(yīng)用需要讀寫磁盤,那么瓶頸經(jīng)常就會在磁盤讀寫。
頁緩存
為了解決這個問題,操作系統(tǒng)一般會使用頁緩存來解決,我們也稱之為磁盤緩存。當(dāng)進(jìn)程訪問磁盤的時候,操作系統(tǒng)首先會進(jìn)行檢查磁盤緩存,如果發(fā)現(xiàn)緩存上面有數(shù)據(jù),那么直接返回緩存上的內(nèi)容,大大減少了磁盤被訪問的次數(shù),提高了操作系統(tǒng)的性能。
那么,磁盤的內(nèi)容是如何被緩存起來的呢?當(dāng)進(jìn)程訪問磁盤的時候,如果頁緩存上沒有對應(yīng)的信息,那么會在磁盤中把當(dāng)頁讀取出來,并往后預(yù)讀若干頁放入緩存,如果后面這個緩存被命中,就會預(yù)讀更多緩存頁,這也是我們對一個文件連續(xù)訪問,會感覺到比較快的原因。
寫數(shù)據(jù)的時候,如果數(shù)據(jù)已經(jīng)在緩存頁,那么會優(yōu)先把數(shù)據(jù)更新在緩存頁。這里心細(xì)的同學(xué)可能會問,那豈不是磁盤中的是臟數(shù)據(jù)?的確如此,操作系統(tǒng)會會有一定策略把頁緩存的數(shù)據(jù)再統(tǒng)一寫進(jìn)磁盤,在Linux操作系統(tǒng)中,默認(rèn)是臟頁達(dá)到一定比例就會寫入。有些操作系統(tǒng),則會可以選擇臟頁達(dá)到一定數(shù)量,或者間隔一定時間。所以,當(dāng)我們機(jī)器發(fā)生掉電的時候,是有一定的風(fēng)險會丟失數(shù)據(jù)的。即便如此,我們也不會關(guān)閉頁緩存來使數(shù)據(jù)每次都能落盤成功。所以,假如我們的服務(wù)要做到高可用,強(qiáng)一致,使用分布式將數(shù)據(jù)寫到多個機(jī)器上進(jìn)行備份才是硬道理。
總結(jié)
操作系統(tǒng)是計算機(jī)軟件中最核心的軟件之一,這里面有非常多地干貨值得我們學(xué)習(xí),既有算法數(shù)據(jù)結(jié)構(gòu)的,也有一些關(guān)乎底層物理硬件的設(shè)計思想,如果有興趣,歡迎關(guān)注我,我們一起學(xué)習(xí)共同進(jìn)步。