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

点我查看秘籍连载

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

现代操作系统都支持多任务同时执行。在这里,操作系统对我们用户“营造了一种假象”,让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的上下文切换正是两个前后进程执行环境的切换。

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

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

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

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

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

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

原文地址:https://www.cnblogs.com/f-ck-need-u/p/11633451.html

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

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

并行的假象和分时系统

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

每天3分钟操作系统修炼秘籍(7):虚拟内存简介

点我查看秘籍连载 资源隔离:虚拟内存 前面描述的所有操作系统基础知识都是进程和CPU资源相关的内容,另一个操作系统中和进程相关的比较重要的话题是内存资源. 操作系统主要目的是执行程序,而程序在执行时,程序自身以及程序所访问的数据.所产生的数据都在内存里(至少所有数据的流向都会经过内存).此外,现代操作系统可以同时运行多个进程,而每个进程都有属于自己的一部分内存. 操作系统必须负责管理这些同时运行的这些进程的内存,并且还要保证进程A不会访问到进程B的内存,从而实现进程的隔离. 操作系统使用了一个称

每天3分钟操作系统修炼秘籍(8):虚拟内存分段

点我查看秘籍连载 进程的地址空间布局:分段 Linux的虚拟地址空间采用"分段+分页"结合的方式实现.先看分段,之后再介绍分页. 分段是将内存划分成各个段落(Segment),每个段落的长度可以不同,且虚拟地址空间中未使用的空间不会映射到物理内存中,所以操作系统不会为这段空间分配物理内存.这样的话,内核为刚创建的进程分配的物理内存可以很小,随着进程运行不断使用内存,内核再为进程按需分配物理内存.也就是说,尽管地址空间的范围和物理内存大小一样,但不会将全部空间映射到物理内存. 对于Lin

每天3分钟操作系统修炼秘籍(12):OOM和swap分区

点我查看秘籍连载 OOM和swap分区 进程的虚拟内存空间是映射到整个物理内存空间的,所以在进程自身看来它拥有了整个物理内存,它也能使用整个物理内存,只需在使用的时候请求操作系统帮忙分配更多空间即可. 但是,操作系统上并非只运行了一个进程,如果一个进程无休止的申请物理内存空间,最终会导致物理内存耗尽或即将耗尽,使得操作系统无法创建新进程,因为创建新进程需要为它分配虚拟内存. 所以,操作系统必须得监视物理内存的使用情况,在出现物理内存耗尽或即将耗尽的时候,如果进程继续请求分配内存,将报错out-o

转:攻城狮修炼秘籍

漫校园生活,孜孜不倦的你,今天书多读一点! 海康威视为你的假期精心准备了精神的饕餮大餐! 把自己投入知识的海洋吧!为即将成为一名高冷俊俏的程序猿和媛而吹响最后的号角: 各类秘籍自助区 一.测试攻城狮 <软件测试> <测试之道> 二.硬件攻城狮 基础理论:工程数学.积分变换.信号与系统.数字信号处理.自动控制原理.英语 专业课程:数电.模电.嵌入式系统.热设计.DDR3.flash.开关电源 (若有实践经验,可只看基础理论) 三.应用软件开发攻城狮 必读: <UNIX环境高级编

计算机基础-操作系统

为什么要有操作系统 计算机系统主要是由一个或者多个处理器,主存,硬盘,键盘,鼠标,显示器,打印机,网络接口及其他输入输出设备组成的一个非常复杂的系统. 程序员要管理和优化这些部件是一个极其复杂的工作,他们无法全面了解或者掌握这些操作细节,于是乎就出现了操作系统,由它来协调,管理和控制计算机软硬件资源.这样程序员就从这些繁琐的工作中解脱了出来,只需要考虑自己的应用软件的编写就可以了,应用软件直接使用操作系统提供的功能来间接使用硬件. 操作系统 操作系统位置 操作系统位于计算机硬件与应用软件之间,本

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

第一章 操作系统引论 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

13 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件  queue队列 生产者消费者模型 Queue队列 开发一个线程池

本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 操作系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 手工操作程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把

python之路-Day10

操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 操作系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 手工操作 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数