1. 程式人生 > >Linux核心的5個子系統

Linux核心的5個子系統

    當用戶使用系統提供的庫函式進行程序程式設計,使用者可以動態地建立程序,程序之間還有等待,互斥等操作,這些操作都是由linux核心來實現的。linux核心通過程序管理子系統實現了程序有關的操作,在linux系統上,所有的計算工作都是通過程序表現的,程序可以是短期的(執行一個命令),也可以是長期的(一種網路服務)。linux系統是一種動態系統,通過程序管理能夠適應不斷變化的計算需求。
   在使用者空間,程序是由程序標示符(PID)表示的。從使用者角度看,一個PID是一個數字值,可以唯一標識一個程序,一個PID值在程序的整個生命週期中不會更改,但是PID可以在程序銷燬後被重新使用。建立程序可以使用幾種方式,可以建立一個新的程序,也可以建立當前程序的子程序。
在linux核心空間,每個程序都有一個獨立的資料結構,用來儲存該程序的ID、優先順序、地址的空間等資訊,這個結構也被稱做程序控制塊(Process Control Block)。所謂的程序管理就是對程序控制塊的管理。
   linux的程序是通過fork()函式系統呼叫產生的。呼叫fork()的程序叫做父程序,生成的程序叫做子程序。子程序被建立的時候,除了程序ID外,其它資料結構與父程序完全一致。在fork()系統呼叫建立記憶體之後,子程序馬上被加入核心的程序除錯佇列,然後使用exec()系統呼叫,把程式的程式碼加入到子程序的地址空間,之後子程序就開始執行自己的程式碼。
   在一個系統上可以有多個程序,但是一般情況下只有一個CPU,在同一個時刻只能有一個程序在工作,即使有多個CPU,也不可能和程序的數量一樣多。如果讓若干的程序都能在CPU上工作,這就是程序管理子系統的工作。linux核心設計了存放程序佇列的結構,在一個系統上會有若干佇列,分別存放不同狀態的程序。一個程序可以有若干狀態,具體是由作業系統來定義的,但是至少包含執行態、就緒態和等待3種狀態,核心設計了對應的佇列存放對應狀態的程序控制塊。
   當一個使用者程序被載入後,會進入就緒態,被加入到就緒態佇列,CPU時間被輪轉到就緒態佇列後,切換到程序的程式碼,程序被執行,當程序的時間片到了以後被換出。如果程序發生I/O操作也會被提前被換出,並且存放到等待佇列,當I/O請求返回後,程序又被放入就緒佇列。linux系統對程序佇列的管理設計了若干不同的方法,主要的目的是提高程序除錯的穩定性。