linux kernel中的进程栈

1、linux中的user mode的进程栈

在thread_info.h中,设置进程栈的大小为16k

#define THREAD_SIZE		16384
#define THREAD_START_SP		(THREAD_SIZE - 16)

在head.S中, 在进程切换的时候:
将内核这个进程栈的栈顶写入到了sp中,sp = init_thread_union + THREAD_SIZE
将init_task写入到了sp_el0中,设置用户空间的程序栈

__mmap_switched:
......
#ifdef CONFIG_THREAD_INFO_IN_TASK
        adrp    x4, init_thread_union
        add     sp, x4, #THREAD_SIZE
        adr_l   x5, init_task
        msr     sp_el0, x5                      // Save thread_info
#else
	adr_l	sp, initial_sp, x4
	mov	x4, sp
	and	x4, x4, #~(THREAD_SIZE - 1)
	msr	sp_el0, x4			// Save thread_info
#endif

在linux 中每一个应用程序,在内核中都有一个task_struct结构体,每个task_struct代码一个内核进程,都有一个进程栈,该栈的栈顶写入到了sp
另外,每一个应用程序,在userspace空间,都有一个程序栈,该栈的栈顶写入到了sp_el0中

总结:每个应用程序有两个栈,一个是在linux kernel中的task_struct结构体中指向的进程栈、一个是user程序中的栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码改变世界ctw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值