我的玩具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; // 用这串数字做栈的边界标记,用于检测栈的溢出
};


浙公网安备 33010602011771号