對自定義核心中斷函式和任務排程器的理解
阿新 • • 發佈:2021-10-20
1 struct Thread { 2 unsigned long ip; 3 unsigned long sp; 4 }; 5 6 typedef struct PCB { 7 int pid; 8 volatile long state; 9 char stack[KERNEL_STACK_SIZE]; 10 struct Thread thread; 11 unsigned long task_entry; 12 struct PCB* next; 13 }tPCB;
/*
* 對自定義核心中斷函式和任務排程器的理解
* 結合PCB和Thread的定義理解
*/
1.關於中斷函式 my_timer_handler(void)
該函式會對time_count進行判斷,並顯示一條資訊。該功能修改了arch/x86/kernel/time.c中的static irqreturn_t timer_interrupt(int irq, void* dev_id)函式,
global_clock_event->event_handler(global_clock_event);
+++my_timer_handler(); //增加中斷處理函式
return IRQ_HANDLED;
2.關於排程器函式 my_schedule(void)
該函式會判斷當前任務的state,如果=0則啟動next->pid的任務;如果!=0則啟動新的任務,並將state置0
3.關於核心啟動函式 __init my_start_kernel(void)
a.該函式修改了include/linux/start_kernel.h檔案,新增了一個函式定義extern void __init my_start_kernel(void);
b.然後在init/main.c中新增了1行程式碼呼叫 my_start_kernel()
4.對Makefile的修改不在此描述