在minix 3中,程序表被分成核心、程序管理、檔案系統三個部分,各部分維護它們各自所需要的那些域,三個部分的程序表中相同程序的位置是相同的。
minix 3核心程序表資料結構定義在src/kernel/proc.h中,主要用途是程序排程和程序間通訊。
proc結構體就是程序表項的資料結構,先來看看proc結構體中各個域的含義。
26,p_nr,程序號,值得注意的是,核心程序clock(-3)、system(-2)、kernel(-1)和idle程序(-4)的程序號是負數;
28,p_rts_flags,程序的各種標誌位,各位意義對應62~69行,只有各位為0時程序為就緒狀態;
44,p_name,程序的名稱。
程序排程:
30,p_priority,程序的當前優先順序,minix 3的程序優先順序是可變的,核心程序和idle程序除外;
31,p_max_priority,程序能夠獲得的最大優先順序;
32,p_ticks_left,程序上一次執行剩餘的時間片;
33,p_quantum_size,程序可以獲得的時間片;
37,p_nextready,指向同一優先順序佇列的下乙個就緒程序;
程序通訊:
38,p_caller_q,指向等待想它傳送訊息的程序;
39,p_q_link,指向下乙個和它一樣等待向同乙個目標程序傳送訊息的程序;
40,p_messbuf,訊息緩衝區;
41,p_getfrom,訊息的源程序號;
42,p_sendto,訊息的目標程序號;
proc結構體之外還定義了一些巨集和變數。
75,nil_proc,表示空程序,相當於null;
78,proc_addr(n),這個巨集用於根據程序號獲取程序表項,注意核心程序的程序號是負數,但c語言陣列下標從0開始;
79,proc_nr(p),這個巨集根據程序獲取程序號;
83,iskernelp(p),判斷程序是不是核心程序(程序號小於0);
85,isuserp(p),判斷程序是不是使用者程序(程序號非負);
92,proc[nr_tasks + nr_procs],程序表,nr_tasks是核心程序(程序號為負數)數,nr_procs是使用者程序數上限;
93,pproc_addr[nr_tasks + nr_procs],程序表項指標陣列,加快查詢速度;
94、95,rdy_head[nr_sched_queues]、rdy_tail[nr_sched_queues],程序優先順序佇列的隊頭陣列和隊尾陣列,16個佇列。
Minix3程序概述
介紹minix3中的系統組織結構及程序實現。kernel call 與system call的區別 多數用 c 寫,彙編負責核心直接與硬體互動的最底層部分。主要功能是為上層驅動程式和服務提供一組特權核心呼叫。daemon 守護程序 只有第乙個分割槽可以引導 引導塊,boot block 由它裝入引導...
MINIX3 程序結構體1
剛開始學習minix3,把學到的一些東西寫下來,留作筆記。minix3的核心檔案中的 kernel proc.h中定義了proc結構體 程序結構體 struct proc 其中,值得注意的是 1 程序優先順序 p priority。它反映的是該程序當前的優先順序,但是隨著程序不斷的排程,優先順序是會...
分析minix3之中CPU是怎樣在各程序之間切換
現在有必要解釋一下一些概念 程序上下文 作業系統中把程序物理實體和支援程序執行的環境合稱為程序上下文。它包含三個部分 1 使用者級上下文 由使用者程序的程式塊 使用者資料塊和使用者堆疊組成的程序位址空間 2 系統級上下文 包括程序控制塊 pcb 記憶體管理資訊 程序環境塊 系統堆疊等組成的程序位址空...