操作系统笔记
操作系统是每一名计算机科班生都必会的基础内容之一,借着考研的机会我参考王道图书重新学习了操作系统并记录下了我的一些浅显理解。

更新于 

什么是操作系统

操作系统的概念功能和目标

操作系统的结构分布

OS系统就是连接用户和应用程序与硬件之间的中间载体,他来实现两层结构间的数据交换,因此一个程序运行一定要在操作系统上才可以运行。

操作系统的定义

操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境。它是计算机系统中最基本的系统软件。

从上面的定义我们可以看出操作系统的几个根本功能:

  1. 操作系统是系统资源的管理者,任务是分配资源
  2. 为上层应用提供易用的服务和环境
  3. 是最接近硬件的一层软件(因此还是由算法编程实现的)

任务管理器中,左侧是对应的用户程序,而右侧就是硬件的信息。

思考:内存的作用?

执行一个程序前需要先将该程序(包裹执行代码,数据块)等放入内存中才可以在CPU上面执行。

以打开QQ和朋友聊天为例:

  1. 在各个文件夹中找到QQ安装的位置

    第一步是找到程序的存放位置,当然一般上左面的快捷方式直接映射到了执行程序的存放位置

  2. 双击打开QQ.exe

    将程序的执行代码和数据等放入内存中,做好准备后等待CPU执行此程序

  3. QQ程序开始运行

    执行程序开始在CPU上被执行

  4. 开始和朋友视频聊天

    需要将摄像头设备分配给QQ进程来使用

在上面得到一系列过程中存入内存,分配进程等工作就是OS系统的任务。

操作系统的功能–为上层提供方便易用的服务

向上层提供方便易用的服务

将各个硬件进行封装为多个功能接口并分配给进程程序使用。如下图:

美丽就好像一个接口他需要多个硬件提供支持,而操作系统就是提供接口的服务者,之所以软件层和硬件层不能直接运行而需要OS系统提供媒介的主要原因就是因为语言障碍,软件层是高级语言如“服务A”,而硬件层并不能理解,因此需要OS系统进行指令翻译为提供“美丽”接口同时传达给硬件层能够理解的二进制指令。

GUI:图形用户接口

封装思想:操作系统把一些丑陋的硬件功能封装为简单易用的服务,使用户能够更加方便的使用计算机,用户无需关心底层硬件的原理,只需要对操作系统发出命令即可。

类似于前后台,用户和程序就像前台,只关注于页面设计和数据呈现,而具体的数据提供与数据分析就是由硬件系统这一"后台"来完成,而他们之间的联系者就是OS,提供对应的接口。

很多现代的操作系统都提供了GUI,即图形化用户接口,用户可以使用形象的图形界面进行操作,而不再需要记忆复杂的命令,参数。例如下图:

因此像古老的计算机就是拥有的没有GUI的操作系统,无论是打开文件或者开关机都是需要输入相对应的指令的,而现在的计算机和手机等设备就是拥有GUI的现代操作系统,例如菜单栏,管理文档的文档区等都属于GUI,类似的应用程序也有有无GUI的区分,像vim等就是没有GUI的编辑器,他们需要手动输入指令来打开文件,退出文件等行动,而VSCODE就是拥有GUI的应用程序。

联机命令接口

联机命令接口是交互式命令接口。如win系统计算机必备的cmd窗口就是一个没有GUI的命令窗口。特点就是用户说一句系统就做一步,打开方式:

  1. win+R
  2. 输入cmd,回车,打开命令解释器
  3. 尝试使用time指令,ipconfig指令

类似像git命令窗口也是这种特点的接口,用户输入一条指令,就执行一步,然后在等待用户输入指令在执行。

脱机命令接口

脱机命令接口是批处理命令接口,例如win系统自带的文档搜索功能,他是在用户输入一条指令后进行多步处理即用户说一堆指令,系统跟着做一堆指令,这是与交互式命令接口的根本区别。

程序接口

可以再程序中进行系统调用来使用程序接口。普通用户不能直接使用程序借口,只能通过程序代码间接使用。例如程序猿编写程序时调用的C语言库就是一种程序接口的调用过程。

这种系统调用(或者叫做广义指令)类似于函数调用,使用用程序请求操作系统服务的唯一方式。例如C语言中的输出指令printf函数就是调用的C库函数中的一个原函数,相对应的就会在底层调用操作系统提供的显式相关的"系统调用",而一般平时情况用户是无法通过输入指令来通过操作系统调用这个接口的。

总结:

所有的有关软硬层直接的信息传输和功能调度都是一定要经过OS处理的,对于命令接口和程序接口了解即可。

操作系统的目标–作为最接近硬件得层次

简而言之,操作系统就是实现对硬件机器的扩展,只有一个裸机安装上了操作系统才能够提供方便用户的服务功能,从而大幅提高了机器的便捷性和功能使用性。我们通常把覆盖了软件的机器称为扩充机器或者虚拟机。

如果将一台设备比喻成一个汽车,那么硬件就像是发动机(只会转),轮胎(只会滚),在原始的硬件机器上覆盖一层系统才能够让发动机有目的性得带着轮子转,即操作系统是连接各个硬件的关键者,他使得各个独立工作的硬件之间产生了协调配合,互相合作的联系从而才能够使用简单的硬件设备之间的合作来实现复杂的功能。

总结

操作系统的四个特征

特征1–并发性

并发是指两个或多个事件在同一时间间隔内发生。这些事件宏观上看是同时发生的,但是实际上微观上看是交替发生的。即cpu频繁的不断切换为两个多个进程服务,因为进程并不是一直不间断的连续需要cpu时刻在旁边提供服务,而是在完成某个阶段的任务后向cpu发起一个服务需求,然后cpu在提供计算服务。这就类似于餐厅内的顾客和服务员,应用程序就像顾客,cpu就像服务员(因为这里讨论的是单核,所以就是一名服务员),服务员需要同时为这几桌的的顾客提供上菜等服务,所以整体上看可以同时为多个顾客提供服务,而微观上服务员一次只能为一个顾客提供服务,所以叫做同一时间间隔内发生。

思考:并行性与并发性的区别?

并行性就是指两个或多个事件在同一时间内发生,这个才是真正的微观上的同时发生,类似于每一个顾客都有一名服务员,他们之间如果同时需要服务时,则不需要等待或者频繁切换服务员走动,可以真正做到一人配一个实时服务的情况。因此也不难推测到,并行性一般对应是多核CPU,才可以做到同时执行多个程序,实现并行执行。但是注意并行性可不是操作系统的四大特征之一。

思考:并法与并行是互斥事件吗(即操作系统不能同时兼具)?

并不是,首先毋庸置疑,单核CPU的操作系统肯定就是只有并发性了,毕竟就一个可以提供服务的cpu,但是对于多核的计算机,一般是同时兼具并发性和并行性,原因很好理解,对一个n核cpu处理器,当需要同时服务n+k(k>0)个事件时,也需要并发执行,当然同时也是具有并行性的毕竟一次可以同步执行n个事件。

特征2–共享性

共享是指资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。

所以资源共享所说的也是宏观上的同时“共享”,在微观上来看,有可能是交替的对资源进行访问的(分时共享)。

互斥共享

例如QQ和微信同时使用视频聊天,但是同一段时间内摄像头只能分配给其中的一个进程使用。

同时共享

QQ发送文件A,同时微信发送文件B,两边都在同时读取发送硬盘里的文件资源,从读取数据来看他们宏观上在同时共享硬盘资源,但是微观上来看,两个进程还是交替着访问硬盘的。

思考:互斥共享和同时共享的本质区别?

首先需要声明,无论是这两种共享方式的哪一种本质上都不是真正的并行性共享,即都是分时共享,互斥共享指的仅仅是物理设备位置上的共享,时间上是根本不共享的,即这一时间段内就是只能有一个程序使用。而同时共享在物理设备位置上的共享基础上,在时间间隔内还有类似于并发性的特点,即这一段时间间隔内切换着同时为两个进程资源服务。至于真正做到的并行性共享即同一时间内两个进程或多个进程同时同地对于一个资源进行操作是尽量避免的,互斥锁也正是由这个应运而生的,因为会造成重大的Bug,应该尽量避免此类共享的发生。

思考:并发和共享的关系?

并发性是指计算机系统中同时存在着多个运行着的程序。而并发性是指计算机系统中的资源科供内存中多个并发执行的进程同时使用。

对于上面QQ和微信同时发送文件A和B的例子来看,并发性体现在两个进程在同一个时间间隔内共同执行,共享性体现在在同一段时间间隔内两个并发执行的程序同时共享的访问硬盘资源。

特质3–虚拟性

虚拟是指把一个物理上的实体变为若干个逻辑上的对应物,物理实体是实际存在的,而逻辑对应物是用户感受到的,但是并不是真实存在的。

举个例子,例如一个程序需要在第7个地址空间存储一个数据,然后再在第50000个地址空间存储一个数据,那么中间没有进行存储的8-49999地址空间不可能真正的留白空出,而是操作系统进行了虚拟化,比如物理地址上的1对应着虚拟地址7,物理地址上的3对应50000,这样就可以有效提高空间的利用率同时压缩了真实物理空间的大小。在实际生活中我们时常发现一个大型主机游戏需要4-20GB的运行内存,而我们的电脑一般只有4-8G的内存,理论上如果按照物理地址1:1对应映射存储的话,根本就不可能将程序放入到内存中(这里先不讨论内外存动态存储,就默认必须直接一次性全部放入才可执行),更别提运行程序了,这时候虚拟的特征就解决了这个问题。再比如,一个程序放入到内存后会分配给cpu执行,但是单核cpu的计算机在频繁切换执行时却可以给用户造成一种同时运行对个程序的感觉(当然实际上是并发运行的),这也能体现虚拟性,这种方法就体现了“分时复用”的一个特点。

思考:虚拟性和并发性的特点?

虚拟就是一种用逻辑上的映射来加快物理上的执行效率,从而产生了一种同时执行的错觉。所以虚拟是建立在并发的基础之上的,如果每次就运行一个程序,那么也就没必要实现虚拟了。

特征4–异步性

异步是指,在多道程序环境下,允许多个程序并发执行,但是由于资源有限(即使是用来虚拟,实际上空间也是远远不够的),进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是异步性。

思考:异步性和并发性的关系?

因为异步也是在多程序同时进行才能体现出来的特征,所以如果失去了并发性,即系统只能串行的运行各个程序,那么每个程序的执行就会一贯到底,也就没有异步性了,所以只有系统拥有并发性,才有可能导致异步性。

总结

我们通过上面的四大特征的定义以及思考对比,发现虚拟和异步都是建立在异步的基础上才会有可能体现出来的,而共享和并发则是相互体现,互为存在的条件,因此并发和共享才是一个操作系统的最基本额两个特征。

操作系统的发展与分类

这部分了解即可,主要是关注和理解各类不同的操作系统主要想解决的问题是什么,以及各自的优缺点。

手工操作阶段

最早的阶段,基本上等同于没有操作系统的阶段,就是人机交互,用户需要和硬件之间进行交互操作导致消耗大量时间,效率极低。即使机器的运行效率很快,但是运行时间的上限非常受人机交互操作的限制。

批阶段处理阶段

单道批处理系统

引入脱机输入、输出技术,(用外围机和磁道完成),并且由监督员负责控制作业的输入和输出),即输入和输出时不再是人机交互,而是引入一些类似磁带等外部接入设备加快输入与输出速度,如下图:

这样没有了超慢和慢两个环节,速度大幅提升:

但是缺点为内存中仅能有一道程序执行,运行结束后才可以调入下一个程序,即没有并发性,cpu利用率太低,空闲时间长。

多道批处理系统

既然读入的程序太少,那就多读,每次都输入多个程序存入内存中并发执行可以进一步加快速度:

多个程序并发进行,共享计算机的资源,资源利用率大幅提升,cpu和其他资源能够长时间保持“忙碌”状态,系统的吞吐量提升:

可以看到这种多条线有交集的就是并发性图的特点,现在流水线加工也一般是这种并发执行。

但是多道批处理系统仍然有缺点,即用户相应时间过长,从输入数据开始后用户就一直得等到输出完成,中间没有人机交互功能,即一旦将作业提交给机器就只能等待机器执行完,这期间用户无权在控制访问自己的作业,这种情况导致程序无法在机器执行时被用户调试或者用户在运行过程中添加其他的参数或选项(当然这种问题手工操作和单道批处理系统也是拥有此缺陷的,但是但是速度都上不来,就更没有考虑此问题,现在速度提上来以后又发现了新的缺陷)。当然多道批系统还是象征着操作系统开始出现,毕竟操作系统主要是为了提供人机随时交互的便捷服务,提升运行速度并不是其根本任务,当然也是重要任务之一。

分时操作系统

计算机以时间片为单位轮流的为各个用户/服务,各个用户可以通过终端(终端概念在此时出现)与计算机进行交互。

优点:用户请求可以及时响应了,及用户可以实时对作业进行暂停,加入新参数或者中途终止任务等,并且这种并发性执行也允许了多个用户同时使用一台计算机进行任务调度,并且用户对计算机的操作相互独立,感受不到其他用户的存在,即各个用户之间操作相互独立,互不打扰。

缺点:不能优先处理一些紧急任务,操作系统是对各个用户/作业绝对公平的,循环的为每一个作业服务一个时间片,不区分任务的紧急性。

实时操作系统

其实就是在分时操作系统的基础上解决了缺点,可以能够优先相应一些紧急任务,某些紧急任务不需要时间片排队,而是优先一直执行完。在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件(可以认为根据不同的事件的时限对每一个事件增加了优先级),这种操作系统主要特点为及时性和可靠性。

当然也有特例,例如软实时系统允许偶尔超时。

其他几种操作系统

网络操作系统

伴随着网络的产生应运而生的,能把网络中各个计算机有机集合,实现数据传送等,这种操作系统一般应用于后台大型服务器,主要是实现网络中各种资源的共享(如文件共享)和各台计算机之间的通信。

分布式操作系统

主要特点就是分布性和并发性,系统中的各台计算机地位相同,任何工作够可以分布在这些计算机上,由他们并行、协作完成。

个人计算机操作系统

个人使用,win XP,MacOS等,以上介绍的几种通常都是用于大型服务器的。

总结