一、简单聊一下
linux的用户态进程都是基于init进程fork出来的,
Linux分为用户栈和内核栈,内核栈是内核态运行的栈空间,具体的栈初始化是基于处理器来实现的,例如arm的msp和psp,分别给用户和线程独立用于调度切换使用。
linux本质上也是如此,内核初始化的时候,会创建一个init线程,用户态所以的进程fork都是基于init来进行的。
二、进程调度方式
linux进程调度分几种,前两种用于实时系统:
SCHED_FIFO,顾名思义,如果一个进程设置为此模式,然后优先级当前最高,一直占用CPU
SCHED_RR,这种方式比FIFO多了一步,将运行完的进程放到链表尾部,当大家优先级相同时,会公平的排队运行。
SCHED_NORMAL 普通分时(非实时)
三、时间片(普通进程)
可见静态优先级越小(优先级越高),获得时间片越长
四、睡眠时间与动态优先级
动态优先级决定着睡眠时间,bonus是惩罚系数,0~10的取值范围,当大于5时,表示奖赏,bonus的值依赖于过去进程的情况,与进程的平均睡眠时间相关。