关于上下文切换的思考

     vmstat 的结果中有 cs这一项,这里面的上下文切换 是指的进程切换 还是 只有进程的上下文切换, 进程的上下文切换,不一定会有进程的切换,如,进程通过系统调用进入内核态,当前进程进入了内核态,栈发生了变化,会使用内核态栈,内核态栈会保持当前cpu的大多数寄存器的内容,,cpu会从用户态切换到内核态,,这些上下文其实已经发生了变化,但是进程还是当前这个进程,系统调用后,立马回到用户态,用保存在内核栈的值加载到寄存器,cpu有恢复到了用户态,进程重新使用用户态栈,但是如果系统没有进程schedule(),,或者调用了schedule(),但是当前选择的运行进程还是这个进程,就是进程没有切换。这到底算不算上下文切换,会不会被纳入到 vmstat的cs的统计中去?看了很久的相关的文章, 答案是算,只要当前程序的运行环境发生了变化,都算上下文切换。例如进程进入内核态时栈发生了变化,而栈又是进程运行的环境

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
上下文切换是指当CPU从一个任务切换到另一个任务时,需要保存当前任务的上下文信息,并加载下一个任务的上下文信息。在Linux系统,可以使用vmstat命令、pidstat命令、/proc/interrupts文件来查看系统的上下文切换情况。 上下文切换的主要原因有几点: 1. 多任务调度:操作系统需要将CPU资源在多个任务之间进行切换,以实现任务的并发执行。 2. 断处理:当系统接收到硬件断信号时,需要暂停当前任务的执行,转而处理断请求。 3. 用户内核的切换:当用户进程需要调用内核服务时,会触发上下文切换上下文切换涉及到的资源主要有寄存器、内存、页表等。上下文切换次数过多会导致CPU的资源浪费,降低系统的执行效率。 根据引用的分析,上下文切换共分为三种情况: 1. 自愿上下文切换:当一个任务需要等待某个事件的完成时,会主动释放CPU,从而触发自愿上下文切换。 2. 非自愿上下文切换:当一个任务的时间片用完或发生硬件断等原因时,会被系统强制调度,触发非自愿上下文切换。 3. 上下文切换:当系统接收到硬件断信号时,会从当前任务切换到断处理程序,进行断处理。 至于您提到的Linux上下文切换的实战,可以使用vmstat命令、pidstat命令和/proc/interrupts文件来观察系统的上下文切换情况。具体的使用方法可以参考相关文档或在线资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值