在这个小节当中,我们会学习操作系统的四个特征。操作系统有并发、共享、虚拟和异步这四个基本的特征,其中并发和共享是两个最基本的特征,二者互为存在条件。
首先我们来看一下并发特征。并发是指两个或者多个事件同一时间间隔内发生,这些事件宏观上看是同时发生的,微观上其实是交替发生的。与并发概念比较,容易混淆的是并行的概念,并行是指两个或者多个事件在同一时刻同时发生。用一个例子来进行说明,假设有这样两个人,一个是小渣,一个是老渣,他们都有两个女朋友,然后有两个任务,都是分别是和一号约和二号约。对于小渣来说,他和一号二号一起约会。而老渣采用了一种更绿的约会方式,就是在各个时间段内,他交替的和两个女朋友进行约会。对于小渣的这种方式来说,它其实采用的就是并行约会的策略,并行的意思是指两个或者多个事件同一时刻同时发生。对于小渣来说,他在同一时刻同时在进行着两个
约会任务。而对于老渣来说,它采用的是并发约会的方式。在宏观上看,一整天老渣完成了两个约会任务,但是在微观上看,任何一个时刻老渣只在执行其中的某一个约会任务。所以这就是所谓的微观上交替发生,而宏观上同时发生的,并发的特征。经过这个例子,相信大家对并发和并行已经有了直观的理解。在了解了并发和并行的区别之后,再来看一下什么是操作系统的并发性。
操作系统的并发性指的是在计算机当中同时运行着多个程序,这些程序宏观上看它们是同时运行着的,但是微观上看其实是交替运行的。接下来再来看一下为什么并发性对于操作系统来说是一个很重要的基本特性。其实操作系统是伴随着多道程序技术出现的,这个会在下个小节操作系统的发展历史当中有进一步的介绍。总之,操作系统的出现,就是为了支持多道程序并发运行、同时运行而诞生的。需要注意一个很重要的考点,对于一个单核CPU来说,同一时刻只能执行一个程序,因此一个单核CPU的系统当中,各个程序肯定是只能并发的执行。但对于多核CPU来说,同一时刻可以同时执行多个程序。也就是说,多个程序可以并行的执行。举个例子,我们的英特尔第八代i3 处理器,它就是一种四核的CPU,四核CPU就意味着它可以并行的执行四个程序。比如说在上图CPU上,我们可以同时并行的运行微信、QQ、word还有Goodle这四个程序。但是如果此时有第五个程序,也想同时运行,比如说我们想听歌的话,就必须剥夺其中的某一个程序对CPU的使用权,比如说我们把word这个程序给换下CPU,然后让QQ这个程序上CP 运行,然后word和QQ这两个程序交替着来使用CPU。总之对于四核CPU来说,同一时刻只能同时执行四个程序。如果要有超过四个以上的程序同时运行的话,并发性依然是必不可少的,所以不管是早期的操作系统还是现代的操作系统,并发性都是操作系统一个很重要的、最基本的特性。
再来看第二个共享特性,共享也就是资源共享,是指系统当中的资源可以供内存当中的多个并发执行的进程共同使用。资源共享可以分为两种共享方式,一个是互斥共享,一个是同时共享。对于互斥来说是指在一个时间段内,资源只允许一个进程来使用,而同时共享是指在一个时间段内,它允许多个进程,资源允许多个进程同时对它进行访问。这个地方所谓的同时为什么要打双引号呢?因为它往往是在宏观上同时,而在微观上,可能是交替的对资源进行访问的。来看一个例子,对于互斥共享方式来说。比如说使用QQ和微信视频聊天,但是在同一时间段内,只会允许摄像头给其中的一个进程使用。比如用QQ和家人正在进行聊天。这个时候想用电脑的微信和小伙伴进行视频聊天的话,就会发现视频是发不出去的。因为会提示说摄像头已经被分配给其他的进程,这就是所谓的互斥共享方式,在一个时间段内,摄像头这个资源,它只能被分配给其中的一个进程使用。再来看第二个例子同时共享方式,我们可能会遇到这样的情况,用QQ给某人发送文件A,然后用微信发送文件B,在宏观上看来,微信和QQ的发送的进度条都是一直在往前推进的,所以在用户宏观上看来,两边都是在同时读取发送文件。这些文件是被放在硬盘里的,在用户看来就像是QQ和微信这两个进程都在同时访问硬盘这个资源,从中读取各自的文件数据,但事实上,微观上来看,这两个进程它们是交替的访问硬盘的。QQ先读出了文件A的某一部分,然后微信又读出文件B的某一部分,接下来又交替着让QQ读文件A的下一部分,以此交替的访问硬盘,所以这就是所谓的微观
上交替的访问硬盘资源的意思。这就是两个很典型的互斥共享和同时共享的例子。有的时候同时共享,有可能微观上确实在同时的共享资源,比如说你在玩游戏的时候听歌,你会发现扬声器声音输出设备一边在播放游戏的音效,同时还在播放音乐。所以在这种情况下,扬声器这个声音输出设备在微观上也是同时正在被音乐播放器和游戏这两个进程同时使用的,这个地方稍微注意一下。
我们再来看一下并发和共享的关系,通过上面的例子来分析,用QQ发送文件A,微信发送文件B,就说明QQ和微信两个进程是在并发的执行的,也就是有并发性,这两个进程需要同时完成发送文件的事情,所以他们需要共享的访问硬盘资源,又体现了它的共享特性。如果说系统失去了并发性,就说明在系统当中同一时间段只能有一个程序正在运行,也就意味着两个进程他们不需要同时共享,来访问硬盘资源,共享性也就失去了存在的意义。而另一个角度,如果说系统失去了共享性,QQ和微信这两个进程就没办法同时访问硬盘资源,也没办法同时发送文件。QQ和微信也就没办法并发的执行,如果失去了并发性,共享性就失去了存在的意义。如果失去了共享性,并发性就不可能被实现,所以并发和共享是互为存在条件的。这就是开篇提到的一个知识点。
下面再看第三个特征虚拟,虚拟是指把物理上的实体对应为若干个逻辑上的对应物。来看一个实际的例子,在需要执行一个程序的时候,要把程序放入到内存,并且给它分批分配CPU才能执行。一个特别喜欢的游戏GTA,这个游戏官方的数据是说它需要 4G的运行内存,除了这个游戏之外,我的电脑当中还有各种各样的别的应用软件,我的电脑其实只有4GB的内存,但是在我的电脑上,我可以同时打开GTA、QQ,还可以用微信、迅雷,同时还在用网易云音乐听音乐,看起来这么多的应用软件,它们总共需要的内存量是远大于 4GB的。但为什么又可以同时运行呢?其实这就采用了虚拟存储器技术,实际上这个电脑只有4GB的内存,也就是物理上的实体是4GB的内存,但在用户看来,它变成了逻辑上的对应物,看起来是远远大于4GB的,所以这就是虚拟技术的一个例子。虚拟存储器技术,其实就是虚拟技术当中的空分复用技术,这个地方大家只需要对虚拟存储器和空分复用技术能有一个印象就可以了,这两个知识点是第三章会重点讲解的知识点。
再看另外一个例子,在一个单核计算机下面,用户可以打开QQ,可以打开迅雷等等,这个电脑只有一个单核的CPU,既然如此,这个计算机当中为什么还可以同时执行这么多的程序。其实这就用到虚拟处理器的技术。实际上,只有一个单核CPU,这是物理上的实体,但是在用户看来,计算机似乎变成了六个CPU在为自己服务,这就是所谓的逻辑上的实体。虚拟处理器技术就是典型的时分复用技术,在微观上看,一整个大的时间段被分割为了一个一个微小的时间片、时间段,然后在各个时间段内处理机交替的为各个进程服务,这就是时分的意思,它把一个大的时间段分为了各个很小的时间片,所以这是时分复用技术。
再来回顾一下,刚才讲了实现虚拟性的虚拟技术,分为空分复用技术和时分复用技术,如果说操作系统失去了并发性,就意味着一个时间段只有一道程序在执行。从刚才分析的过程中可以看到,如果没有了并发性,时分复用技术和空分复用技术就没有存在的意义,也就是说虚拟性就没必要实现了,可以说没有并发性就谈不上虚拟性,虚拟性就没有存在的意义。
最后看第四个特性异步性,异步是指多道程序环境下,允许多个程序并发执行,但是由于资源有限,进程的执行不是一贯到底,而是走走停停,以不可预知的速度向前推进。用一个例子来帮助大家理解什么是异步。假设老渣现在要和两个女孩并发约会,一号女孩儿会让老渣干这样的两件事:首先是陪她吃饭,第二个是把心给她。二号女孩儿会让老渣先把心给她,然后再让老渣陪她吃饭。所以老渣在执行一号两条指令的过程,就相当于是在执行第一道程序,执行二号女孩两条指令的过程,就相当于是在执行第二道程序,这两道程序需要并发的执行,另外老渣只有一颗真心,所以老渣的心相当于这儿提到的有限的系统资源。由于这两道程序在系统中是并发的运行的,因此这两道程序有可能会争抢着使用这个资源。所以老渣在执行这两道程序的时候,有可能是这么约的。比如说刚开始他是和一号约,也就也就是执行了一号的第一条指令陪她吃饭,接下来的这个时间段也是和一号约,执行了她的第二个指令,根据一号的要求,老扎会把心给一号,也就是说这个系统资源分配给了一号,而接下来的时间段是要和二号约,二号要求老渣把心给他,但是由于此时老渣的心,这个有限的系统资源已经给了一号,并且一号没有把这个系统资源归还给老渣,所以二号要求老渣把心给他,这个请求就不能够被满足,所以二号程序运行到这个地方的时候,肯定需要被阻塞,需要先停一段时间,等获得了想要的资源之后,二号程序才可以接着往下执行。另一种情况,老渣还有可能是这么约的,刚开始有可能是和一号约,然后陪一号吃饭。接下来的时间段是和二号约,根据二号的指令,它把心给了二号。再接下来,他又和一号约,也就是说,此时他要执行一号的第二条指令,一号让老渣把心给他。但是由于此时这个有限的系统资源是被二号所占有的,并且二号没有归还给系统,因此一号把心给他的请求不能够被满足,所以这个第一道程序的执行就会被阻塞,然后等待系统资源的分配,所以从这个例子当中,我们很直观的可以看到在两道程序并发运行的过程当中。这些并发运行的程序,它们都会争抢着使用系统当中的资源,所以这些程序的运行并不是一贯到底,而是走走停停的,以不可预知的速度向前推进的,有的时候有可能是二号需要停下来等待,有的时候有可能是一号需要停下来等待。在实际的操作系统当中,各个并发运行的程序之间,也会出现这种争抢着使用有限的系统资源的情况,比如两个程序争抢着使用摄像头资源,或者争抢着使用打印机资源等等。所以这是多道程序环境下多个程序并发执行所带来的特性,也就是所谓的异步性。如果失去了并发性的话,就意味着系统只能串行的执行各个程序。也就是说第一道程序执行完了,一号把老渣的心归还给老渣之后,它才会接着执行第二道程序,在这种情况下,各个程序的执行肯定是会一贯到底的,并不会走走停停。所以说只有系统拥有并发性,才有可能会导致之前所说的异步性。
以上就是操作系统的四个特性,我们分别讲了并发、共享、虚拟和异步。在考试当中,我们需要重点关注的是这个并发和并行的区别。这个刚才我们用老渣和小渣两个约会的策略来进行了说明,另外注意并发和共享,它们是互为存在条件的,这个刚才已经解释过,如果没有并发,就谈不上虚拟和异步,而并发和共享本身又是互为存在条件的,所以可以这么说,没有并发和共享,就谈不上虚拟和异步,虚拟和异步就没有存在的意义,这就是为什么说它们是最基本的两个特征。
以上就是这个小节的全部内容。