进程上下文切换的步骤

进程上下文切换的步骤如下:

  1. 每个线程都对应着一个TCB,TCB中有一个TSS字段,存储着线程对应的内核栈的地址,也就是内核栈的栈顶指针。
  2. 内核栈将当前进程的寄存器信息保存起来,同时保存了被暂停执行的程序的下一条指令,完成了由用户栈到内核栈的切换过程。
  3. 将CPU的字段改为内核态(即R0等级),调用进程上下文切换的处理程序。
  4. 检查PCB中的need_resched标志位,若有效则调用schedule()函数完成进程调度,schedule()会执行以下步骤:
    1. 调用pick_next_task()根据相关调度算法得到下一个待运行的进程。
    2. 调用context_switch()执行以下步骤:
      1. 调用switch_mm()将虚拟内存地址映射到待运行进程,恢复内存管理相关信息
      2. 调用switch_to()保存原来进程的cpu现场信息,恢复待运行进程的cpu现场信息
  5. 当内核方法执行完毕后,会将CPU的字段改为用户态(R3等级),然后利用之前写入的信息来恢复用户方法的执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值