点我查看秘籍连载算法
现代操做系统都支持多任务同时执行。在这里,操做系统对咱们用户“营造了一种假象”,让CPU看上去是用不完的,可以不断地添加新的程序使它们同时运行。spa
但每核CPU在某一时刻都只能执行一个进程。使用操做系统的人是不会去关注CPU是单核仍是多核的,每一个人都但愿操做系统能同时运行多个程序,好比能够同时看网页、发邮件、聊QQ、听音乐等。操作系统
因此操做系统提供的多程序同时运行是“伪并行”。要想实现真正的并行运行多个进程,只能使用多核CPU来实现。blog
OS营造这种假象的技术是“CPU时间共享(time sharing)”,也称为“分时系统”,即CPU执行一会进程A,而后停下来去执行一会进程B,再停下来执行一会进程A。即,每一个进程都只执行一会,而后CPU切换去执行其它进程,每一段执行和切换的时间很短(每秒能执行不少个进程),使得用户觉得进程根本未停过,从而造成了假象。进程
例如,下图描述了分时系统的进程切换方式。进程A执行一会后切换到进程B,B执行一会后又切换到C,C执行一会后又切换到B,再切换回C、A、C、D。get
这种不断切换进程的机制,其关键技术是CPU从一个进程切换到另外一个进程,这是经过“上下文切换(context switch)”实现的。上下文切换能够直接理解为进程的切换,之因此使用“上下文”这个术语,是由于CPU要从进程A切换到进程B时,必然要保存进程A的执行环境,好比进入切换时进程A执行到了哪一个地方,以便下次切换回进程A的时候可以从这里恢复继续执行,此外,既然要切换到进程B,必然还要恢复以前已保存好的进程B的执行环境,才能知道从哪里开始继续执行进程B。而在计算机世界中,“环境”和“上下文”一般是能够互换的概念,因此CPU的上下文切换正是两个先后进程执行环境的切换。it
CPU时间共享的好处是提高了交互性,由于每一个进程均可以尽快地执行起来,都可以更快地被响应,使得每一个进程都像是被公平对待,这是很是感人的。可是时间共享却带来了另一个问题,站在进程的角度上看,每一个进程从启动开始到执行完成,中间须要花费更长时间,并且不少时间处于等待状态。程序
再考虑另一个问题,既然要不断的切换进程,操做系统如何选择下一个要执行的进程?例以下图中,当进程D开始进程切换时,下一个要执行的是哪一个进程呢?并行
选择下一个要执行的进程,是经过操做系统的进程调度程序(也称为调度器或调度类)来决定的,调度器根据一些调度算法策略决定哪一个进程将幸运地被选中(即,被调度到)做为下一个要执行的进程。im
而进程调度算法策略的两个关键性指标正是响应时间和周转时间。响应时间体现的是交互性和公平性,响应时间越短,表示交互时能更快获得响应,好比当敲下键盘时,用户确定不但愿还要等一段时间才显示字符。周转时间体现的是什么时候完成任务的问题,周转时间越短,表示从启动开始到执行结束所花的时间更短,也就是更快完成任务。
另外,虽然在分时系统下,经过为每一个进程分配固定的时间片能保证每一个进程都有机会执行,但总会有一些进程是比较重要的,它们的优先级比较高,它们能够从当前正在执行的进程处抢占CPU,这称为“抢占式多任务处理”。固然,这里的抢占并非真的无条件抢到CPU,CPU给谁是由操做系统的调度策略决定的,“抢占”只是代表某进程比较重要,应当优待,好比让该进程尽快执行或让它多执行一会。
进程调度是很是重要的概念,在后面还会专门花费一些篇幅介绍进程的调度。