CPU密集型(CPU-bound):计算密集型,须要大量的CPU时间进行运算linux
实时进程:有实时需求,不该被低优先级的进程阻塞,响应时间要短要稳定。主要用于视频、音配、机械控制。算法
调度策略:是一组规则,它们决定何时以怎样的方式选择一个新进程运行shell
Linux的调度基于分时和优先级策略:架构
调度策略本质上是一种算法,这些算法从实现的角度看仅仅是从运行队列中选择一个新进程,选择的过程当中运用了不一样的策略而已框架
用户态进程只能被动调度,内核线程是只有内核态没有用户态的特殊进程。函数
switch_to利用了prev和next两个参数:prev指向当前进程,next指向被调度的进程操作系统
最通常的状况:正在运行的用户态进程X切换到运行用户态进程Y的过程线程
关键点:中断和中断返回中有CPU上下文的切换,进程调度的过程当中有进程上下文的切换,此时切换了两个进程间的堆栈3d
X86下的地址空间有4G,0~3G用户态、内核态能够访问,3G以上只有内核态能够访问
内核是全部进程共享的。内核至关于出租车,进程至关于客人,对全部进程都同样。没有进程须要“承载”的时候,内核进入idle0号进程进行“空转”
内核是各类中断处理过程和内核线程的集合rest
最简单、最复杂的操做——执行ls命令:
从CPU和内存的角度看Linux系统的执行:
完成跟踪
linux调度的核心函数为schedule,schedule函数封装了内核调度的框架。细节实现上调用具体的调度类中的函数实现。当切换进程已经选好后,就开始用户虚拟空间的处理,而后就是进程的切换switch_to()。所谓进程的切换主要就是堆栈的切换,这是由宏操做switch_to()完成的。并且知道schedule中调用next = pick_next_task(rq, prev);实行进程调度算法,其后调用context_switch(rq, prev, next);进行进程上下文切换,其中context_switch(rq, prev, next)中的宏switch_to起着关键做用。