目录
- 【聊聊Linux中CPU上下文切换】什么是CPU上下文
- CPU上下文切换
- 上一任务的CPU上下文保存在哪?
- 进程上下文切换
- 内核空间和用户空间
- top命令查看CPU资源
- 系统调用
- 进程上下文切换 和 系统调用的区别?
- 进程切换的常见场景
- 线程上下文切换
- 中断上下文切换
- 上下文切换的消耗
- 补充:vmstat命令查看整体CPU上下文切换情况
- 补充:pidstat命令查看进程的CPU上下文切换情况
作者:小牛呼噜噜 | https://xiaoniuhululu.com计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」什么是CPU上下文Linux是一个多任务的操作系统,多任务操作系统是指多个进程运行在一个 CPU 中互不打扰,看起来像同时运行一样 。多任务的操作系统这样就可以支持远大于CPU数量的任务"同时运行" 。但是我们都知道这其实是一个错觉,真正是系统在很短的时间内将CPU轮流执行各个任务,给用户造成多任务"同时运行"的感觉 。其中有一个问题,在每次执行任务之前,CPU必须要知道从哪里加载任务,以及加载后从哪里开始运行,操作系统通过
CPU中寄存器和程序计数器
配合,来保存和恢复相应进度的信息CPU 寄存器:CPU 寄存器是 CPU 内置的速度极快的内存;程序计数器:程序计数器会存储 CPU 正在执行的指令位置,或者即将执行的指令位置 。在任务调度的过程中, 而这些信息都保存在CPU的寄存器中,其中
即将执行的下一条指令的地址
被保存在程序计数器上 。我们将这些信息称为CPU的上下文,也叫硬件上下文 。当某一进程自愿放弃它的 CPU 时间
或者系统分配的时间片用完
时,就会发生CPU上下文切换 。CPU上下文切换操作系统OS在切换运行任务时,
将上一任务的上下文保存起来,然后加载新任务的上下文到CPU寄存器,最后再跳转到程序计数器所指的新位置上执行新任务
的这一动作,被称为CPU上下文切换 。CPU上下文切换的步骤:
- 将前一个 CPU 的上下文(也就是 CPU 寄存器和程序计数器里边的内容)保存起来;
- 然后加载新任务的上下文到寄存器和程序计数器;
- 最后跳转到程序计数器所指的新位置,运行新任务 。
- 被保存起来的上下文会存储到系统内核中,等待任务重新调度执行时再次加载进来 。
进程上下文切换、线程上下文切换、中断上下文切换
。上一任务的CPU上下文保存在哪?我们知道因为CPU过于昂贵,其性能与其他储存设备有数量级的差距,为了充分压榨其性能,计算机将CPU的时间进行分片,让各个程序在CPU上轮转执行,被剥夺执行权的程序,等后面CPU继续执行它的时候,这时需要一个数据结构来保存相关信息,以便之后恢复继续执行,这个其实就是进程 。CPU上下文会被保存在进程的内核空间(kernel space)上 。OS在给每个进程分配虚拟内存空间时,会分配一个内核空间,这部分内存只能由内核代码访问 。OS在切换CPU上下文前,会先将当前CPU的通用寄存器、PC等进程现场信息保存在进程的内核空间上,待下次切换时,再取出重新装载到CPU上,以恢复任务的运行 。
经验总结扩展阅读
- docker搭建yapi接口文档系统、Idea中上传接口、在线调用
- 为什么受凉就会感冒
- 多一半的字是什么
- 中信信用卡申请条件是什么
- 关于广西大学中加国际学院
- 中国高山茶都有哪些茶
- 与中国陆地相邻的国家有几个,最大的是
- 2023年中伏多少天结束
- 中伏为什么有10天20天?三伏天怎么算的
- 杜丽娘是哪部文学作品中人物形象