Linux进程调度和进程切换

并行(Parallel)

含义:并行是指多个任务在同一时刻同时执行。

硬件要求:需要多个处理器(如多核CPU)或者多台计算设备来实现,这些执行单元能够真正地同时处理不同的任务。例如,一个具有4个核心的CPU可以同时执行4个不同的任务,每个核心负责一个任务的执行。

执行特点:任务之间真正地同时进行,不存在资源共享带来的相互等待,能够极大地提高计算速度,适用于计算密集型任务。

并发(Concurrent)

含义:并发是指多个任务在宏观上看起来是同时执行的,但在微观上,这些任务是交替执行的。

实现方式:在单处理器(单核CPU)系统中,通过操作系统的调度机制,快速地在多个任务之间切换,使得每个任务都能得到一定的执行时间片,从而给人一种同时执行的感觉。例如,在一个单核CPU的计算机上同时打开浏览器、音乐播放器和文档编辑器,操作系统通过调度使这三个程序交替运行。

应用场景:可以有效地利用系统资源,提高系统的资源利用率和响应速度,适用于I/O密集型任务,因为在I/O操作(如磁盘读写、网络传输)期间,CPU可以切换去执行其他任务。

每一个进程都要有自己的时间片,时间变到了进程就要切换。Linux是基于时间片进行调度轮转的一个进程的时间片到了。不一定跑完可以在任何地方都可以重新被调度和切换。

Linux中的进程调度

目标与原则

目标是在多个进程间合理分配CPU资源,提高系统的整体效率、响应速度和公平性。

遵循一定的原则,如保证系统的实时性需求(对于实时进程)、提高系统吞吐量、满足用户交互体验等。

调度算法

主要采用完全公平调度算法(CFS)。CFS基于虚拟运行时间(vruntime)概念,每个进程都有自己的vruntime,它与进程的实际运行时间、权重(反映优先级)相关。通过比较vruntime来决定进程的调度顺序,vruntime小的进程优先获得CPU。CFS使用红黑树来管理就绪进程,按照vruntime值进行排序,调度时选择红黑树最左端(vruntime最小)的进程运行。

同时也存在其他调度策略用于特殊进程,如实时进程采用的实时调度策略,以确保对时间敏感的任务能及时执行。

调度时机

进程状态改变时,如从运行态变为阻塞态(例如等待I/O操作),此时需要重新调度其他就绪进程运行。

时间片用完,CFS虽然没有传统意义上的固定时间片,但当一个进程运行一段时间后,其vruntime增长,可能不再是最小,就会触发调度让其他进程运行。

有更高优先级的进程进入就绪队列时,会抢占当前正在运行的低优先级进程的CPU资源而被调度运行。

Linux中的进程切换

 

进程调度的本质就是取指令更新PC指令分析指令执行。

保存当前进程上下文

包括保存程序计数器(PC),它指向当前正在执行的指令地址,保存通用寄存器(如EAX、EBX等)的值,这些寄存器存储着进程运行中的临时数据,还有栈指针(SP)等其他相关寄存器的值。这些信息被保存到当前进程的内核栈中,以便后续恢复进程执行时使用。

切换地址空间相关操作

切换页表,因为不同进程有各自独立的虚拟地址空间到物理地址空间的映射。Linux使用页表来管理这种映射关系,进程切换时要将当前页表切换为下一个要运行进程的页表。

恢复新进程上下文

从新进程的内核栈中恢复之前保存的程序计数器、寄存器的值等信息,使新进程可以从上次中断的地方继续执行,从而完成进程的切换操作。进程切换是有开销的,包括保存和恢复上下文、切换页表等操作所花费的时间,如果进程切换过于频繁会影响系统的性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安心学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值