CPU上下文切换

CPU上下文切换涉及进程上下文、线程上下文和中断上下文。进程上下文切换保存和加载虚拟内存、栈和寄存器等资源,线程上下文切换仅涉及线程私有数据。中断上下文切换则不涉及用户态资源,主要保存和恢复CPU寄存器和内核堆栈。代码分析展示了在x86平台上如何进行页目录和内核态堆栈的切换。
摘要由CSDN通过智能技术生成

1.什么叫做CPU上下文

CPU上下文指的就是CPU寄存器与程序计数器。

加载新的任务之前,现需要把前一个任务的CPU上下文(寄存器与程序计数器)保存起来,然后加载新的任务的上下文值到寄存器与程序计数器中,然后跳转到程序计数器所指的位置,执行新的任务。

CPU上下文切换分为以下三类:

  • 进程上下文切换
  • 线程上下文切换
  • 中断上下文切换

2.进程上下文切换

系统调用:从用户态到内核态的转变,需要通过系统调用来完成。在系统调用的过程中,并不会涉及到虚拟内存等进程用户态的资源,也不会切换进程,只会有硬件上下文的切换(寄存器和程序计数器),系统调用的过程在同一个进程内完成的。通常所说的进程上下文切换是指从一个进程切换到另一个进程运行。因此,系统调用过程通常称为特权模式切换,属于同进程内的CPU上下文切换。

进程上下文切换
进程是由内核来管理和调度的,进程的切换只能发生在内核态。进程的上下文不仅包括了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的状态。

进程上下文切换比系统调用多了一步:在保存内核态资源(当前进程的内核状态和CPU寄存器)之前,需要先把用户资源(虚拟内存、栈等)保存起来;加载了下一个进程的内核态后,还需要刷新新进程的虚拟内存和用户栈。

     当虚拟内存更新后,TLB也需要刷新。

发生进程上下文切换的场景

1.进程调度。当某个进程的时间片耗尽后,就会被系统挂起,切换到其他正在等待CPU的进程。

2.进程休眠。通过休眠函数wait等,添加到等待队列中,然后重新调度。

3.有更高优先级进程运行时,

4.发生硬件中断时,CPU上的进程会被挂起,转而执行内核中的中断服务程序

其实就是中断、异常与系统调用三种情况。中断包含时间片中断与I/O中断

3.线程上下文切换

当进程拥有多个线程时,这些线程会共享相同的虚拟内存和全局变量等资源,这些资料在上下文切换时是不需要的修改的。线程有自己的私有数据,比如栈和寄存器,这些在上下文切换时是需要保存的。

1.当前后两个线程属于同一个进程时。虚拟内存时共享的,所以在切换时,虚拟内存资源就保持不动,只需要切换线程的私有数据、寄存器等。

2.前后两个线程属于不同进程。因为资源不共享,所以此时跟进程切换一致。

4.中断上下文切换

中断发生以后,中断处理会打断进程的正常调度和执行,转而调用中断处理程序。打断其他进程时,需要将进程的当前状态保存下来,中断结束以后,进程仍然可以从原来的状态恢复运行。

跟进程上下文不

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值