青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

1 、前言

  自從誕生以來,Linux 就被不斷完善和普及,目前它已經(jīng)成為主流通用操作系統(tǒng)之一,使用得非常廣泛,它與 Windows、UNIX 一起占據(jù)了操作系統(tǒng)領(lǐng)域幾乎所有的市場份額。特別是在高性能計(jì)算領(lǐng)域,Linux 已經(jīng)成為一個占主導(dǎo)地位的操作系統(tǒng),在2005年6月全球TOP500 計(jì)算機(jī)中,有 301 臺部署的是 Linux 操作系統(tǒng)。因此,研究和使用 Linux 已經(jīng)成為開發(fā)者的不可回避的問題了。

  下面我們介紹一下 Linux 內(nèi)核中文件 Cache 管理的機(jī)制。本文以 2.6 系列內(nèi)核為基準(zhǔn),主要講述工作原理、數(shù)據(jù)結(jié)構(gòu)和算法,不涉及具體代碼。

  2 操作系統(tǒng)和文件 Cache 管理

  操作系統(tǒng)是計(jì)算機(jī)上最重要的系統(tǒng)軟件,它負(fù)責(zé)管理各種物理資源,并向應(yīng)用程序提供各種抽象接口以便其使用這些物理資源。從應(yīng)用程序的角度看,操作系統(tǒng)提供了一個統(tǒng)一的虛擬機(jī),在該虛擬機(jī)中沒有各種機(jī)器的具體細(xì)節(jié),只有進(jìn)程、文件、地址空間以及進(jìn)程間通信等邏輯概念。這種抽象虛擬機(jī)使得應(yīng)用程序的開發(fā)變得相對容易:開發(fā)者只需與虛擬機(jī)中的各種邏輯對象交互,而不需要了解各種機(jī)器的具體細(xì)節(jié)。此外,這些抽象的邏輯對象使得操作系統(tǒng)能夠很容易隔離并保護(hù)各個應(yīng)用程序。

  對于存儲設(shè)備上的數(shù)據(jù),操作系統(tǒng)向應(yīng)用程序提供的邏輯概念就是"文件"。應(yīng)用程序要存儲或訪問數(shù)據(jù)時(shí),只需讀或者寫"文件"的一維地址空間即可,而這個地址空間與存儲設(shè)備上存儲塊之間的對應(yīng)關(guān)系則由操作系統(tǒng)維護(hù)。

  在 Linux 操作系統(tǒng)中,當(dāng)應(yīng)用程序需要讀取文件中的數(shù)據(jù)時(shí),操作系統(tǒng)先分配一些內(nèi)存,將數(shù)據(jù)從存儲設(shè)備讀入到這些內(nèi)存中,然后再將數(shù)據(jù)分發(fā)給應(yīng)用程序;當(dāng)需要往文件中寫數(shù)據(jù)時(shí),操作系統(tǒng)先分配內(nèi)存接收用戶數(shù)據(jù),然后再將數(shù)據(jù)從內(nèi)存寫到磁盤上。文件 Cache 管理指的就是對這些由操作系統(tǒng)分配,并用來存儲文件數(shù)據(jù)的內(nèi)存的管理。 Cache 管理的優(yōu)劣通過兩個指標(biāo)衡量:一是 Cache 命中率,Cache 命中時(shí)數(shù)據(jù)可以直接從內(nèi)存中獲取,不再需要訪問低速外設(shè),因而可以顯著提高性能;二是有效 Cache 的比率,有效 Cache 是指真正會被訪問到的 Cache 項(xiàng),如果有效 Cache 的比率偏低,則相當(dāng)部分磁盤帶寬會被浪費(fèi)到讀取無用 Cache 上,而且無用 Cache 會間接導(dǎo)致系統(tǒng)內(nèi)存緊張,最后可能會嚴(yán)重影響性能。

  下面分別介紹文件 Cache 管理在 Linux 操作系統(tǒng)中的地位和作用、Linux 中文件 Cache相關(guān)的數(shù)據(jù)結(jié)構(gòu)、Linux 中文件 Cache 的預(yù)讀和替換、Linux 中文件 Cache 相關(guān) API 及其實(shí)現(xiàn)。

  2、 文件 Cache 的地位和作用

  文件 Cache 是文件數(shù)據(jù)在內(nèi)存中的副本,因此文件 Cache 管理與內(nèi)存管理系統(tǒng)和文件系統(tǒng)都相關(guān):一方面文件 Cache 作為物理內(nèi)存的一部分,需要參與物理內(nèi)存的分配回收過程,另一方面文件 Cache 中的數(shù)據(jù)來源于存儲設(shè)備上的文件,需要通過文件系統(tǒng)與存儲設(shè)備進(jìn)行讀寫交互。從操作系統(tǒng)的角度考慮,文件 Cache 可以看做是內(nèi)存管理系統(tǒng)與文件系統(tǒng)之間的聯(lián)系紐帶。因此,文件 Cache 管理是操作系統(tǒng)的一個重要組成部分,它的性能直接影響著文件系統(tǒng)和內(nèi)存管理系統(tǒng)的性能。

  圖1描述了 Linux 操作系統(tǒng)中文件 Cache 管理與內(nèi)存管理以及文件系統(tǒng)的關(guān)系示意圖。從圖中可以看到,在 Linux 中,具體文件系統(tǒng),如 ext2/ext3、jfs、ntfs 等,負(fù)責(zé)在文件 Cache和存儲設(shè)備之間交換數(shù)據(jù),位于具體文件系統(tǒng)之上的虛擬文件系統(tǒng)VFS負(fù)責(zé)在應(yīng)用程序和文件 Cache 之間通過 read/write 等接口交換數(shù)據(jù),而內(nèi)存管理系統(tǒng)負(fù)責(zé)文件 Cache 的分配和回收,同時(shí)虛擬內(nèi)存管理系統(tǒng)(VMM)則允許應(yīng)用程序和文件 Cache 之間通過 memory map的方式交換數(shù)據(jù)。可見,在 Linux 系統(tǒng)中,文件 Cache 是內(nèi)存管理系統(tǒng)、文件系統(tǒng)以及應(yīng)用程序之間的一個聯(lián)系樞紐。
 
、文件 Cache 相關(guān)數(shù)據(jù)結(jié)構(gòu)

  在 Linux 的實(shí)現(xiàn)中,文件 Cache 分為兩個層面,一是 Page Cache,另一個 Buffer Cache,每一個 Page Cache 包含若干 Buffer Cache。內(nèi)存管理系統(tǒng)和 VFS 只與 Page Cache 交互,內(nèi)存管理系統(tǒng)負(fù)責(zé)維護(hù)每項(xiàng) Page Cache 的分配和回收,同時(shí)在使用 memory map 方式訪問時(shí)負(fù)責(zé)建立映射;VFS 負(fù)責(zé) Page Cache 與用戶空間的數(shù)據(jù)交換。而具體文件系統(tǒng)則一般只與 Buffer Cache 交互,它們負(fù)責(zé)在外圍存儲設(shè)備和 Buffer Cache 之間交換數(shù)據(jù)。Page Cache、Buffer Cache、文件以及磁盤之間的關(guān)系如圖 2 所示,Page 結(jié)構(gòu)和 buffer_head 數(shù)據(jù)結(jié)構(gòu)的關(guān)系如圖 3 所示。在上述兩個圖中,假定了 Page 的大小是 4K,磁盤塊的大小是 1K。本文所講述的,主要是指對 Page Cache 的管理。

  在 Linux 內(nèi)核中,文件的每個數(shù)據(jù)塊最多只能對應(yīng)一個 Page Cache 項(xiàng),它通過兩個數(shù)據(jù)結(jié)構(gòu)來管理這些 Cache 項(xiàng),一個是 radix tree,另一個是雙向鏈表。Radix tree 是一種搜索樹,Linux 內(nèi)核利用這個數(shù)據(jù)結(jié)構(gòu)來通過文件內(nèi)偏移快速定位 Cache 項(xiàng),圖 4 是 radix tree的一個示意圖,該 radix tree 的分叉為4(22),樹高為4,用來快速定位8位文件內(nèi)偏移。Linux(2.6.7) 內(nèi)核中的分叉為 64(26),樹高為 6(64位系統(tǒng))或者 11(32位系統(tǒng)),用來快速定位 32 位或者 64 位偏移,radix tree 中的每一個葉子節(jié)點(diǎn)指向文件內(nèi)相應(yīng)偏移所對應(yīng)的Cache項(xiàng)。

  另一個數(shù)據(jù)結(jié)構(gòu)是雙向鏈表,Linux內(nèi)核為每一片物理內(nèi)存區(qū)域(zone)維護(hù)active_list和 inactive_list兩個雙向鏈表,這兩個list主要用來實(shí)現(xiàn)物理內(nèi)存的回收。這兩個鏈表上除了文件Cache之外,還包括其它匿名 (Anonymous)內(nèi)存,如進(jìn)程堆棧等。
4 、文件Cache的預(yù)讀和替換

  Linux內(nèi)核中文件預(yù)讀算法的具體過程是這樣的:對于每個文件的第一個讀請求,系統(tǒng)讀入所請求的頁面并讀入緊隨其后的少數(shù)幾個頁面(不少于一個頁面,通常是三個頁面),這時(shí)的預(yù)讀稱為同步預(yù)讀。對于第二次讀請求,如果所讀頁面不在Cache中,即不在前次預(yù)讀的group中,則表明文件訪問不是順序訪問,系統(tǒng)繼續(xù)采用同步預(yù)讀;如果所讀頁面在Cache中,則表明前次預(yù)讀命中,操作系統(tǒng)把預(yù)讀group擴(kuò)大一倍,并讓底層文件系統(tǒng)讀入 group中剩下尚不在Cache中的文件數(shù)據(jù)塊,這時(shí)的預(yù)讀稱為異步預(yù)讀。無論第二次讀請求是否命中,系統(tǒng)都要更新當(dāng)前預(yù)讀group的大小。此外,系統(tǒng)中定義了一個window,它包括前一次預(yù)讀的group和本次預(yù)讀的group。任何接下來的讀請求都會處于兩種情況之一:第一種情況是所請求的頁面處于預(yù)讀window中,這時(shí)繼續(xù)進(jìn)行異步預(yù)讀并更新相應(yīng)的window和group;第二種情況是所請求的頁面處于預(yù)讀window之外,這時(shí)系統(tǒng)就要進(jìn)行同步預(yù)讀并重置相應(yīng)的window和group。圖5是Linux內(nèi)核預(yù)讀機(jī)制的一個示意圖,其中a是某次讀操作之前的情況,b是讀操作所請求頁面不在window中的情況,而c是讀操作所請求頁面在window中的情況。

  Linux內(nèi)核中文件Cache替換的具體過程是這樣的:剛剛分配的Cache項(xiàng)鏈入到inactive_list頭部,并將其狀態(tài)設(shè)置為active,當(dāng)內(nèi)存不夠需要回收Cache時(shí),系統(tǒng)首先從尾部開始反向掃描active_list并將狀態(tài)不是referenced的項(xiàng)鏈入到 inactive_list的頭部,然后系統(tǒng)反向掃描inactive_list,如果所掃描的項(xiàng)的處于合適的狀態(tài)就回收該項(xiàng),直到回收了足夠數(shù)目的 Cache項(xiàng)。Cache替換算法如圖6的算法描述偽碼所示。
Mark_Accessed(b) {
if b.state==(UNACTIVE && UNREFERENCE)
b.state = REFERENCE
else if b.state == (UNACTIVE && REFERENCE)
{
b.state = (ACTIVE && UNREFERENCE)
Add X to tail of active_list
}
else if b.state == (ACTIVE && UNREFERENCE)
b.state = (ACTIVE && REFERENCE)
}
Reclaim()
{
if active_list not empty and scan_num

圖6 Linux的Cache替換算法描述
5 、文件Cache相關(guān)API及其實(shí)現(xiàn)

  Linux內(nèi)核中與文件Cache操作相關(guān)的API有很多,按其使用方式可以分成兩類:一類是以拷貝方式操作的相關(guān)接口,如read/write/sendfile等,其中sendfile在2.6系列的內(nèi)核中已經(jīng)不再支持;另一類是以地址映射方式操作的相關(guān)接口,如 mmap等。

  第一種類型的API在不同文件的Cache之間或者Cache與應(yīng)用程序所提供的用戶空間buffer之間拷貝數(shù)據(jù),其實(shí)現(xiàn)原理如圖7所示。
第二種類型的API將Cache項(xiàng)映射到用戶空間,使得應(yīng)用程序可以像使用內(nèi)存指針一樣訪問文件,Memory map訪問Cache的方式在內(nèi)核中是采用請求頁面機(jī)制實(shí)現(xiàn)的,其工作過程如圖8所示。
首先,應(yīng)用程序調(diào)用mmap(圖中1),陷入到內(nèi)核中后調(diào)用do_mmap_pgoff(圖中2)。該函數(shù)從應(yīng)用程序的地址空間中分配一段區(qū)域作為映射的內(nèi)存地址,并使用一個VMA(vm_area_struct)結(jié)構(gòu)代表該區(qū)域,之后就返回到應(yīng)用程序(圖中3)。當(dāng)應(yīng)用程序訪問mmap所返回的地址指針時(shí)(圖中4),由于虛實(shí)映射尚未建立,會觸發(fā)缺頁中斷(圖中5)。之后系統(tǒng)會調(diào)用缺頁中斷處理函數(shù)(圖中6),在缺頁中斷處理函數(shù)中,內(nèi)核通過相應(yīng)區(qū)域的VMA結(jié)構(gòu)判斷出該區(qū)域?qū)儆谖募成洌谑钦{(diào)用具體文件系統(tǒng)的接口讀入相應(yīng)的Page Cache項(xiàng)(圖中7、8、9),并填寫相應(yīng)的虛實(shí)映射表。經(jīng)過這些步驟之后,應(yīng)用程序就可以正常訪問相應(yīng)的內(nèi)存區(qū)域了。

  6 、小結(jié)

  文件Cache管理是Linux操作系統(tǒng)的一個重要組成部分,同時(shí)也是研究領(lǐng)域一個很熱門的研究方向。目前,Linux內(nèi)核在這個方面的工作集中在開發(fā)更有效的Cache替換算法上,如LIRS(其變種ClockPro)、ARC等。

 原文地址 http://forum.oss.org.cn/viewtopic.php?p=8858&sid=2bae226e7e46311ee0e8d43ae69194ec
Posted on 2007-11-15 10:33 艾凡赫 閱讀(469) 評論(0)  編輯 收藏 引用 所屬分類: Linux

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久噜久噜久久综合| 韩国女主播一区二区三区| 最新成人在线| 久久午夜影视| 久久综合电影一区| 麻豆精品精品国产自在97香蕉| 久久国产日韩| 蜜臀va亚洲va欧美va天堂| 麻豆91精品| 亚洲人精品午夜在线观看| 99综合在线| 香蕉久久久久久久av网站| 久久久91精品国产一区二区三区| 久久亚洲一区| 欧美日韩国产综合网| 欧美午夜免费影院| 国产午夜精品久久久久久免费视| 狠狠久久婷婷| 一区二区三区精品视频| 午夜精品视频在线| 欧美不卡三区| 亚洲午夜精品在线| 久久蜜桃资源一区二区老牛 | 国语自产精品视频在线看| 尤物yw午夜国产精品视频| 一本色道精品久久一区二区三区 | 欧美福利网址| 一区二区三区日韩在线观看| 欧美在线观看一区| 欧美日本高清视频| 黄色成人91| 性18欧美另类| 日韩视频免费| 开心色5月久久精品| 国产欧美日韩免费看aⅴ视频| 欧美精品在线一区二区| 国产裸体写真av一区二区| 91久久久久久国产精品| 亚洲欧洲av一区二区| 亚洲欧洲一区二区三区| 久久激情五月激情| 国产精品久久影院| 日韩网站在线观看| 麻豆freexxxx性91精品| 午夜精品短视频| 欧美性事免费在线观看| 日韩午夜av电影| 亚洲国产裸拍裸体视频在线观看乱了中文 | 国产精品swag| 日韩视频在线观看一区二区| 狼人天天伊人久久| 亚洲尤物影院| 国产精品色一区二区三区| 正在播放亚洲| 99精品欧美一区二区三区综合在线| 狼人社综合社区| 在线观看日韩av电影| 久久久久91| 欧美一区二区三区在线| 国产日韩一级二级三级| 欧美在线二区| 久久狠狠婷婷| 亚洲激情自拍| 亚洲高清在线观看| 欧美激情2020午夜免费观看| 亚洲伦理在线| 妖精视频成人观看www| 国产精品xxxxx| 亚洲欧美视频在线观看视频| 亚洲一区在线免费观看| 国产日韩高清一区二区三区在线| 久久成人精品一区二区三区| 香蕉尹人综合在线观看| 国产日韩欧美在线一区| 久久亚洲不卡| 久热精品视频在线免费观看| 亚洲人在线视频| 亚洲精品免费看| 国产精品国产三级欧美二区| 久久精品国产精品| 久久亚洲综合色| 亚洲午夜国产成人av电影男同| 午夜免费久久久久| 亚洲国产精品va在看黑人| 亚洲精品欧美一区二区三区| 国产精品乱子乱xxxx| 在线免费观看日韩欧美| 亚洲日本无吗高清不卡| 一区二区高清| 激情欧美日韩| 日韩亚洲欧美精品| 国内精品亚洲| 99视频一区| 亚洲电影成人| 亚洲自拍偷拍网址| 亚洲国产欧洲综合997久久| 一本一本a久久| 激情综合久久| 亚洲系列中文字幕| 最新日韩在线| 欧美一级久久久| 亚洲影视在线| 欧美成人精品在线播放| 欧美与黑人午夜性猛交久久久| 女人色偷偷aa久久天堂| 久久精品一区二区三区四区 | 亚洲国产mv| 香蕉免费一区二区三区在线观看| 99亚洲精品| 美女亚洲精品| 久久亚洲精品伦理| 国产精品日韩高清| 亚洲精品视频在线播放| 亚洲高清三级视频| 久久aⅴ国产紧身牛仔裤| 亚洲永久免费视频| 欧美日本不卡视频| 亚洲高清视频中文字幕| 在线精品一区| 久久久久久久久久久久久久一区| 亚洲午夜未删减在线观看| 欧美高清在线视频| 欧美成人在线免费视频| 在线电影院国产精品| 西瓜成人精品人成网站| 欧美一区二区三区播放老司机| 欧美视频中文字幕| 野花国产精品入口| 亚洲欧美成人在线| 国产精品劲爆视频| 亚洲天堂成人在线观看| 亚洲午夜女主播在线直播| 欧美日韩中文精品| 亚洲色图制服丝袜| 欧美一区二区三区播放老司机| 国产精品乱人伦中文| 亚洲欧美日韩一区二区| 欧美在线91| 黑丝一区二区三区| 老司机67194精品线观看| 欧美国产综合视频| 亚洲毛片av在线| 欧美日产一区二区三区在线观看| 91久久国产精品91久久性色| 99成人精品| 国产精品扒开腿做爽爽爽视频| 亚洲私人影院| 久久先锋影音| 亚洲肉体裸体xxxx137| 欧美日韩国产二区| 一区二区三区视频在线看| 欧美在线|欧美| 欧美成人精品三级在线观看| 亚洲精品激情| 国产精品国产精品| 久久九九免费视频| 亚洲国产日韩一级| 亚洲女性裸体视频| 黄色精品在线看| 欧美刺激午夜性久久久久久久| 日韩午夜在线| 久久精视频免费在线久久完整在线看| 国语自产精品视频在线看| 欧美激情视频一区二区三区免费| 亚洲卡通欧美制服中文| 久久精品一区二区三区不卡牛牛| 亚洲激情视频在线| 国产精品免费一区豆花| 久久久久国产一区二区| 亚洲精品乱码久久久久久日本蜜臀 | 日韩亚洲在线观看| 久久激情一区| 亚洲免费观看高清在线观看| 国产精品乱码一区二三区小蝌蚪| 久久久久久久久久久一区| 日韩午夜精品| 浪潮色综合久久天堂| 亚洲欧美日本在线| 亚洲精品日韩精品| 国产一区二区精品久久91| 欧美精品一区二区久久婷婷| 性一交一乱一区二区洋洋av| 亚洲欧洲日本mm| 欧美a级一区二区| 香蕉久久久久久久av网站| 亚洲精选中文字幕| 一区福利视频| 国产欧美91| 欧美午夜在线一二页| 欧美 日韩 国产 一区| 欧美一区二区精品在线| 一区二区高清视频在线观看| 亚洲国内高清视频| 欧美成人免费全部| 久久伊人精品天天| 久久久精品tv| 久久久久免费视频| 欧美中文日韩| 欧美影视一区| 欧美在线免费|