Linux性能优化从入门到实战:03 CPU篇:CPU上下文切换

本文介绍了Linux操作系统中的CPU上下文切换,包括进程上下文切换、线程上下文切换和中断上下文切换的概念、过程及影响。并讨论了过多上下文切换对系统性能的影响,以及如何通过工具如vmstat、pidstat进行监控。
摘要由CSDN通过智能技术生成

  linux操作系统是将CPU轮流分配给任务,分时执行的。而每次执行任务时,CPU需要知道CPU寄存器(CPU内置的内存)和程序计数器PC(CPU正在执行指令和下一条指令的位置)值,这些值是CPU执行任务所依赖的环境,也就是CPU上下文
  CPU上下文切换,就是把前一个任务的CPU上下文(CPU寄存器和程序计数器)保存起来,然后加载入新任务的上下文到CPU寄存器和程序计数器中,最后跳转到程序计数器所指的位置,运行新任务。
  保存下来的上下文会在系统内核中,并在任务重新调度执行时再次加载进来,让任务看起来是连续执行的。
  根据任务的不同,CPU上下文切换分为进程上下文切换、线程上下文切换、中断上下文切换。
  
  进程上下文切换
  Linux把进程的运行空间分为内核空间和用户空间,并对进程按照特权等级划分,从内核空间Ring 0至用户空间Ring 3:Ring 0具有最高权限,可以直接访问所有资源;Ring 3只能访问受限资源,不能直接访问内存等硬件设备,需要通过系统调用陷入到内核中,才能访问这些特权资源。
  在这里插入图片描述
  进程运行在用户空间为进程的用户态,陷入内核空间为进程的内核态。从用户态到内核态的转变,需要通过系统调用来完成,期间涉及CPU上下文的切换:先保存原来用户态指令位置,然后更新内核态指令新位置,最后执行内核态代码;系统调用结束后,恢复用户态数据,继续执行进程。一次系统调用发生二次CPU上下文切换
  进程上下文切换 VS 系统调用:(1)进程上下文切换是一个进程切换到另一个进程;系统调用是同一个进程。(2)都需要进行上下文切换。(3)进程是由内核管理和调度的,切换只发生在内核态,所以进程上下文切换包括虚拟内存、栈、全局变量等用户资源,还包括内核堆栈、寄存器等内核资源;而系统调用只包括内核堆栈、寄存器等内核资源。
  在这里插入图片描述
  每次上下文切换需要几十纳秒到数微妙的CPU时间。切换次数较多,容易导致平均负载升高。
  Linux通过TLB(Transla

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值