欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

每天3分钟操作系统修炼秘籍(2):并行的假象和分时系统

程序员文章站 2022-05-03 13:22:20
"点我查看秘籍连载" 假象:“并行”运行多个进程 现代操作系统都支持多任务同时执行。在这里,操作系统对我们用户“营造了一种假象”,让CPU看上去是用不完的,能够不断地添加新的程序使它们同时运行。 但每核CPU在某一时刻都只能执行一个进程。使用操作系统的人是不会去关注CPU是单核还是多核的,每个人都希 ......

假象:“并行”运行多个进程

现代操作系统都支持多任务同时执行。在这里,操作系统对我们用户“营造了一种假象”,让cpu看上去是用不完的,能够不断地添加新的程序使它们同时运行。

但每核cpu在某一时刻都只能执行一个进程。使用操作系统的人是不会去关注cpu是单核还是多核的,每个人都希望操作系统能同时运行多个程序,比如可以同时看网页、发邮件、聊qq、听音乐等。

所以操作系统提供的多程序同时运行是“伪并行”。要想实现真正的并行运行多个进程,只能使用多核cpu来实现。

os营造这种假象的技术是“cpu时间共享(time sharing)”,也称为“分时系统”,即cpu执行一会进程a,然后停下来去执行一会进程b,再停下来执行一会进程a。即,每个进程都只执行一会,然后cpu切换去执行其它进程,每一段执行和切换的时间很短(每秒能执行很多个进程),使得用户以为进程根本未停过,从而形成了假象。

例如,下图描述了分时系统的进程切换方式。进程a执行一会后切换到进程b,b执行一会后又切换到c,c执行一会后又切换到b,再切换回c、a、c、d。

每天3分钟操作系统修炼秘籍(2):并行的假象和分时系统

这种不断切换进程的机制,其关键技术是cpu从一个进程切换到另一个进程,这是通过“上下文切换(context switch)”实现的。上下文切换可以直接理解为进程的切换,之所以使用“上下文”这个术语,是因为cpu要从进程a切换到进程b时,必然要保存进程a的执行环境,比如进入切换时进程a执行到了哪个地方,以便下次切换回进程a的时候能够从这里恢复继续执行,此外,既然要切换到进程b,必然还要恢复之前已保存好的进程b的执行环境,才能知道从哪里开始继续执行进程b。而在计算机世界中,“环境”和“上下文”通常是可以互换的概念,所以cpu的上下文切换正是两个前后进程执行环境的切换。

每天3分钟操作系统修炼秘籍(2):并行的假象和分时系统

cpu时间共享的好处是提升了交互性,因为每个进程都可以尽快地执行起来,都能够更快地被响应,使得每个进程都像是被公平对待,这是非常感人的。但是时间共享却带来了另外一个问题,站在进程的角度上看,每个进程从启动开始到执行完成,中间需要花费更长时间,而且很多时间处于等待状态。

再考虑另外一个问题,既然要不断的切换进程,操作系统如何选择下一个要执行的进程?例如下图中,当进程d开始进程切换时,下一个要执行的是哪个进程呢?

每天3分钟操作系统修炼秘籍(2):并行的假象和分时系统

选择下一个要执行的进程,是通过操作系统的进程调度程序(也称为调度器调度类)来决定的,调度器根据一些调度算法策略决定哪个进程将幸运地被选中(即,被调度到)作为下一个要执行的进程。

而进程调度算法策略的两个关键性指标正是响应时间和周转时间。响应时间体现的是交互性和公平性,响应时间越短,表示交互时能更快得到响应,比如当敲下键盘时,用户肯定不希望还要等一段时间才显示字符。周转时间体现的是何时完成任务的问题,周转时间越短,表示从启动开始到执行结束所花的时间更短,也就是更快完成任务。

每天3分钟操作系统修炼秘籍(2):并行的假象和分时系统

另外,虽然在分时系统下,通过为每个进程分配固定的时间片能保证每个进程都有机会执行,但总会有一些进程是比较重要的,它们的优先级比较高,它们可以从当前正在执行的进程处抢占cpu,这称为“抢占式多任务处理”。当然,这里的抢占并不是真的无条件抢到cpu,cpu给谁是由操作系统的调度策略决定的,“抢占”只是表明某进程比较重要,应当优待,比如让该进程尽快执行或让它多执行一会。

进程调度是非常重要的概念,在后面还会专门花费一些篇幅介绍进程的调度。