任务0的内核堆栈,用户堆栈

    技术2022-05-18  11

         描述任务0的内核堆栈和用户堆栈是如何产生的:

     

         1,

         linux0.11系统共使用了4种堆栈:系统初始化时临时使用的堆栈;供内核程序自己使用的堆栈(内核堆栈),只有一个,位于系统

         地址空间固定的位置,也就是后来任务0的用户态堆栈;每个任务通过系统调用,执行内核程序时使用的堆栈,也即任务的内核态

         堆栈,每个任务都有自己独立的内核态堆栈;任务在用户态执行的堆栈,位于任务(进程)地址空间末端,即任务的用户态堆栈

        

         2,

         从head.s程序起,系统正式在保护模式下运行,此时堆栈段被设置为内核数据段(0x10),堆栈指针esp设置成指向use_stack

         数组的顶端,保留1页内存作为堆栈使用。head.s L23:lss _stack_start,%esp,_stack_start为指向结构体变量stack_

         start的指针。

         stack_start定义在sched.c L69 ~ L72:

         struct {                  long * a;                  short b;     } stack_start = { & user_stack [PAGE_SIZE>>2] , 0x10 };

         故lss _stack_start,%esp的作用:0x10 -> ss,& user_stack [PAGE_SIZE>>2] -> esp。

         head.s中执行完下列指令: L18 ~ L23

         movl $0x10,

    转载请注明原文地址: https://ibbs.8miu.com/read-2166785.html

    最新回复(0)