日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Page cache和Buffer cache[转1]

發(fā)布時(shí)間:2025/3/13 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Page cache和Buffer cache[转1] 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://www.cnblogs.com/mydomain/archive/2013/02/24/2924707.html

Page cache實(shí)際上是針對文件系統(tǒng)的,是文件的緩存,在文件層面上的數(shù)據(jù)會緩存到page cache。文件的邏輯層需要映射到實(shí)際的物理磁盤,這種映射關(guān)系由文件系統(tǒng)來完成。當(dāng)page cache的數(shù)據(jù)需要刷新時(shí),page cache中的數(shù)據(jù)交給buffer cache,但是這種處理在2.6版本的內(nèi)核之后就變的很簡單了,沒有真正意義上的cache操作。

Linux 2.6的內(nèi)核中Page cacheBuffer cache進(jìn)一步結(jié)合,Buffer pages其實(shí)也是Page cache里面的頁。從Linux算法實(shí)現(xiàn)的角度,Page cacheBuffer cache目前是一樣的,只是多了一層抽象,通過buffer_head來進(jìn)行一些訪問管理。可以理解為只有Page cache概念亦可。在Linux 2.6的內(nèi)核中Page cacheBuffer cache進(jìn)一步結(jié)合,Buffer pages其實(shí)也是Page cache里面的頁。從Linux算法實(shí)現(xiàn)的角度,Page cacheBuffer cache目前是一樣的,只是多了一層抽象,通過buffer_head來進(jìn)行一些訪問管理。可以理解為只有Page cache概念亦可。

標(biāo)準(zhǔn)IO

在?Linux?中,這種訪問文件的方式是通過兩個(gè)系統(tǒng)調(diào)用實(shí)現(xiàn)的:read()?和?write()。當(dāng)應(yīng)用程序調(diào)用?read()?系統(tǒng)調(diào)用讀取一塊數(shù)據(jù)的時(shí)候,如果該塊數(shù)據(jù)已經(jīng)在內(nèi)存中了,那么就直接從內(nèi)存中讀出該數(shù)據(jù)并返回給應(yīng)用程序;如果該塊數(shù)據(jù)不在內(nèi)存中,那么數(shù)據(jù)會被從磁盤上讀到頁高緩存中去,然后再從頁緩存中拷貝到用戶地址空間中去。如果一個(gè)進(jìn)程讀取某個(gè)文件,那么其他進(jìn)程就都不可以讀取或者更改該文件;對于寫數(shù)據(jù)操作來說,當(dāng)一個(gè)進(jìn)程調(diào)用了?write()?系統(tǒng)調(diào)用往某個(gè)文件中寫數(shù)據(jù)的時(shí)候,數(shù)據(jù)會先從用戶地址空間拷貝到操作系統(tǒng)內(nèi)核地址空間的頁緩存中去,然后才被寫到磁盤上。但是對于這種標(biāo)準(zhǔn)的訪問文件的方式來說,在數(shù)據(jù)被寫到頁緩存中的時(shí)候,write()?系統(tǒng)調(diào)用就算執(zhí)行完成,并不會等數(shù)據(jù)完全寫入到磁盤上。Linux?在這里采用的是我們前邊提到的延遲寫機(jī)制(?deferred writes?)。如果用戶采用的是延遲寫機(jī)制(?deferred writes?),那么應(yīng)用程序就完全不需要等到數(shù)據(jù)全部被寫回到磁盤,數(shù)據(jù)只要被寫到頁緩存中去就可以了。在延遲寫機(jī)制的情況下,操作系統(tǒng)會定期地將放在頁緩存中的數(shù)據(jù)刷到磁盤上。

直接IO

凡是通過直接?I/O?方式進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)均直接在用戶地址空間的緩沖區(qū)和磁盤之間直接進(jìn)行傳輸,完全不需要頁緩存的支持。操作系統(tǒng)層提供的緩存往往會使應(yīng)用程序在讀寫數(shù)據(jù)的時(shí)候獲得更好的性能,但是對于某些特殊的應(yīng)用程序,比如說數(shù)據(jù)庫管理系統(tǒng)這類應(yīng)用,他們更傾向于選擇他們自己的緩存機(jī)制,因?yàn)閿?shù)據(jù)庫管理系統(tǒng)往往比操作系統(tǒng)更了解數(shù)據(jù)庫中存放的數(shù)據(jù),數(shù)據(jù)庫管理系統(tǒng)可以提供一種更加有效的緩存機(jī)制來提高數(shù)據(jù)庫中數(shù)據(jù)的存取性能。

簡單說來,page cache用來緩存文件數(shù)據(jù),buffer cache用來緩存磁盤數(shù)據(jù)。在有文件系統(tǒng)的情況下,對文件操作,那么數(shù)據(jù)會緩存到page cache,如果直接采用dd等工具對磁盤進(jìn)行讀寫,那么數(shù)據(jù)會緩存到buffer cache

補(bǔ)充一點(diǎn),在文件系統(tǒng)層每個(gè)設(shè)備都會分配一個(gè)def_blk_ops的文件操作方法,這是設(shè)備的操作方法,在每個(gè)設(shè)備的inode下面會存在一個(gè)radix tree,這個(gè)radix tree下面將會放置緩存數(shù)據(jù)的page頁。這個(gè)page的數(shù)量將會在top程序的buffer一欄中顯示。如果設(shè)備做了文件系統(tǒng),那么會生成一個(gè)inode,這個(gè)inode會分配ext3_ops之類的操作方法,這些方法是文件系統(tǒng)的方法,在這個(gè)inode下面同樣存在一個(gè)radix tree,這里會緩存文件的page頁,緩存頁的數(shù)量在top程序的cache一欄進(jìn)行統(tǒng)計(jì)。從上面的分析可以看出,2.6內(nèi)核中的buffer cachepage cache在處理上是保持一致的,但是存在概念上的差別,page cache針對文件的cachebuffer是針對磁盤塊數(shù)據(jù)的cache,僅此而已。

"如果一個(gè)進(jìn)程讀取某個(gè)文件,那么其他進(jìn)程就都不可以讀取或者更改該文件;"?對這一句話存在質(zhì)疑。

原文

http://blog.chinaunix.net/uid-1829236-id-3152172.html

轉(zhuǎn)載于:https://www.cnblogs.com/anruy/p/5009295.html

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的Page cache和Buffer cache[转1]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。