核心開發文檔一 概述 此實驗核心採用微核心方式,核心做最小化處理,進程間協同工作靠IPC完成.核心僅僅進行訊息的傳遞和部分必要的硬體維護,如中斷,分頁. 整個核心是一個Kernel結構.核心任務就是對這個結構進行維護.其餘模組都才有微核心經典設計,交由使用者進程來維護.該實驗進程不對進程進行區分,所有進程同等對待,沒有服務進程,客戶進程之分.進程之間的區別只有許可權區別,優先順序區別.IPC使用類IP協議方式傳遞訊息.IPC是一套協議,而非實現機制.二 核心簡要工作過程 核心不自己實現引導過程,而是遵循多重開機協議,有第三方引導程式來載入核心.使核心開發過程簡化,得到一個統一的運行環境. 首先,多重開機程式載入核心運行環境設定模組,setup和env到記憶體3MB處,setup是組譯工具,負責必須的硬體初始化工作,設定GDT,臨時棧,初始化8259A.然後調用env模組,env模組之後經由C語言完成,env模組負責完成setup未完成的任務,給核心提供一個統一的運行環境.該統一的環境是,一個線性記憶體空間,預設的中斷處理常式.env完成環境初始化工作後調用核心main,核心正式開始運行.main得到控制權,對起Kernel結構進行初始化,設定die進程,然後人工初始化進程管理器pm,記憶體管理器mm.核心工作完成. 環境模組setup,env,核心主模組main,進程管理器pm,記憶體管理器mm為了編程方便,和核心對他們的依賴性,被編譯在同一可執行檔vmgmL中.三 核心資料結構Kernel Kernel在include/kernel.h中定義.其結構如下 typdef struct kernel{ Proc ready; //就緒進程隊列,可以被調度 Proc block; //阻塞進程隊列,缺乏資源而被阻塞不能被調度 }Kernel; Proc在include/proc.h中定義,其結構如下 typedef struct proc *Proc; struct proc{ pid_t pid; /* 進程ID */ unsigned long core; /* 進程記憶體空間 */ unsigned long stack; /* 進程調度出去的棧,儲存了進程的恢複資料 */ Message massage; /* 發送給進程的訊息佇列 */ Proc next; /* 下一個進程 */ };四 核心API 核心向對外只提供3個API, int send(pid_t pid,void *massage,int length); /* 該API像pid進程發送大小為length位元組的訊息,訊息內容由massage指出. 返回成功發送的位元組數 */ void *recv(int *length); /* 該API返回訊息佇列中第一條訊息,*length儲存了訊息的大小 */ void *recvForm(pid_t pid,int *length); /* 該API接收來至pid的訊息,*length儲存了訊息的大小 */