Linux性能优化——CPU上下文切换(上)

本文详细解释了Linux系统中上下文切换的原因、类型及其具体实现过程。包括特权模式切换、进程上下文切换、线程上下文切换及中断上下文切换等,并介绍了每次切换时所涉及的主要操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、为什么要进行上下文切换?

Linux多任务特性,把CPU分为较短的时间片,线程或进程在时间片结束后会进行上下文切换

二、有哪些上下文切换,什么时候进行?

特权模式切换(系统调用):

1、进程既可以运行在用户空间,又可以运行在内核空间。当进行系统调用时,会陷入到内核空间,发生上下文切换

2、寄存器用户态的指令保存起来,内核态的指令加载到寄存器中,然后执行内核任务。系统调用结束后,则执行相反动作

3、同一个进程内不同模式下的调用,发生两次上下文切换。

进程上下文切换:

1、不同进行间的上下文切换,在时间片结束,调用sleep函数或者等待资源时,会发生进程上下文切换,进程上下文切换只会发生在内核态。

2、先保存虚拟内存(逻辑内存)、栈信息,然后保存内核状态和CPU寄存器

3、加载下一个进程内核态时,还需要刷新虚拟内存和用户态

线程上下文切换:

1、进程内部的线程共享进程的内存资源,因此切换时不需要进行虚拟内存的保存和刷新

2、线程有自己的栈和程序计数器等私有数据,切换时需要保存和刷新

中断上下文切换:

1、硬中断会打断进程的正常调度和执行,转而调用中断处理程序,此时需要将进程当前状态保存下来。

2、软中断是硬中断的下半部分,也会由进程产生,查询中断向量表调用对应的中断处理程序

三、上下文切换都做什么工作?

1、每个任务(process)运行前,CPU需要知道从哪里加载(内存首址)、从哪里开始运行(第一条指令)。因此需要设置好寄存器和程序计数器

2、每个任务暂停运行前,要把寄存器和程序计数器的值保存着内存栈中

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值