深入理解linux內核--塊設備驅動程序

塊設備的處理

塊設備驅動程序上的每個操作都涉及很多內核組件;其中最重要的一些如圖14-1所示。
例如,我們假設一個進程在某個磁盤文件上發出一個read()系統調用
——我們將會看到處理write請求本質上采用同樣的方式。
下面是內核對進程請求給予回應的一般步驟:

在這里插入圖片描述

1.  read()系統調用的服務例程調用一個適當的VFS函數,將文件描述符和文件內的偏移量傳遞給它。
虛擬文件系統位于塊設備處理體系結構的上層,它提供一個通用的文件模型,Linux支持的所有文件系統均采用該模型。
我們在第十二章已經詳細介紹了VFS層。
2.  VFS函數確定所請求的數據是否已經存在,如果有必要的話,它決定如何執行read操作。
有時候沒有必要訪問磁盤上的數據,因為內核將大多數最近從塊設備讀出或寫入其中的數據保存在RAM中。第十五章介紹了磁盤高速緩存機制,
而第十六章詳細說明了VFS如何處理磁盤操作以及如何與磁盤高速緩存和文件系統交互。
3.  我們假設內核從塊設備讀數據,那么它就必須確定數據的物理位置。為了做到這點,內核依賴映射層(mapping layer),主要執行下面兩步:
a.內核確定該文件所在文件系統的塊大小,并根據文件塊的大小計算所請求數據的長度。
本質上,文件被看作拆分成許多塊,因此內核確定請求數據所在的塊號(文件開始位置的相對索引)。
b.接下來,映射層調用一個具體文件系統的函數,它訪問文件的磁盤節點,然后根據邏輯塊號確定所請求數據在磁盤上的位置。
事實上,磁盤也被看作拆分成許多塊,因此內核必須確定存放所請求數據的塊對應的號(磁盤或分區開始位置的相對索引)。
由于一個文件可能存儲在磁盤上的不連續塊中,因此存放在磁盤索引節點中的數據結構將每個文件塊號映射為一個邏輯塊號(注1)。
我們將在第十六章中說明映射層的功能,在第十八章中將介紹一些典型的磁盤文件系統。
4.  現在內核可以對塊設備發出讀請求。內核利用通用塊層(generic block Inyer)啟動I/O操作來傳送所請求的數據。
一般而言,每個I/O操作只針對磁盤上一組連續的塊。
由于請求的數據不必位于相鄰的塊中,所以通用塊層可能啟動幾次I/O操作。
每次I/O操作是由一個“塊I/O”(簡稱“bio”)結構描述,它收集底層組件需要的所有信息以滿足所發出的請求。
通用塊層為所有的塊設備提供了一個抽象視圖,因而隱藏了硬件塊設備間的差異性。
幾乎所有的塊設備都是磁盤,所以通用塊層也提供了一些通用數據結構來描述“磁盤”或“磁盤分區”。
我們將在本章的“通用塊層”一節中討論通用塊層和bio數據結構。
5.  通用塊層下面的“I/O調度程序”根據預先定義的內核策略將待處理的I/O數據傳送請求進行歸類。
調度程序的作用是把物理介質上相鄰的數據請求聚集在一起。我們將在本章后面的“I/O調度程序”一節中介紹調度程序。
6.  最后,塊設備驅動程序向磁盤控制器的硬件接口發送適當的命令,從而進行實際的數據傳送。
我們將在后面的“塊設備驅動程序”一節介紹通用塊設備驅動程序的總體組織結構。
如你所見,塊設備中的數據存儲涉及了許多內核組件;每個組件采用不同長度的塊來管理磁盤數據:
6.1.硬件塊設備控制器采用稱為“扇區”的固定長度的塊來傳送數據。因此,I/O調度程序和塊設備驅動程序必須管理數據扇區。
6.2.虛擬文件系統、映射層和文件系統將磁盤數據存放在稱為“塊”的邏輯單元中。
6.3.一個塊對應文件系統中一個最小的磁盤存儲單元。
我們很快會看到,塊設備驅動程序應該能夠處理數據的“段”:
一個段就是一個內存頁或內存頁的一部分,它們包含磁盤上物理相鄰的數據塊。
5.4.磁盤高速緩存作用于磁盤數據的“頁”上,每頁正好裝在一個頁框中。
通用塊層將所有的上層和下層的組件組合在一起,因此它了解數據的扇區、塊、段以及頁。
即使有許多不同的數據塊,它們通常也是共享相同的物理RAM單元。
例如,圖14-2顯示了一個具有4096字節的頁的構造。
上層內核組件將頁看成是由4個1024字節組成的塊緩沖區。
塊設備驅動程序正在傳送頁中的后3個塊,因此這3塊被插入到涵蓋了后3072 字節的段中。
硬盤控制器將該段看成是由6個512字節的扇區組成。

在這里插入圖片描述

本章我們介紹處理塊設備的下層內核組件:通用塊層、I/O調度程序以及塊設備驅動程序,因此我們將注意力集中在扇區、塊和段上。

扇區

為了達到可接受的性能,硬盤和類似的設備快速傳送幾個相鄰字節的數據。
塊設備的每次數據傳送操作都作用于一組稱為扇區的相鄰字節。
在下面的討論中,我們假定字節按相鄰的方式記錄在磁盤表面,這樣一次搜索操作就可以訪問到它們。
盡管磁盤的物理構造很復雜,但是硬盤控制器接收到的命令將磁盤看成一大組扇區。
在大部分磁盤設備中,扇區的大小是512字節,但是一些設備使用更大的扇區(1024和2048字節)。
注意,應該把扇區作為數據傳送的基本單元;不允許傳送少于一個扇區的數據,盡管大部分磁盤設備都可以同時傳送幾個相鄰的扇區。
在Linux中,扇區大小按慣例都設為512字節;
如果一個塊設備使用更大的扇區,那么相應的底層塊設備驅動程序將做些必要的變換。
因此,對存放在塊設備中的一組數據是通過它們在磁盤上的位置來標識,
即其首個512字節扇區的下標以及扇區的數目。
扇區的下標存放在類型為sector_c的32位或64位的變量中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41416.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41416.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41416.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

煤礦調度IP語音對講廣播模塊一鍵求助對講礦用調度通信系統SIP語音對講求助終端

硬件接口描述 SV-2101VP/ SV-2103VP系列網絡音頻模塊,所有外部連接采用端子,電源采用2.0mm的端子,網絡采用標準RJ45連接器,其他都是1.25mm的連接器。 端口類型定義 P ———— 電源 AI ———— 模擬輸入(在這里是音…

微信小程序前后端開發快速入門(完結篇)

這篇是微信小程序前后端快速入門完結篇了,今天利用之前學習過的所有知識做一個新的項目「群登記助手v1.0」小程序。 整體技術架構:小程序原生前端小程序云開發。 經歷了前面教程的學習,大家有了一定的基礎,所以本次分享重心主要是…

Ubuntu服務器service版本初始化

下載 下載路徑 官網:https://cn.ubuntu.com/ 下載路徑:https://cn.ubuntu.com/download 服務器:https://cn.ubuntu.com/download/server/step1 點擊下載(22.04.3):https://cn.ubuntu.com/download/server…

【Python百日進階-Web開發-Peewee】Day271 - Peewee API文檔 - 字段(二)

文章目錄 11.3.17 class UUIDField11.3.18 class BinaryUUIDField11.3.19 class DateTimeField11.3.20 class DateField11.3.21 class TimeField11.3.22 class TimestampField11.3.23 class IPField11.3.24 class BooleanField11.3.25 class BareField11.3.26 class ForeignKey…

神經網絡基礎-神經網絡補充概念-06-計算圖

概念 “計算圖”(Computational Graph)是一種用于表示數學表達式計算過程的圖結構,廣泛用于深度學習和自動微分等領域。計算圖將復雜的數學表達式分解為一系列簡單的計算節點,這些節點之間通過邊連接,形成了一個有向無…

【jwt】JWT原理,JWT是用來解決什么問題的,如何自定義生成JWT數據,并且實現jwt數據的解碼

JWT: JSON Web Token 1. jwt概述 用戶登錄成功后,服務端 如何知道客戶端的每次請求對應的是哪個用戶呢?怎么做:目前有兩種方式實現. 1.1. 一是通過sessionId的方式,登錄成功后服務端返回sessionId給客戶端&#xff0…

【2023年11月第四版教材】《第5章-信息系統工程之數據工程(第三部分)》

《第5章-信息系統工程之數據工程(第三部分)》 2 數據工程2.1 數據建模2.2 數據標準化2.3 數據運維2.4 數據開發利用2.5 數據庫安全 2 數據工程 2.1 數據建模 1、根據模型應用目的不同,可以將數據模型劃分為三類:概念模型、邏輯模型和物理模…

【數據結構】棧與隊列

1 棧 1.1 棧的概念及結構 棧:一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的數據元素遵守后進先出 LIFO (Last In First Out) 的原則。 壓棧:棧…

力扣75——圖廣度優先搜索

總結leetcode75中的圖廣度優先搜索算法題解題思路。 上一篇:力扣75——圖深度優先搜索 力扣75——圖廣度優先搜索 1 迷宮中離入口最近的出口2 腐爛的橘子1-2 解題總結 1 迷宮中離入口最近的出口 題目: 給你一個 m x n 的迷宮矩陣 maze (下標…

Kafka中的 ISR 機制

ISR 是什么 ISR 的全稱叫做: In-Sync Replicas (同步副本集), 可以理解為和 leader 保持同步的所有副本的集合。ISR 動態維護了一個和 leader 副本保持同步副本集合,ISR 中的副本全部都和 leader 的數據保持同步。 設一個場景&a…

JupyterHub實戰應用

一、JupyerHub jupyter notebook 是一個非常有用的工具,我們可以在瀏覽器中任意編輯調試我們的python代碼,并且支持markdown 語法,可以說是科研利器。但是這種情況適合個人使用,也就是jupyter notebook以我們自己的主機作為服務器…

PostgreSQL邏輯備份pg_dump使用及其原理解析

一、原理分析 1、循環調用getopt_long解析命令行參數,將參數保存到static DumpOptions dopt;中 2、判斷參數是否相容,不相容則退出: options -s/--schema-only and -a/--data-only cannot be used togetheroptions -c/--clean and -a/--data…

uni-app中監聽網絡狀態,并在嵌入webView頁面的組件中添加網絡監測

uni-app中監聽網絡狀態,并在嵌入webView頁面的組件中添加網絡監測 uni-app中監聽網絡狀態 下載插件 打開網絡異常組件頁面,點擊"下載插件并導入HBuilderX"按鈕,打開HBuilderX軟件后,選擇需要導入插件的項目&#xff…

機器學習與模型識別1:SVM(支持向量機)

一、簡介 SVM是一種二類分類模型,在特征空間中尋找間隔最大的分離超平面,使得數據得到高效的二分類。 二、SVM損失函數 SVM 的三種損失函數衡量模型的性能。 1. 0-1 損失: 當正例樣本落在 y0 下方則損失為 0,否則損失為…

系統架構設計師-信息安全技術(1)

目錄 一、信息安全基礎 1、信息安全五要素 2、網絡安全漏洞 3、網絡安全威脅 4、安全措施的目標 二、信息加解密技術 1、對稱加密 2、非對稱加密 3、加密算法對比 三、密鑰管理技術 1、數字證書 2、PKI公鑰體系 四、訪問控制技術 1、訪問控制基本模型 2、訪問控制的實現技術…

【Linux命令詳解 | ssh命令】 ssh命令用于遠程登錄到其他計算機,實現安全的遠程管理

文章標題 簡介一,參數列表二,使用介紹1. 連接遠程服務器2. 使用SSH密鑰登錄2.1 生成密鑰對2.2 將公鑰復制到遠程服務器 3. 端口轉發3.1 本地端口轉發3.2 遠程端口轉發 4. X11轉發5. 文件傳輸與遠程命令執行5.1 文件傳輸5.1.1 從本地向遠程傳輸文件5.1.2 …

TensorFlow 的基本概念和使用場景

簡介 TensorFlow 是一個開源的人工智能框架,由 Google 公司開發,用于構建和訓練機器學習模型。 TensorFlow 的基本概念包括: 1. 張量 (Tensor): TensorFlow 中的基本數據結構,可以理解為多維數組。 2. 計算圖 (Graph): TensorF…

深度學習入門-3-計算機視覺-圖像分類

1.概述 圖像分類是根據圖像的語義信息對不同類別圖像進行區分,是計算機視覺的核心,是物體檢測、圖像分割、物體跟蹤、行為分析、人臉識別等其他高層次視覺任務的基礎。圖像分類在許多領域都有著廣泛的應用,如:安防領域的人臉識別…

軟考筆記——9.軟件工程

軟件工程的基本原理:用分階段的生命周期計劃嚴格管理、堅持進行階段評審、實現嚴格的產品控制、采用現代程序設計技術、結果應能清除的審查、開發小組的人員應少而精、承認不斷改進軟件工程事件的必要性。 軟件工程的基本要素:方法、工具、過程 軟件生…

babylonjs基于自定義網格生成圍欄動畫

效果: import { Vector3, Mesh, MeshBuilder, StandardMaterial, Texture, Animation, Color3 } from "babylonjs/core"; import imgUrl from "./image/headerwangge2.png" // 創建模型護欄特效 export default class CreateRail {constructor…