freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

操作系統(tǒng)課程設(shè)計緩沖區(qū)管理-展示頁

2024-11-28 16:18本頁面
  

【正文】 6 見 下 圖所示。除了塊設(shè)備驅(qū)動程序以外,內(nèi)核程序如果需要訪問塊設(shè)備中的數(shù)據(jù),就都需要經(jīng)過高速緩沖區(qū)來間接地操作。高速緩沖區(qū)位于內(nèi)核代碼塊和主內(nèi)存區(qū)之間。// 空閑表上后一塊 }。 //hash隊列上后一塊 struct buffer_head * b_prev_free。 //指向等待該緩沖區(qū)解鎖的任務(wù) struct buffer_head * b_prev。 //使用的用戶數(shù) unsigned char b_lock。 //更新標志:表示數(shù)據(jù)是否已更新 unsigned char b_dirt。 //block number */塊號 unsigned short b_dev。 睡眠函數(shù) ? ll_rw_block():讀設(shè)備塊請求函數(shù) ? get_hash_table():哈希搜索函數(shù) ,程序中使用的具體函數(shù)是:(設(shè)備號 ^邏輯塊號 ) Mod 307 2. 緩沖頭數(shù)據(jù)結(jié)構(gòu) struct buffer_head { char * b_data。 四、源代碼分析 1.使用的基本函數(shù) ? Cli()/sti() :開關(guān)中斷 ? bread() :塊讀取 ? breada():塊提前預(yù)讀函數(shù) ? bread_page():頁塊讀取函數(shù) ? getblk():緩沖區(qū)搜索管理函數(shù) ? brelse() :釋放緩沖塊函數(shù) ? remove_from_queues():隊列移除函數(shù) ? sleep_on(amp。 該情況存在于 ,但是從 ,統(tǒng)一了這兩種緩存,現(xiàn)在 Linux只有惟一的磁盤緩存 — 頁高速緩存。前者緩存頁,后者緩存緩沖。 現(xiàn)在 Linux系統(tǒng)中已經(jīng)不再有 獨立的緩沖區(qū)高速緩存了。 當內(nèi)核其它部分需要訪問塊設(shè)備中的數(shù)據(jù)時,在高速緩沖區(qū)分配緩沖頭結(jié)構(gòu)以及存儲空間,塊設(shè)備驅(qū)動程序(實際是低層讀寫數(shù)據(jù)塊函數(shù)ll_rw_block)負責處理利用緩沖頭結(jié)構(gòu)構(gòu)造讀寫請求,并調(diào)用對應(yīng)塊設(shè)備類型的請求處理函數(shù)向塊設(shè)備控制器寫入控制指令。 HASH表所使用的散列函數(shù)由設(shè)備號和邏輯塊號組合而成,使用的具 體方法是(設(shè)備號 ^邏輯塊號) mod 307。直到它們之間已經(jīng)不能再劃分出緩沖塊為止,見下圖所示。在緩沖區(qū)初始化過程中,從緩沖區(qū)的兩端開始,同時分別設(shè)置緩沖塊頭結(jié)構(gòu)和劃分出對應(yīng)的緩沖塊。整個高速緩沖區(qū)被劃分成 1024 4 字節(jié)大小的緩沖塊,正好與塊設(shè)備上的磁盤邏輯塊大小相同。當在連接生成 system 模塊時, ld 程序的 digest_symbols()函數(shù)會產(chǎn)生此符號。讀寫一個塊設(shè)備的某個數(shù)據(jù)塊前,對應(yīng)的緩沖頭及緩沖塊必須存在;并且一個設(shè)備上的某個數(shù)據(jù)塊在高速緩沖區(qū)只能有一個對應(yīng)的緩沖頭及緩沖塊。由于緩沖塊是用來緩存塊設(shè)備上的讀寫數(shù)據(jù)的,因此有兩個字段特別關(guān)鍵:設(shè)備號以及數(shù)據(jù)塊編號。這時可能剩下部分碎片空間無法利用。緩沖塊具有固定的長度 1024字節(jié),用來緩存從塊設(shè)備上讀寫的數(shù)據(jù);緩沖頭用 buffer_head定義,用于描述對應(yīng)緩沖塊的屬性和把所有緩沖頭連接成鏈表。 3 高速緩沖區(qū)從 end開始,到 buffer_memory_end結(jié)束,其中包含用于顯卡和 BIOS ROM( 640K~ 1M)的空間。高速緩沖區(qū)在塊設(shè)備和內(nèi)核其它之間起著橋梁作用,用于緩沖讀寫塊設(shè)備時的數(shù)據(jù)。 本次課程設(shè)計的 目標是通過分析一個早期的 Linux內(nèi) 核,加深對操作系統(tǒng)具體的組成模塊 實現(xiàn)機制的理解,同時也為今后從事底層的研究開發(fā)增加一些實踐經(jīng)驗。高速緩沖區(qū)在塊設(shè)備與內(nèi)核其它程序之間起著一個橋梁用。 程序用于對高速緩沖區(qū) (池 )進行操作和管理。這些接口函數(shù)有:塊讀取函數(shù) bread()、塊提前預(yù)讀函數(shù) breada()和頁塊讀取函數(shù)bread_page()。Linux 內(nèi)核實現(xiàn)高速緩 沖區(qū)的程序是 。當需要把數(shù)據(jù)寫到塊設(shè)備中時,系統(tǒng)就會在高速緩沖區(qū)中申請一塊空閑的緩沖塊來臨時存放這些數(shù)據(jù)。如果相應(yīng)數(shù)據(jù)已經(jīng)在緩沖中,就無需再從塊設(shè)備上讀。 在 linux內(nèi)核中,高速緩沖區(qū)位于內(nèi)核代碼和主內(nèi)存區(qū)之間,高速緩沖中存放著最近被使用過的各個塊設(shè)備中的數(shù)據(jù)塊。 從而是 CPU 讀取數(shù)據(jù)的速度大大提高。但是每次 I/O 操作的時間與內(nèi)存和 CPU 的處理速度相比是非常慢的。 1 目 錄 一、緒論 ??????????????????? ???? ?? 4 二 、 分析內(nèi)容及目標 ????????????? ?? ???? 4 三、 分析概述 ??????????? ?????? ?????? 4 四、 源代碼分析 ????? ????? ??????????? 7 五、 分析體會 ???????? ?????? ????????? 21 六、自我評價 ??????? ?????? ?????????? 22 七、參考書目 ????????? ?????? ???????? 22 2 一、緒論 高速緩沖區(qū)是文件系統(tǒng)訪問塊設(shè)備中數(shù)據(jù)的必經(jīng)要道。為了訪問文件系統(tǒng)等塊設(shè)備上的數(shù)據(jù),內(nèi)核可以每次都訪問塊設(shè)備,進行讀或?qū)懖僮?。為了提高系統(tǒng)的性能,內(nèi)核就在內(nèi)存中開辟了一個高速數(shù)據(jù)緩沖區(qū)(池)( buffer cache),并將其劃分成一個個與磁盤數(shù)據(jù)塊大小相等的緩沖塊來使用和管理,以期減少訪問塊設(shè)備的次數(shù)。 二、分析內(nèi)容及目標 本次操作系統(tǒng)的任務(wù)是分析 下的 高速緩沖區(qū)源代碼 。當需要從塊設(shè)備中讀取數(shù)據(jù)時,緩沖區(qū)管理程序首先會在高速緩沖中尋找。如果數(shù)據(jù)不在高速緩沖中,就發(fā)出讀塊設(shè)備的命令,將數(shù)據(jù)讀到高速緩沖中。至于什么時候把數(shù)據(jù)真正地寫到設(shè)備中去,則是通過設(shè)備數(shù)據(jù)同步實現(xiàn)的。文件系統(tǒng)中其它程序通過指定需要訪問的設(shè)備號和數(shù)據(jù)邏輯塊號來調(diào)用它的塊讀寫函數(shù)。頁塊讀取函數(shù)一次讀取一頁內(nèi)存所能容納的緩沖塊數(shù)( 4 塊)。高速緩沖區(qū)位于內(nèi)核代碼塊和主內(nèi)存區(qū)之間。除了塊設(shè)備驅(qū)動程序以外,內(nèi)核程序如果需要訪問塊設(shè)備中的數(shù)據(jù),就都需要經(jīng)過高速緩沖 區(qū)來間接地操作。 三、分析概述 在前面已經(jīng)看到, 、高速緩存、虛擬磁盤(可選)、主存儲區(qū)四個部分。除了塊設(shè)備驅(qū)動程序以外,內(nèi)核程序如果需要訪問塊設(shè)備中的數(shù)據(jù),都需要經(jīng)過高速緩沖區(qū)來間接地操作。高速 緩沖區(qū)被劃分為兩部分:低端為緩沖頭,高端為緩沖塊。 高速緩沖區(qū)的位置 在緩沖區(qū)初始化過程中,從緩沖區(qū)的兩端開始,(在緩沖塊部分)略過用于顯卡和 BIOS ROM的內(nèi)存部分,分別設(shè)置緩沖頭結(jié)構(gòu)和劃分出對應(yīng)的緩沖塊,直到它們之間已經(jīng)不能再劃分出緩沖塊為止。初始化結(jié)束后,高速緩沖區(qū)中的緩沖頭和緩沖塊一一對應(yīng),其個數(shù)保 存在 NR_BUFFERS中。這兩個字段唯一確定了緩沖塊中數(shù)據(jù)對應(yīng)的塊設(shè)備和數(shù)據(jù)塊。 圖中高速緩沖區(qū)的起始位置從內(nèi)核模塊末段 end 標號開始, end 是內(nèi)核模塊鏈接期間由鏈接程序( ld)設(shè)置的一個值,內(nèi)核代碼中沒有定義這個符號。該函數(shù)主要用于對全局變量進行引用賦值,并且計算每個被連接文件的其始和大小,其中也設(shè)置了 end 的值,它等于 data_start + datasize + bss_size,也即內(nèi)核模塊的末段。高速緩沖采用 hash 表和空閑緩沖塊隊列進行操作管理。緩沖區(qū)的高端被劃分成一個個 1024 字節(jié)的緩沖塊,低端則分別建立 起對應(yīng)各緩沖塊的緩沖頭結(jié)構(gòu) buffer_head( include/linux/, 68 行),用于描述對應(yīng)緩沖塊的屬性和把所有緩沖頭連接成鏈表。 為管理方便, buffer_head結(jié)構(gòu)具有四個指針: b_prev_free和b_next_free將所有緩沖頭鏈接成一個空閑緩沖塊雙向鏈表;而 b_prev和b_next用于 hash表中散列在同一項上多個緩沖塊之間的雙向鏈接。 此外, buffer結(jié)構(gòu)還包括一些其它字段,包括:數(shù)據(jù)有效(更新)標志,修改標志,數(shù)據(jù)被使用的進程數(shù)和本緩沖塊是否上鎖標志,以及指向等待該緩沖區(qū)解鎖的任務(wù)。我們將在后面講述。但在 版本的內(nèi)核中,存在兩個獨立的磁盤緩存:頁高速緩存和緩沖區(qū)高速緩存。兩種緩存并不統(tǒng)一:一個磁盤塊可以在兩種緩存中同時存在,因此需要對兩個緩存中的同一拷貝進行很麻煩的同步操作 — 還不用說要消耗額外的內(nèi)存。 5 雖然如此,內(nèi)核仍然需要在內(nèi)存中使用緩沖來表示磁盤塊,幸好,緩沖是用頁映射塊的,所以它正好在頁高速緩存中。buffer_wait)。 //指向該緩沖塊區(qū)數(shù)據(jù)區(qū)( 1024字節(jié)的) 指針 unsigned long b_blocknr。 // device (0 = free) */數(shù)據(jù)源的設(shè)備號 unsigned char b_uptodate。 //修改標志: 0未修改, 1已修改 unsigned char b_count。 /* 0 ok, 1 locked */ 緩沖區(qū)是否被鎖定 struct task_struct * b_wait。 //hash隊列上前一塊(用于緩沖區(qū)管理) struct buffer_head * b_next。 //空閑表上前一塊 struct bu
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1