对自定义内核中断函数和任务调度器的理解

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

posted @ 2021-10-20 13:38  yhaoo  阅读(59)  评论(0)    收藏  举报