我的玩具OS之线程的内存布局

线程的内存布局(PCB)

c语言结构体中的成员地址从低到高排列

栈由高地址向底地址处生长

pcb

// 进程或线程的pcb,程序控制块,本系统中大小一页
struct task_struct {
    uint32_t* self_kstack;	 // 各内核线程都用自己的内核栈,内核栈顶指针,线程被创建时,被初始化为自	己PCB所在页的顶端
    enum task_status status;
    char name[16];
    uint8_t priority;  //用于决定时间片的线程优先级
    uint8_t ticks;	   // 每次在处理器上执行的时间嘀嗒数

/* 此任务自上cpu运行后至今占用了多少cpu嘀嗒数,
* 也就是此任务执行了多久*/
    uint32_t elapsed_ticks;

/* general_tag的作用是用于线程在一般的队列中的结点 */
    struct list_elem general_tag;				    

/* all_list_tag的作用是用于线程队列thread_all_list中的结点 */
    struct list_elem all_list_tag;

    uint32_t* pgdir;               // 进程自己页表的虚拟地址
    uint32_t stack_magic;	 // 用这串数字做栈的边界标记,用于检测栈的溢出
};

image

posted @ 2021-03-16 23:13  江安躺平侠  阅读(55)  评论(0)    收藏  举报