大部分程式設計師可能會有這樣的疑問:當在程式中呼叫庫函式 read 時,這個請求是經過哪些
處理最終到達磁碟的呢,資料又是怎麼被拷貝到使用者快取區的呢?本文介紹了從 read 系統呼叫發出到結束處理的全過程。該過程包括兩個部分:使用者空間的處理、核心空間的處理。使用者空間處理部分是系統呼叫從使用者態切到核心態的過程。核心空間處理部分則是 read 系統呼叫在 linux 核心中處理的整個過程。
系統呼叫在使用者空間中的處理過程
read 系統呼叫也不例外,當呼叫發生時,庫函式在儲存 read 系統呼叫號以及引數後,陷入 0x80 中斷。這時庫函式工作結束。read 系統呼叫在使用者空間中的處理也就完成了。
系統呼叫在核心空間中的處理過程
0x80 中斷處理程式接管執行後,先檢察其系統呼叫號,然後根據系統呼叫號查詢系統呼叫表,並從系統呼叫表中得到處理 read 系統呼叫的核心函式 sys_read ,最後傳遞引數並執行 sys_read 函式。至此,核心真正開始處理 read 系統呼叫(sys_read 是 read 系統呼叫的核心入口)。
在講解 read 系統呼叫在核心空間中的處理部分中,首先介紹了核心處理磁碟請求的層次模型,然後再按該層次模型從上到下的順序依次介紹磁碟讀請求在各層的處理過程。
系統呼叫在核心空間中處理的層次模型
:對於磁碟的一次讀請求,首先經過虛擬檔案系統層(vfs layer),其次是具體的檔案系統層(例如 ext2),接下來是 cache 層(page cache 層)、通用塊層(generic block layer)、io 排程層(i/o scheduler layer)、塊裝置驅動層(block device driver layer),最後是物理塊裝置層(block device layer)
linux read命令詳解
read命令從鍵盤讀取變數的值,通常用在shell指令碼中與使用者進行互動的場合。該命令可以一次讀取多個變數的值,變數和輸入的值都需要使用空格隔開。語法 read 選項 引數 選項 p 指定讀取值時的提示符 t 指定讀取值時等待的時間 秒 引數 變數 指定讀取值的變數名。例項 使用read命令從鍵盤...
linux read命令詳解
read命令從鍵盤讀取變數的值,通常用在shell指令碼中與使用者進行互動的場合。該命令可以一次讀取多個變數的值,變數和輸入的值都需要使用空格隔開。語法 read 選項 引數 選項 p 指定讀取值時的提示符 t 指定讀取值時等待的時間 秒 引數 變數 指定讀取值的變數名。例項 使用read命令從鍵盤...
呼叫方法說明
呼叫帶引數的方法的時候 引數的型別要一致 引數的個數一致 順序一致 與引數的名字無關 定義在方法中的變數就叫區域性變數.方法的引數是這個方法的1個區域性變數 區域性變數使用之前必須賦值.為什麼呼叫帶引數的方法的時候 必須要給引數賦值 區域性變數使用之前必須賦值.方法的引數如果有預設值 在呼叫這個方法...