1. 程式人生 > 其它 >對自定義核心中斷函式和任務排程器的理解

對自定義核心中斷函式和任務排程器的理解

 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的修改不在此描述