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