接下來我們來詳細的介紹一下linux檔案的io細節
廢話不多說 先來一張圖 看看
錯了 再來
一.要想 了解檔案io的具體細節我們就要先了解
什麼是使用者空間,什麼是核心空間,什麼是系統呼叫
我們來看看圖
1)核心空間 - 存放的是整個核心**和所有核心模組,以及核心所維護的資料。
2)使用者空間 - 使用者程式的**和資料。
3)系統呼叫 (一幅圖就行了)
我們在來文字敘述一下
系統呼叫可被看成乙個使用者空間於核心空間互動的乙個介面,好比乙個信使,把程序的請求傳給核心,待核心把請求得事情處理之後,在把結果返回給使用者空間。
先說好 這個 open是 glibc庫得函式 並不是系統呼叫。它是通過 軟體中斷來實現得系統呼叫然後把心痛呼叫得編號傳給核心,核心有乙個系統呼叫表,通過下標訪問 呼叫真正得系統呼叫(本質就是 使用者中斷核心空間,這裡得延申就是 linux得訊號機制,訊號是核心中斷使用者空間)。
4)這裡我們丟擲乙個問題:為什麼要設定系統呼叫
1)把使用者從底層的硬體程式設計中解放出來 與具體的硬體完全隔離,使用者不需要面向具體的硬體編碼,降低了開發的複雜性和難度。
2)極大的提高了系統的安全性 將使用者程序隔離實現核心「保護」,使用者程序不允許訪問核心資料,也無法使用核心函式。使用者訪問核心的路徑是事先規定好的,只能從規定位置進入核心,而不准許肆意跳入核心。
3)有了這樣的陷入核心的統一訪問路徑限制才能保證核心安全無誤。 使使用者程式具有可移植性 不同平台不同硬體。
弄清楚這個然後 我們在來下一步的介紹,上面說到了 系統呼叫是通過軟體中斷實現得,傳入乙個系統呼叫號給核心,那具體得過程是什麼樣子的呢?
1. 在程序的核心態堆疊中儲存大多數暫存器的內容(即儲存恢復程序到使用者態執行所需要的上下文)
2. 根據使用者態傳遞的系統呼叫號,確定系統呼叫的執行程式
3. 呼叫相應的執行程式來處理系統呼叫
4. 從系統呼叫返回
今天就介紹到這裡 接下來 還有很多非常有意思的文章
核心態與使用者態,系統呼叫
注 參考linux unix系統程式設計 程序通過系統呼叫syscall從使用者態進入核心態,即將控制權交由核心。為什麼要把控制權交給核心?答 核心nb 程序可以說是什麼都不知道 執行緒同理 不知道自己在ram的位置,不知道自己哪部分在記憶體哪部分在交換空間 pcb 記憶體排程 不知道要訪問的檔案在...
Linux預備知識(三) 系統呼叫 使用者態 核心態
void testfork printf testfork ok n 如果說前面兩種是靜態觀察的角度看的話,我們還可以從動態的角度來看這段 即它被轉換成cpu執行的指令後載入執行的過程,這時這段程式就是乙個動態執行的指令序列。而究竟載入了哪些 如何載入就是和作業系統密切相關了。熟悉unix linu...
linux核心態使用者態
概述 linux系統使用者態和核心態相關知識,linux核心版本為3.10.79。使用者態和核心態定義 核心態 cpu可以訪問記憶體所有資源,包括外圍裝置.可以進行處理器工作模式切換,程式的切換。使用者態 只能受限的訪問記憶體,且不允許訪問外圍裝置,不可以進行處理器模式切換。為什麼分使用者態和核心態...