1.创建第一进程

2021-02-15  本文已影响0人  月下蓑衣江湖夜雨

第一步:进程表数据结构

进程表就是个结构体数组

#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];

第二步:添加main函数

上一篇 下一篇

猜你喜欢

热点阅读