第一步:进程表数据结构
进程表就是个结构体数组
#define LDT_SIZE 2 // LDT大小
#define NR_TASKS 1 // 支持的进程个数,Number Restriction
// 进程调度的时候,保存现场用的栈帧,保存寄存器的值
typedef struct s_stackframe {
uint32 gs;
uint32 fs;
uint32 es;
uint32 ds;
uint32 edi;
uint32 esi;
uint32 ebp;
uint32 kernel_esp; // 内存栈指针
uint32 ebx;
uint32 edx;
uint32 ecx;
uint32 eax;
uint32 retaddr; // 返回地址:运行中被中断的话,存放的是eip;初始时,应存放程序入口地址
uint32 eip;
uint32 cs;
uint32 eflags;
uint32 esp;
uint32 ss;
} __attribute__((packed)) STACK_FRAME;
// 进程定义
typedef struct s_proc {
STACK_FRAME regs; // 寄存器现场信息
uint16 ldt_sel; // LDT选择子
DESCRIPTOR ldts[LDT_SIZE]; //
uint32 pid; // 进程号
char p_name[16]; // 进程名
} __attribute__((packed)) PROCESS;
// 进程表
PROCESS proc_table[NR_TASKS];
网友评论