##《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”学习笔记 ##
源码组成:mypcb.h mymain.c myinterrupt.c
- mypcb.h
#define MAX_TASK_NUM 4 //进程数组链表的最大值
#define KERNEL_STACK_SIZE 1024*8 //内核堆栈的大小
/* CPU-specific state of this task */
struct Thread {
unsigned long ip;/*用于保存eip 指向CPU执行的下一条指令的地址*/
unsigned long sp;/*用于保存esp 堆栈指针*/
};
typedef struct PCB{
int pid;
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
char stack[KERNEL_STACK_SIZE];
/* CPU-specific state of this task */
struct Thread thread;
unsigned long task_entry;/*进程入口 本程序中都设置为my_process*/
struct PCB *next; /*进程链表中的下一个进程*/
}tPCB;
void my_schedule(void);/*用于实现进程上下文的切换调度*/
2.mymain.c
void __init my_start_kernel(void)
{
int pid = 0;
int i;
/* Initialize process 0*/
task[pid].pid = pid;
task[pid].state = 0;/* -1 unrunnable, 0 runnable, >0 stopped */