Linux程序排程0 11原始碼

2021-10-07 00:23:03 字數 751 閱讀 5618

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的核心功能 簡單的暫存...