进程从用户态到内核态

1.读取tr寄存器,访问(任务状态段)TSS

2.TSS中的esp0获取内核栈顶指针

3.保存用户态上下文

 

 

esp寄存器是cpu栈指针,存放内核栈栈顶指针.

栈开始于末端,朝内存开始方向增长.

进程从用户态切到内核态,内核栈为空.

 

1.进程在进入内核态之前通过(任务状态段)TSS获得

内核栈栈顶指针.

Linux为每个cpu提供一个TSS,保存于tr寄存器

2.进程在进入内核态时,通过TSS段中的esp0

获取内核栈顶指针(从而保存用户态cs,esp,eip

)上下文.

3.进程在进入内核态之后

 


进程从用户态到内核态切换过程中,Linux主要做的事:

1:读取tr寄存器,访问TSS段

2:从TSS段中的sp0获取进程内核栈的栈顶指针

3:  由控制单元在内核栈中保存当前eflags,cs,ss,eip,esp寄存器的值。

4:由SAVE_ALL保存其寄存器的值到内核栈

5:把内核代码选择符写入CS寄存器,内核栈指针写入ESP寄存器,把内核入口点的线性地址写入EIP寄存器


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值