Linux中CPU的上下文切换

CPU上下文:

        存储在CPU寄存器中的表示每次执行任务之前,CPU要从哪里加载任务,加载后从何处开始执行的信息以及存储在程序计算器中的表示即将执行的下一条指令的地址的信息。我们将这些信息称为CPU的上下文,也叫硬件上下文。(其实就是CPU寄存器和程序计数器中的内容)

CPU上下文切换:

        在切换任务时,将上一个任务的上下文保存起来,加载新任务的上下文到CPU寄存器中,并加载到程序计数器中保存的地址执行新任务的这一个动作,叫做CPU的上下文切换。CPU上下文切换包括:进程上下文切换、线程上下文切换、中断上下文切换。

CPU上下文文件: 一般保存在进程的内核空间(kernel space),用top命令查看用户态和内核态占用的CPU资源。

系统调用:

        系统调用用于用户态到系统态的转变,系统调用是内核向用户进程提供服务的唯一方法,一次上下文切换实际上发生了两次系统调用(用户态-系统态-用户态),系统调用过程中,不涉及虚拟内存等用户态的资源,也不会切换进程,系统调用过程中是一直在同一个进程中运行,系统调用也叫特权模式转换。

上下文切换与系统调用的区别:

        上下文切换指从一个进程到另一个进程,系统调用是同一个进程,属于进程内的上下文切换。进程是由内核管理的,进程的切换只发生在内核态,上下文切换会消耗资源。进程上下文切换涉及到用户空间资源,系统调用没有涉及用户态的资源。

线程的上下文切换:

        进程是系统资源分配的基本单位,线程是任务调度的基本单位。内核中任务调度实际是调度线程,进程只是提供虚拟内存等资源给线程。线程上下文切换时,不共享的虚拟内存不需要保存,私有的资源需要保存。

        线程上下文切换的两种情况,1)前后两个线程属于不同进程,资源不共享,所以切换过程与进程上下文切换一样。2)前后两个线程同属于同一个进程,虚拟内存是共享的,所以切换过程中不需要保存资源,只需要保存私有数据,如寄存器等不共享数据。

中断上下文切换:

        中断是指硬件设备(键盘鼠标等设备)给内核发送的一个信号,该信号表示一个事件发生了。中断上下文切换的时候不涉及进程的用户态,所以不需要保存和恢复被打断的进程的虚拟内存、全局变量等用户态资源。中断上下文,只包括内核态中断服务程序执行的必须状态,如cpu寄存器、内核堆栈、硬件中断等数据。中断上下文比进程上下文切换具有更高的优先级。

上下文切换的消耗:

        上下文切换通常是计算密集型的。它每一次切换会消耗许多的系统时间(纳秒级别),意味着上下文切换会消耗大量cpu时间。在linux系统中,上下文切换和模式切换的时间消耗的会比较少,这是Linux的一个特点。

使用vmstat命令查看整体CPU上下文切换的情况:vmstat x(x:每隔几秒输出一次)

使用pidstat命令查看进程的cpu上下文切换情况:pidstat 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值