国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux內(nèi)核學(xué)習(xí)(十)—— 塊 I/O 層(基于Linux 2.6內(nèi)核)

這篇具有很好參考價值的文章主要介紹了Linux內(nèi)核學(xué)習(xí)(十)—— 塊 I/O 層(基于Linux 2.6內(nèi)核)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、剖析一個塊設(shè)備

二、緩沖區(qū)和緩沖區(qū)頭

三、bio 結(jié)構(gòu)體

四、請求隊列

五、I/O 調(diào)度程序


系統(tǒng)中能夠隨機(不需要按順序)訪問固定大小數(shù)據(jù)片(chunks)的硬件設(shè)備稱作塊設(shè)備,這些固定大小的數(shù)據(jù)片就稱作。最常見的塊設(shè)備為硬盤,其他的還有軟盤驅(qū)動器、閃存等,它們都是以安裝文件系統(tǒng)的方式使用的。

另一種基本的設(shè)備類型是字符設(shè)備。字符設(shè)備按照字符流的方式被有序訪問,像串口和鍵盤就屬于字符設(shè)備。

對于這兩種類型的設(shè)備,它們的區(qū)別在于是否可以隨機訪問數(shù)據(jù)。內(nèi)核對塊設(shè)備的管理需要有一個專門提供服務(wù)的子系統(tǒng),對字符設(shè)備的管理則不需要。

一、剖析一個塊設(shè)備

塊設(shè)備中最小的可尋址單位扇區(qū)。扇區(qū)大小一般是 2 的整數(shù)倍,最常見的是 512 字節(jié)。扇區(qū)的大小是設(shè)備的物理屬性。

在軟件層面上,最小邏輯可尋址單元為。塊是文件系統(tǒng)的一種抽象,只能基于塊來訪問文件系統(tǒng)。雖然物理磁盤尋址是按照扇區(qū)進行的,但是內(nèi)核執(zhí)行的所有操作都是按照塊進行的。所以塊不能比扇區(qū)還小,只能倍數(shù)于扇區(qū)大小。

總之,扇區(qū)是設(shè)備的最小尋址單元,也被稱為 “硬扇區(qū)” 或?“設(shè)備塊”;同樣地,塊是文件系統(tǒng)的最小尋址單元,也被稱為 “文件塊” 或 “I/O 塊”。

Linux內(nèi)核學(xué)習(xí)(十)—— 塊 I/O 層(基于Linux 2.6內(nèi)核),Linux內(nèi)核設(shè)計與實現(xiàn),linux,學(xué)習(xí),運維,unix

二、緩沖區(qū)和緩沖區(qū)頭

當一個塊被調(diào)入內(nèi)存時(在讀入后或等待寫出時),它要存儲在一個緩沖區(qū)中。每個緩沖區(qū)與一個塊對應(yīng),它相當于是磁盤塊在內(nèi)存中的表示。一個頁可以容納一個或多個內(nèi)存中的塊。由于內(nèi)核在處理數(shù)據(jù)時需要一些相關(guān)的控制信息(比如一個塊屬于哪個塊設(shè)備,塊對應(yīng)于哪個緩沖區(qū)等),所以每一個緩沖區(qū)都有一個對應(yīng)的描述符 buffer_head 結(jié)構(gòu)體,稱為緩沖區(qū)頭,定義在 <linux/buffer_head.h>,它包含了內(nèi)核操作緩沖區(qū)所需要的全部信息:

Linux內(nèi)核學(xué)習(xí)(十)—— 塊 I/O 層(基于Linux 2.6內(nèi)核),Linux內(nèi)核設(shè)計與實現(xiàn),linux,學(xué)習(xí),運維,unix

但是,將緩沖區(qū)頭作為 I/O 操作單元帶來了兩個弊端:

  • 緩沖區(qū)頭是一個很大且不容易控制的數(shù)據(jù)結(jié)構(gòu)體,而且緩沖區(qū)頭對數(shù)據(jù)的操作既不方便也不清晰。
  • 它僅能描述單個緩沖區(qū),緩沖區(qū)頭會促使內(nèi)核八大塊數(shù)據(jù)的 I/O 操作分解為多個 buffer_head 結(jié)構(gòu)體進行操作。?

所以后面為塊 I/O 操作引入了一種新型、靈活并輕量級的容器——bio 結(jié)構(gòu)體。

三、bio 結(jié)構(gòu)體

目前內(nèi)核中塊 I/O 操作的基本容器由 bio 結(jié)構(gòu)體表示,定義在 <linux/bio.h>。該結(jié)構(gòu)體代表了正在活動的以片段(segment)鏈表形式組織的塊 I/O 操作。一個片段是一小塊連續(xù)的內(nèi)存緩沖區(qū),而片段鏈表可以使一個緩沖區(qū)分散在內(nèi)存的多個位置上,bio 結(jié)構(gòu)體能對內(nèi)核保證 I/O 操作的執(zhí)行,像這樣的向量 I/O 就是所謂的聚散 I/O。

bio 結(jié)構(gòu)體定義于 <linux/bio.h> 中:

Linux內(nèi)核學(xué)習(xí)(十)—— 塊 I/O 層(基于Linux 2.6內(nèi)核),Linux內(nèi)核設(shè)計與實現(xiàn),linux,學(xué)習(xí),運維,unix

使用 bio 結(jié)構(gòu)體的目的主要是代表正在現(xiàn)場執(zhí)行的 I/O 操作,所以該結(jié)構(gòu)體中的主要域都是用來管理相關(guān)信息的:

Linux內(nèi)核學(xué)習(xí)(十)—— 塊 I/O 層(基于Linux 2.6內(nèi)核),Linux內(nèi)核設(shè)計與實現(xiàn),linux,學(xué)習(xí),運維,unix

bi_io_vec 域指向一個 bio_vec 結(jié)構(gòu)體數(shù)組,該結(jié)構(gòu)體鏈表包含了一個特定 I/O 操作所需要使用到的所有片段。每個 bio_vec 結(jié)構(gòu)都是一個形式為 <page, offset, len> 的向量,它描述的是一個特定的片段:片段所在的物理頁、塊在物理頁中的偏移位置、塊長度。

Linux內(nèi)核學(xué)習(xí)(十)—— 塊 I/O 層(基于Linux 2.6內(nèi)核),Linux內(nèi)核設(shè)計與實現(xiàn),linux,學(xué)習(xí),運維,unix

總之,每一個塊 I/O 請求都通過一個 bio 結(jié)構(gòu)體表示,每個請求包含一個或多個塊,這些塊存儲在 bio_vec 結(jié)構(gòu)體數(shù)組中,bio_vec 結(jié)構(gòu)體描述了每個片段在物理頁中的實際位置,并且像向量一樣被組織在一起。

bio 結(jié)構(gòu)體代表的是 I/O 操作,它包含內(nèi)存中的一個或多個頁;而 buffer_head 結(jié)構(gòu)體代表的是一個緩沖區(qū),它描述的僅僅是磁盤中的一個塊。

四、請求隊列

塊設(shè)備將它們掛起的塊 I/O 請求保存在請求隊列中,該隊列由 request_queue 結(jié)構(gòu)體表示,定義在文件 <linux/blkdev.h> 中,包含一個雙向請求鏈表以及相關(guān)控制信息。

隊列中的請求由結(jié)構(gòu)體 request 表示,一個請求可能要操作多個連續(xù)的磁盤塊,所以每個請求可以由多個 bio 結(jié)構(gòu)體組成。

五、I/O 調(diào)度程序

磁盤尋址是整個計算機中最慢的操作之一,為了縮短尋址時間,Linux 引入了 I/O 調(diào)度程序。

I/O 調(diào)度程序?qū)⒋疟P I/O 資源分配給系統(tǒng)中所有掛起的塊 I/O 請求。I/O 調(diào)度程序通過兩種方法減少磁盤尋址時間:合并與排序。

  • 合并指將兩個或多個請求結(jié)合成一個新請求,即如果兩個請求訪問的磁盤扇區(qū)相鄰,那么可以把兩個請求合并為一個請求,這樣可以將 I/O 多次請求的開銷壓縮成一次請求的開銷。
  • 排序指將整個請求隊列按扇區(qū)增長方向有序排列,通過保持磁盤頭以直線方向移動,從而縮短所有請求的磁盤尋址時間。這種 I/O 調(diào)度程序也被稱為電梯調(diào)度。

Linux 實際使用的 I/O 調(diào)度程序有如下幾種:文章來源地址http://www.zghlxwxcb.cn/news/detail-678154.html

  • Linux 電梯
  • 最終期限 I/O 調(diào)度程序
  • 預(yù)測 I/O 調(diào)度程序
  • 完全公正的排隊 I/O 調(diào)度程序
  • 空操作的 I/O 調(diào)度程序

到了這里,關(guān)于Linux內(nèi)核學(xué)習(xí)(十)—— 塊 I/O 層(基于Linux 2.6內(nèi)核)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Linux--2.6內(nèi)核調(diào)度和環(huán)境變量

    Linux--2.6內(nèi)核調(diào)度和環(huán)境變量

    ??北塵_ :個人主頁 ??個人專欄 :《Linux操作系統(tǒng)》《經(jīng)典算法試題 》《C++》 《數(shù)據(jù)結(jié)構(gòu)與算法》 ??走在路上,不忘來時的初心 上圖是Linux2.6內(nèi)核中進程隊列的數(shù)據(jù)結(jié)構(gòu),之間關(guān)系也已經(jīng)給大家畫出來,方便大家理解 如果有多個CPU就要考慮進程個數(shù)的負載均衡問題 普通

    2024年02月05日
    瀏覽(22)
  • 《Linux 內(nèi)核設(shè)計與實現(xiàn)》10. 內(nèi)核同步方法

    《Linux 內(nèi)核設(shè)計與實現(xiàn)》10. 內(nèi)核同步方法

    原子操作:可以保證指令以原子的方式執(zhí)行,即執(zhí)行過程不被打斷。 原子整數(shù)操作 整數(shù)的原子操作只針對 atomic_t 類型。因為: 讓原子函數(shù)只接收 atomic_t 類型的操作數(shù),可以確保原子操作只與這種特殊類型數(shù)據(jù)一起使用。同時這也保證了該類型的數(shù)據(jù)不會被傳遞給任何非原

    2024年02月04日
    瀏覽(22)
  • Linux內(nèi)核源碼分析 (B.4) 深度剖析 Linux 伙伴系統(tǒng)的設(shè)計與實現(xiàn)

    Linux內(nèi)核源碼分析 (B.4) 深度剖析 Linux 伙伴系統(tǒng)的設(shè)計與實現(xiàn)

    Linux內(nèi)核源碼分析 (B.4) 深度剖析 Linux 伙伴系統(tǒng)的設(shè)計與實現(xiàn) 在上篇文章 《深入理解 Linux 物理內(nèi)存分配全鏈路實現(xiàn)》 中,筆者為大家詳細介紹了 Linux 內(nèi)存分配在內(nèi)核中的整個鏈路實現(xiàn): image.png 但是當內(nèi)核執(zhí)行到 get_page_from_freelist 函數(shù),準備進入伙伴系統(tǒng)執(zhí)行具體內(nèi)存分配

    2024年02月07日
    瀏覽(24)
  • Linux技術(shù)內(nèi)核:數(shù)字化時代企業(yè)運維的終極武器

    Linux技術(shù)內(nèi)核:數(shù)字化時代企業(yè)運維的終極武器

    在當今企業(yè)的IT運維領(lǐng)域,Linux操作系統(tǒng)因其開源性、高穩(wěn)定性和強大的定制能力而成為眾多企業(yè)的首選。Linux技術(shù)內(nèi)核作為系統(tǒng)的核心,對于保障企業(yè)運維的穩(wěn)定性、安全性以及提升效率起著至關(guān)重要的作用。接下來,本文將深入探討Linux技術(shù)內(nèi)核在企業(yè)運維中的應(yīng)用及其帶

    2024年03月18日
    瀏覽(30)
  • 【小吉送書—第三期】Linux私教課:技術(shù)內(nèi)核與企業(yè)運維篇

    【小吉送書—第三期】Linux私教課:技術(shù)內(nèi)核與企業(yè)運維篇

    find [搜索范圍] [選項] ??按文件名 根據(jù)名稱查找/home目錄下的hello.txt文件 ??按擁有者 查找/opt目錄下,用戶名稱為nobody的文件 ??查找Linux系統(tǒng)下大于200M的文件 (+n 大于,-n 小于,n 等于) 查找整個Linux系統(tǒng)下大于200M的文件(M是大寫) (因為是整個Linux系統(tǒng),所以find后面是

    2024年02月08日
    瀏覽(45)
  • 【送書福利-第十八期】《Linux私教課:技術(shù)內(nèi)核與企業(yè)運維篇》

    【送書福利-第十八期】《Linux私教課:技術(shù)內(nèi)核與企業(yè)運維篇》

    ?? 作者介紹:我是程序員洲洲,一個熱愛寫作的非著名程序員。CSDN全棧優(yōu)質(zhì)領(lǐng)域創(chuàng)作者、華為云博客社區(qū)云享專家、阿里云博客社區(qū)專家博主、前后端開發(fā)、人工智能研究生。公粽號:程序員洲洲。 ?? 本文專欄:本文收錄于洲洲的《送書福利》系列專欄,該專欄福利多多

    2024年02月07日
    瀏覽(22)
  • Linux內(nèi)核源碼分析 1:Linux內(nèi)核體系架構(gòu)和學(xué)習(xí)路線

    Linux內(nèi)核源碼分析 1:Linux內(nèi)核體系架構(gòu)和學(xué)習(xí)路線

    好久沒有動筆寫文章了,這段時間經(jīng)歷了蠻多事情的。這段時間自己寫了一兩個基于不同指令集的 Linux 內(nèi)核, x86 和 RISC-V 。期間也去做了一些嵌入式相關(guān)的工作,研究了一下 ARM 指令集架構(gòu)。 雖然今年九月份我就要申請了,具體申請 AI 方向還是機器人、嵌入式、操作系統(tǒng)、

    2024年02月07日
    瀏覽(28)
  • Linux 內(nèi)核概念和學(xué)習(xí)詳解

    Linux 內(nèi)核概念和學(xué)習(xí)詳解

    ? ? 本文主要講解什么是Linux內(nèi)核,以及通過多張圖片展示Linux內(nèi)核的作用與功能,以便于讀者能快速理解什么是Linux內(nèi)核,能看懂Linux內(nèi)核。 擁有超過1300萬行的代碼,Linux內(nèi)核是世界上最大的開源項目之一,但是內(nèi)核是什么,它用于什么? ? ? 內(nèi)核是與計算機硬件接口的易替

    2024年02月16日
    瀏覽(19)
  • linux內(nèi)核網(wǎng)絡(luò)源碼學(xué)習(xí)(二)

    skb_reserve 函數(shù)通常用于網(wǎng)絡(luò)編程中的數(shù)據(jù)包處理,特別是在構(gòu)建自定義協(xié)議?;驍?shù)據(jù)包處理模塊時。它的作用是為數(shù)據(jù)包的頭部預(yù)留額外的空間,以確保數(shù)據(jù)包的頭部數(shù)據(jù)在內(nèi)存中是對齊的。 邊界對齊的概念是因為許多硬件平臺和網(wǎng)絡(luò)協(xié)議要求數(shù)據(jù)包頭的字節(jié)對齊。如果數(shù)據(jù)

    2024年02月08日
    瀏覽(22)
  • Linux內(nèi)核應(yīng)該怎么去學(xué)習(xí)?

    Linux內(nèi)核應(yīng)該怎么去學(xué)習(xí)?

    通過閱讀源碼來學(xué)習(xí)操作系統(tǒng)要注意區(qū)分共性與平臺特性。 1. 中斷響應(yīng)是共性,8259 中斷控制器和 IDT 是 x86 的特性。 2. 虛擬內(nèi)存管理是共性,x86 的 GDT 和 LDT 是特性,而且現(xiàn)在的系統(tǒng)也只是走個過場而已。 3. 任務(wù)調(diào)度與上下文切換是共性,x86 的 TSS 是特性,而且現(xiàn)在的系統(tǒng)

    2024年02月13日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包