【Linux 内核】Linux 内核体系架构 ( 硬件层面 | 内核空间 | 用户空间 | 内核态与用户态切换 | 系统调用 | 体系结构抽象层 )
文章目錄
- 一、Linux 內核體系架構
- 二、內核態與用戶態切換 ( 系統調用層 )
- 三、體系結構抽象層
一、Linux 內核體系架構
Linux 內核最初的源碼不足一萬行 , 當前的 Linux 內核源碼已經有兩千萬行 ;
內核整體的項目很大 , 不可能全部掌握 , 學習時從整體的 體系架構出發 , 分析其中的重要模塊 , 然后將模塊聯系起來學習 ;
Linux 內核體系架構可以按照下圖 , 分為三個層次 :
- 硬件層面 : 包括 CPU , 物理內存 , 磁盤 , 外部設備 等硬件 ;
- 內核空間 : 這就是 Linux 內核的核心 , 如 : Arch 抽象層 , 設備管理抽象層 , 內存管理 , 中斷管理 , 進程調度 , 文件系統管理 , USB / PCI 總線設備 , 設備驅動 ( 字符設備 / 網絡設備 / 塊設備 / KVM ) , 系統調用層 ;
- 用戶空間 : C 語言庫 , 應用程序進程 , 虛擬機 等 ;
二、內核態與用戶態切換 ( 系統調用層 )
Linux 內核 實現 內核態 和 用戶態 , 使用到了 ring0 和 ring3 兩種模式 ,
- ring0 是 內核態 ,
- ring3 是 用戶態 ;
軟件抽象層作用 : Linux 內核中 , 使用 軟件抽象層 在 內核態 ( ring0 ) 和 用戶態 ( ring3 ) 之間進行切換 ;
軟件抽象層 又稱為 系統調用層 ( System Call ) ;
每種處理器體系結構 都提供了 實現 用戶態 與 內核態 之間切換的 特殊指令 ,
Linux 內核也利用了該特殊指令 , 進行了用戶態 與 內核態 的切換 , 該指令在 系統調用層 調用 ,
系統調用層 可以 使 真實硬件信息 對 用戶進程透明 ,
用戶進程讀取文件內容時 , 只需要使用 open / read / mmap 函數 , 打開一個路徑上的文件即可 , 具體該文件在磁盤上的哪個扇區 , 具體的物理地址是多少 , 用戶進程并不關心 ,
用戶進程 , 大多數時間在 用戶態 運行 , 當需要向內核請求相關設備時 , 只需要 調用系統提供的 系統調用 接口 , 即可訪問內核 ;
三、體系結構抽象層
Linux 內核 支持多種體系結構 ,
-
Linux 系統可以運行在 arm 架構的處理器設備 上 , 如 Android ;
-
也可以運行在 x86 架構的處理器 上運行 , 如 PC 機 , 服務器等 ;
實際上 Linux 內核支持很多體系結構 , 為 Linux 內核添加一個新的體系結構很簡單 , 體系結構抽象層 用于 將 不同的體系結構 進行 抽象 與 隔離 , 為不同的體系結構 , 提供了統一的接口 ;
如 : Linux 內核中 , 將與體系結構相關的代碼 , 都放在 arch 目錄下的不同的體系結構對應的目錄中 , 如下圖所示 :
總結
以上是生活随笔為你收集整理的【Linux 内核】Linux 内核体系架构 ( 硬件层面 | 内核空间 | 用户空间 | 内核态与用户态切换 | 系统调用 | 体系结构抽象层 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android Gradle 插件】P
- 下一篇: 【Linux 内核】Linux 内核体系