进程切换

用户态进程陷入内核态的几种方式(与进程调度相关)

  • 发生系统调用
  • 时钟中断
  • etc…

现场恢复

  • 首先理解一个关于cpu常识:cpu执行代码时候的指令地址由寄存器eip决定,eip里面存储了下一条指令的地址。cpu每执行一条指令,eip自动 +1。有了这个常识之后,我们就很容易理解进程的现场恢复过程。
  • 那么如何从一个地址空间的执行现场切换到另外一个地址空间的执行现场?首先两个不同的地址空间切换,页表是首先需要修改的,然后最为重要的两个寄存器分别是esp,eip。esp决定了切换之后函数调用过程的正确性,而eip则保证了执行位置的正确性。对于内核来说,保存的不止这2个寄存器,还包括ebp等寄存器,这部分没有细看,不过这些都只是细节而已,对于我这个阶段的水平来说,不重要。

进程切换过程

  • 进程a由于某种原因(例如发生系统调用)进入了内核态,进入内核态之前,需要先保存当前进程的中断帧,然后执行对应的中断服务例程,最后执行调度器。如果当前需要重新调度,那么执行调度器选择下一个进程,否则恢复中断帧,返回用户态
  • 假设调度器选择了进程b,那么保存当前进程的内核态现场(主要有eip,esp)。恢复进程b的内核态现场,从之前进程b被暂停的内核态现场开始执行。之后根据进程b的中断帧恢复用户态现场。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值