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