linux核心系列之程式管理(轉)

BSDLite發表於2007-08-16
linux核心系列之程式管理(轉)[@more@]  程式概念:程式執行起來稱之為程式。程式使用task_struct來表示自身資訊。pid,各種連結串列,狀態,核心棧SP,地址空間分配、檔案描述符、及其他各種資源分配情況、時間片、程式統計資訊等。

  核心態和使用者態:保護模式下,程式執行狀態分為使用者態和核心態。程式的地址空間一共有4G(32bitsOS),最高的1G為各程式共享的核心資料對映。使用者態程式只能訪問使用者地址空間資料(小於3G),核心態程式可以訪問所有地址空間。程式使用段頁管理虛擬記憶體,GDT中對應核心段的基址(0)與使用者段的基址(3G)不同。根據段描述符(CS,DS)的值判斷該程式是核心態或使用者態程式。使用者態程式只能訪問程式自己的地址空間,使用使用者態堆疊;核心態程式可以訪問核心堆疊(與task_struct在同一物理頁),同時也可以訪問使用者態堆疊。

  程式狀態的切換:從使用者態到核心態的轉換稱為切換。引起的原因有系統呼叫和中斷。系統呼叫戶中斷產生時,頁表切換為新程式的頁表,CS/SP切換為核心態段選擇符,IP切換為系統呼叫的目標地址,透過iRet指令切換。

  程式切換:根據排程演算法,當從中斷或系統呼叫返回時,如果程式的時間片用盡,會發生程式切換。新選中的程式佔領CPU,CS,mm和SS棧更換為新程式的環境。需要說明,在核心態執行的程式不能被切換出去,進城切換的時機只能是當前程式從核心態轉到使用者態的時候(例如中斷和系統呼叫)

  訊號:signal的資訊儲存在task_struct中,傳送訊號(kill)會更新目標程式的task_struct,但是隻有在從核心態返回使用者態時,才對程式的訊號佇列進行檢查並進行處理。

  程式關係:根據父子關係,程式狀態等程式排入到各種連結串列中。0號程式是init程式,是所有孤兒程式的父程式

  程式間通訊:訊號-直接修改task_struct;檔案對映-線性地址對映同樣的物理頁面;pipe:管道檔案系統,透過檔案系統API進入核心;系統V共享記憶體,訊號燈,訊息佇列:核心資料結構

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-961960/,如需轉載,請註明出處,否則將追究法律責任。

相關文章