void
schedule
(void
)//排程函式if(
((*p)->signal &
~(_blockable &
(*p)
->blocked))&&
(*p)
->state==task_interruptible)
// 看訊號是否遮蔽掉,且是否處於task_interruptible狀態
(*p)
->state=task_running;
//task_running正在執行或處於就緒狀態
}//排程的重點內容
/* this is the scheduler proper: */
while(1
)if(c)break
;//如果最大的時間片不為0,退出迴圈,跳轉到switch_to去執行
for(p =
&last_task ; p >
&first_task ;
--p)
//依然是從後往前便遍歷 if(
*p)//尋找非空項
//將該項的時間片除2+靜態優先順序
(*p)
->counter =((
*p)->counter >>1)
+(*p)->priority;
}//切換
switch_to
(next)
;}
linux0 11程序排程分析
10ms時鐘中斷 時鐘中斷函式timer interrupt,將jiffier加1 呼叫do timer函式,將當前程序counter計數減1,如果 counter大於0,則返回繼續執行該任務,否則 呼叫schedule函式,如下 void schedule void if p signal blo...
linux 0 11 原始碼學習(六)
main.c main函式其實是核心的初始化,如果把核心功能比作業務軟體的話,就相當於是業務的初始化,從該檔案的資料夾歸屬 init資料夾 也可以看出這一點。main主函式很短,從 中可以基本看出整個核心的功能模組,如下 void main void for pause 注 在linux中fork乙...
linux 0 11 原始碼學習(五)
head.s head.s 是系統模組的入口,其編譯器已經是gnu彙編,但從功能上將仍然屬於核心啟動階段,主要的功能是對386 cpu的初始化,如使用者堆疊 idt gdt和頁表。因此從資料夾的歸屬看,它仍然放在boot資料夾中,與bootsect和setup一塊。head.s的核心功能 簡單的暫存...