对自定义内核中断函数和任务调度器的理解
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的修改不在此描述

浙公网安备 33010602011771号