1. 程式人生 > 其它 >linux核心介紹

linux核心介紹

linux核心介紹

https://blog.csdn.net/u012489236/article/list/3?t=1

核心體系結構

https://www.cnblogs.com/luxiaodai/p/13379737.html

Linux核心主要由五個子系統組成:程序排程,記憶體管理,虛擬檔案系統,網路介面,程序間通訊。

  1. 程序排程(SCHED):控制程序對CPU的訪問。當需要選擇下一個程序執行時,由排程程式選擇最值得執行的程序。可執行程序實際上是僅等待CPU資源的程序,如果某個程序在等待其它資源,則該程序是不可執行程序。Linux使用了比較簡單的基於優先順序的程序排程演算法選擇新的程序。

  2. 記憶體管理(memory management,MM)允許多個程序安全的共享主記憶體區域。Linux 的記憶體管理支援虛擬記憶體,即在計算機中執行的程式,其程式碼,資料,堆疊的總量可以超過實際記憶體的大小,作業系統只是把當前使用的程式塊保留在記憶體中,其餘的程式塊則保留在磁碟中。必要時,作業系統負責在磁碟和記憶體間交換程式塊。記憶體管理從邏輯上分為硬體無關部分和硬體有關部分。硬體無關部分提供了程序的對映和邏輯記憶體的對換;硬體相關的部分為記憶體管理硬體提供了虛擬介面。

  3. 虛擬檔案系統(Virtual File System,VFS)隱藏了各種硬體的具體細節,為所有的裝置提供了統一的介面,VFS提供了多達數十種不同的檔案系統。虛擬檔案系統可以分為邏輯檔案系統和裝置驅動程式。邏輯檔案系統指Linux所支援的檔案系統,如ext2,fat等,裝置驅動程式指為每一種硬體控制器所編寫的裝置驅動程式模組。

  4. 網路介面(NET)提供了對各種網路標準的存取和各種網路硬體的支援。網路介面可分為網路協議和網路驅動程式。網路協議部分負責實現每一種可能的網路傳輸協議。網路裝置驅動程式負責與硬體裝置通訊,每一種可能的硬體裝置都有相應的裝置驅動程式。

  5. 程序間通訊(inter-process communication,IPC) 支援程序間各種通訊機制。

處於中心位置的程序排程,所有其它的子系統都依賴它,因為每個子系統都需要掛起或恢復程序。一般情況下,當一個程序等待硬體操作完成時,它被掛起;當操作真正完成時,程序被恢復執行。例如,當一個程序通過網路傳送一條訊息時,網路介面需要掛起傳送程序,直到硬體成功成功地完成訊息的傳送,當訊息被成功的傳送出去以後,網路介面給程序返回一個程式碼,表示操作的成功或失敗。其他子系統以相似的理由依賴於程序排程。

各個子系統之間的依賴關係如下:

程序排程與記憶體管理之間的關係:這兩個子系統互相依賴。在多道程式環境下,程式要執行必須為之建立程序,而建立程序的第一件事情,就是將程式和資料裝入記憶體。

程序間通訊與記憶體管理的關係:程序間通訊子系統要依賴記憶體管理支援共享記憶體通訊機制,這種機制允許兩個程序除了擁有自己的私有空間,還可以存取共同的記憶體區域。

虛擬檔案系統與網路介面之間的關係:虛擬檔案系統利用網路介面支援網路檔案系統(NFS),也利用記憶體管理支援RAMDISK裝置。

記憶體管理與虛擬檔案系統之間的關係:記憶體管理利用虛擬檔案系統支援交換,交換程序(swapd)定期由排程程式排程,這也是記憶體管理依賴於程序排程的唯一原因。當一個程序存取的記憶體對映被換出時,記憶體管理向檔案系統發出請求,同時,掛起當前正在執行的程序。

除了這些依賴關係外,核心中的所有子系統還要依賴於一些共同的資源。這些資源包括所有子系統都用到的過程。例如:分配和釋放記憶體空間的過程,列印警告或錯誤資訊的過程,還有系統的除錯例程等等。

linux中斷機制

  1. 硬體的中斷響應 ---> 核心驅動中的中斷
  2. 系統呼叫的函式響應(sys_call) ---> 系統呼叫
  3. 自定義中斷 ---> 軟體的中斷模式
  4. 訊號中斷 ---> 對了解訊號的使用、建立等
  5. 系統的異常和錯誤 ---> 系統的異常獲取,瞭解系統異常的作用

linux中斷機制

https://blog.csdn.net/xiaoshengqdlg/article/details/39296937

硬中斷

由與系統相連的外設(比如網絡卡、硬碟)自動產生的。主要是用來通知作業系統系統外設狀態的變化。比如當網絡卡收到資料包 的時候,就會發出一箇中斷。我們通常所說的中斷指的是硬中斷(hardirq);硬中斷的本質是接收到中斷訊號後,跳轉到公共段程式碼執行do_IRQ,並切換到硬中斷請求棧,執行中斷回撥函式。

軟中斷

為了滿足實時系統的要求,中斷處理應該是越快越好。linux為了實現這個特點,當中斷髮生的時候,硬中斷處理那些短時間

  1. 軟中斷通過open_softirq註冊一個軟中斷處理函式,即在軟中斷向量表softirq_vec陣列中新增新的軟中斷處理action函式。

  2. 呼叫raised_softirq軟中斷觸發函式,即把軟中斷標記為掛起狀態。核心會在一些位置檢查是否有掛起狀態的軟中斷,如果有的話會呼叫do_softirq函式來執行軟中斷處理函式。

  3. do_softirq函式做的一個重要的工作是切換到軟中斷請求棧。切換到軟中斷請求棧就代表了此時已經處於了軟中斷上下文中了。

  • 切換到軟中斷請求棧
  • 呼叫__do_softirq函式
  1. __do_softirq函式
  • 開始執行軟中斷處理函式

  • 如果還有更多掛起的軟中斷沒有處理,則呼叫wakeup_softirq函式喚醒核心執行緒來處理本地CPU的軟中斷。該執行緒會迴圈呼叫do_softirq函式而不是在核心那些檢查軟中斷是否掛起的位置進行檢查,節省了時間。

中斷處理流程

https://www.cnblogs.com/embedded-linux/p/5888843.html

  1. 將所有的暫存器入棧:SS EFLAGS ESP CS EIP (8086) <---> R0 - R15 (ARM)
  2. 將異常碼(中斷號)入棧
  3. 將當前的函式返回值入棧(為了在中斷執行後能夠找到在哪裡中斷的,能夠返回原先函式執行的位置)
  4. 呼叫對應的中斷服務函式
  5. 出棧函式返回值
  6. 出棧所有的入棧的暫存器 (中斷號丟棄了)
中斷前的處理過程和中斷後的回覆過程 中斷的執行過程
硬體中斷的處理過程 system_call.s trap.c
軟體及系統呼叫的處理過程 system_call.s fork.c/signal.c/exit.c/sys.c
中斷的程式碼實現
  1. 硬體中斷

    system_call.s解讀:https://blog.csdn.net/weixin_32512187/article/details/116818186

核心原始碼結構

核心載入程式