CPU上下文:
CPU寄存器包含指令寄存器和程序计数器,用来暂存指令、数据、地址、程序下一条指令,称之为上下文
CPU上下文切换过程:
1、挂起当前进程、将CPU上下文信息存储于PCB中。
2、在PCB中检索下一个任务,并将上下文信息恢复到寄存器中。
3、跳转到程序计数器指向的位置,并恢复进程。
CPU上下文切换:
一个程序的执行,要么处于用户态、要么处于内核态进程上下文切换、线程上下文切换、中断上下文切换进程即可以运行在内核空间,也可以运行在用户空间,用户态转变为内核态称之为系统调用,系统调用发生了上下文切换。
CPU 寄存器里原来用户态的指令位置,需要先保存起来。接着,为了执行内核态代码,CPU 寄存器需要更新为内核态指令的新位置。最后才是跳转到内核态运行内核任务。而系统调用结束后,CPU 寄存器需要恢复原来用户保存的状态,然后再切换到用户空间,继续运行进程。所以,一次系统调用的过程,其实是发生了两次 CPU 上下文切换。不过,需要注意的是,系统调用过程中,并不会涉及到虚拟内存等进程用户态的资源,也不会切换进程。
中断上下文切换:
为了快速响应硬件的事件,中断处理会打断进程的正常调度和执行,转而调用中断处理程序,响应设备事件。而在打断其他进程时,就需要将进程当前的状态保存下来,这样在中断结束后,进程仍然可以从原来的状态恢复运行。对同一个 CPU 来说,中断处理比进程拥有更高的优先级,所以中断上下文切换并不会与进程上下文切换同时发生。同样道理,由于中断会打断正常进程的调度和执行,所以大部分中断处理程序都短小精悍,以便尽可能快的执行结束。另外,跟进程上下文切换一样,中断上下文切换也需要消耗 CPU,切换次数过多也会耗费大量的 CPU,甚至严重降低系统的整体性能。所以,当发现中断次数过多时,就需要注意去排查它是否会给你的系统带来严重的性能问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。