1

进程类型:
IO密集型,大部分时间用于等待IO。
CPU密集型,大部分时间用于计算

进程优先级:
实时进程:优先级(0~99)
普通进程:优先级(-20~19)
实时进程优先级 > 普通进程优先级

调度策略:
实时进程:优先级不同FIFO、优先级相同RR(Round Robin)
普通进程:使用CFS
最高等级的是FIFO,这种进程除非自己让出CPU否则linux会一直执行它,除非更高等级的FIFO和RR抢占它RR是同级别的进程平均分配。只有实时的执行完毕或者主动让出,普通进程才可以执行。

非抢占式CPU:
除非进程主动让出CPU(yield),否则将一直执行

抢占式CPU:
由进程调度器强制进程的开始或暂停

进程调度:
linux2.5 经典Unix O(1)调度策略,偏向服务器,交互不友好(cpu平均分配进程调度时间)、
linux2.6.23 CFS完全公平调度算法,Completely Fair Scheduler

CPU上下文:
CPU寄存器包含指令寄存器和程序计数器,用来暂存指令、数据、地址、程序下一条指令,称之为上下文,而这些保存下来的上下文,会存储在系统内核中,并在任务重新调度执行时再次加载进来。这样就能保证任务原来的状态不受影响,让任务看起来还是连续运行。

CPU上下文切换:
一个程序的执行,要么处于用户态、要么处于内核态
进程上下文切换、线程上下文切换、中断上下文切换
进程即可以运行在内核空间,也可以运行在用户空间,用户态转变为内核态称之为系统调用,系统调用发生了上下文切换。

CPU 寄存器里原来用户态的指令位置,需要先保存起来。接着,为了执行内核态代码,CPU 寄存器需要更新为内核态指令的新位置。最后才是跳转到内核态运行内核任务。而系统调用结束后,CPU 寄存器需要恢复原来用户保存的状态,然后再切换到用户空间,继续运行进程。所以,一次系统调用的过程,其实是发生了两次 CPU 上下文切换。不过,需要注意的是,系统调用过程中,并不会涉及到虚拟内存等进程用户态的资源,也不会切换进程。

中断上下文切换:

为了快速响应硬件的事件,中断处理会打断进程的正常调度和执行,转而调用中断处理程序,响应设备事件。而在打断其他进程时,就需要将进程当前的状态保存下来,这样在中断结束后,进程仍然可以从原来的状态恢复运行。

对同一个 CPU 来说,中断处理比进程拥有更高的优先级,所以中断上下文切换并不会与进程上下文切换同时发生。同样道理,由于中断会打断正常进程的调度和执行,所以大部分中断处理程序都短小精悍,以便尽可能快的执行结束。
另外,跟进程上下文切换一样,中断上下文切换也需要消耗 CPU,切换次数过多也会耗费大量的 CPU,甚至严重降低系统的整体性能。所以,当你发现中断次数过多时,就需要注意去排查它是否会给你的系统带来严重的性能问题。


一只鱼
49 声望1 粉丝

« 上一篇
进程线程
下一篇 »
内存管理