并行的假象和分时系统

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

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

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

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

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

例如,下图描述了分时系统的进程切换方式。进程A执行一会后切换到进程B,B执行一会后又切换到C,C执行一会后又切换到B,再切换回C、A、C、D。

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

上面每个进程执行一会就会切换到另一个进程,这个执行的时长称为进间片。当一个进程耗尽所有时间片后,将切换到其他进程,那么时间片长好还短好?进间片分配过短,上下文切换就会越频繁,而且上下文切换是有开销的,时间片过长,则每个进程需要等待运行时间就越长,意味着交互性越差。一个常见的时间片长度是100 ms,但是现在LINUX(从LINUX2.6.23开始)的时间片是动态计算的,并非完全固定的值。

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

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

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

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

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

原文地址:https://www.cnblogs.com/liujunjun/p/12401318.html

时间: 2024-10-13 08:05:34

并行的假象和分时系统的相关文章

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

点我查看秘籍连载 假象:"并行"运行多个进程 现代操作系统都支持多任务同时执行.在这里,操作系统对我们用户"营造了一种假象",让CPU看上去是用不完的,能够不断地添加新的程序使它们同时运行. 但每核CPU在某一时刻都只能执行一个进程.使用操作系统的人是不会去关注CPU是单核还是多核的,每个人都希望操作系统能同时运行多个程序,比如可以同时看网页.发邮件.聊QQ.听音乐等. 所以操作系统提供的多程序同时运行是"伪并行".要想实现真正的并行运行多个进程

批处理系统和分时系统各具有什么特点?为什么分时系统的响应比较快?

批处理系统的特点如下 优点:系统的吞吐率较高. (作业的调度由系统控制,并允许几道程序同时投入运行,只要合理的搭配作业(例如把计算量大的作业和I/O量大的作业搭配)就可以充分利用系统的资源) 缺点:作业作业周转时间(用户向系统提交作业到获得系统的处理信息的时间间隔称为作业周转时间)较长,用户不能及时的了解自己程序的运行情况并加以控制,导致用户使用计算机十分不方便. 分时操作系统的特点如下 1.并行性.  共享一台计算机的众多联机用户可以在各自的终端上同事处理自己的程序. 2.独占性. 分时操作系

批处理系统,分时系统,实时系统

a 批处理系统:操作人员将作业成批装入计算机并由计算机管理运行,在程序的运行期间用户 不能干预, 因此批处理系统的特点是:用户脱机使用计算机,作业成批处理,系统内多道程 序并发执行以及交互能力差. b. 分时系统:不同用户通过各自的终端以交互方式共用一台计算机,计算机以“分时”的方法 轮流为每个用户服务. 分时系统的主要特点是:多个用户同时使用计算机的同时性, 人机问答的交互性,每个用户独立使用计算机的独占性,以及系统响应的及时性. c. 实时系统:实时监控控制对象并能做出及时反应. 实时系统的

浅析分时系统和实时系统

1.分时系统 分时系统(Time Sharing System),它能很好地将一台计算机提供给多个用户同时使用,提高计算机的利用率.它被经常应用于查询系统中,满足许多查询用户的需要.用户的需求具体表现在以下几个方面: (1)人-机交互.每当程序员写好一个新程序时,都需要上机进行调试.由于新编写的程序难免有些错误或不当之处需要修改,因而希望能像早起使用计算机时一样对它进行直接控制,并能以边运行边修改的方式,对程序中的错误进行修改,即,希望能进行人-机交互. (2)共享主机,在 20世纪60年代计算

实时信息处理系统和分时系统从外表看起来很相似,它们有什么本事区别呢?

本质区别; 与分时系统相比,实时系统没有那么强的交互会话功能,通常不允许用户通过实时终端设备去编写新的程序或修改已有的程序. 实时终端设备只是作为执行装置或咨询装置.属专用系统. 实时系统的特点: 1.实时响应.(响应时间比分时操作系统更快,一般为秒级,毫秒级,微秒级.) 2.高可靠性和安全性. 3.实时操作系统的终端设备通常只是作为执行装置或咨询装置,不允许用户通过实施终端设备去编写新的程序或修改已有的程序. 实时系统的特征: 1.必须满足控制对象的截止期限要求,否者认为系统失败. 2.可预测

多道批处理系统、分时系统和实时系统

 1.多道批处理系统 在单道批处理系统中,内存中仅有一道作业,它无法充分利用系统中的所有资源,致使系统性能较差. 在多道批处理系统中,用户所提交的作业都先存放在外存上并排成一个队列,称为"后备队列".然后,由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使它们共享CPU和系统中的各种资源.其优缺点为: (1)资源利用率高: (2)系统吞吐量大:系统吞吐量是指系统在单位时间内所完成的总工作量.能提高系统吞吐量的主要原因可归纳为:第一,CPU和其它资源保持"忙碌

操作系统第一章(仅期末复习)

第一章 操作系统引论 Summary:Operating System is the first layer of software configured on the computer hardware,which is the first expansion of the hardware system.Its primary role is to manage these devices,improve their utilization and system throughput,and

并发与并行的区别

并行(parallel)指在同一时刻,有多条指令在多个处理器上同时执行.就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑.所以无论从微观还是从宏观来看,二者都是一起执行的 并发(concurrency)指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行.这就好像两个人用同一把铁锨,轮流挖坑,一小时后,两个人各挖一个小一点的坑,要想挖两个大一点得坑,一定会用两个小时

异步,并发,并行的解释

异步 异步表明事情相互独立地发生,除非有强加的依赖性.生活也是异步的.这里的依赖性是大自然补充的,彼此互不相干的事情能够同时发生. 异步带来的最大复杂性就是如果你没有同时执行多个活动,那么异步就没有任何优势,如果你开始了一个异步活动,然后什么也不做就等他结束的话,那么你并没有从异步这里获得任何好处. 并发 并发的意思是指事情同时放生.并发是指实际上可能串行发生的事情好像同时发生一样.并发描述了单处理器系统中线程或进程的行为特点.在POSIX中,并发的定义要求"延迟调用线程的函数不应该导致其他线程