为用户提供应用的硬件和软件可以视为一种层次结构(如下图所示)
如中央处理器、内存、输入和输出设备这样的硬件提供基本的计算资源;如数字处理程序、编译器、浏览器等这样的应用程序为用户解决问题,我们的操作系统则控制和协调各用户的应用程序对硬件的分配和使用
操作系统(Operating System,OS):是控制和管理整个计算机系统的硬件与软件资源,合理地组织、调度计算机的工作与资源的分配,进而为用户和其他软件提供方便接口与环境的程序集合,是计算机系统中的最基本系统软件
应用程序的用户,也就是终端用户通常并不关心计算机的硬件细节,因此终端用户把计算机系统视为一组应用程序。因此终端用户把计算机系统视为一组应用程序,一个应用程序可以用一种程序设计语言描述,并由程序员开发而成。
如果直接用机器指令开发应用程序则相当困难,这意味着你直接在和二进制打交道,并且用户与计算机进行交互时也是相当不友好的。所以我们在硬件之上安装操作系统,让操作系统对外暴露一些直接了当,简单易懂的接口,用户使用起来就非常方便了,用户无序关心底层逻辑怎样,只需用好接口即可
其实类比生活中的汽车,我们知道汽车的实现逻辑也是十分复杂的
但是作为用户我们需要知道它的实现原理吗?很显然不要,你只需要知道方向盘怎么用,油门怎么踩,怎么开安全
操作系统实际上不过是一组计算机程序,它与其他计算机程序类似,也给处理器提供指令,主要区别在于程序的意图。操作系统控制处理器使用其他系统资源,并控制其他程序的执行时机。但处理器要做这些事情时,必须停止执行操作系统程序,转而去执行其他程序,因此这时操作系统会释放对处理器的控制,让处理器去做一些其他有用的工作,然后用足够长的时间恢复控制权,让处理器准备好做下一项工作
为了给多道程序提供良好的运行环境,操作系统应该具有四大管理功能(注意后续的章节就是学操作系统是如何管理的)
现如今,我们和操作系统交流的方式主要依靠GUI(图形用户界面)
而早期的操作系统主要依靠命令行完成交互
不管怎么样这些都属于操作系统提供的接口,方便用户和操作系统交流。操作系统提供的接口主要有两类:
联机命令接口:又称为交互式命令接口,适用于分时或实时系统的接口。它由一组键盘操作命令组成。用户通过控制台终端输入操作命令,向系统提出各种服务要求。用户每输入一条命令,控制权就转给操作系统的命令解释程序,然后由命令解释程序解释并执行输入的命令,完成指定的功能。之后,控制权转回控制台或中断
@echo offset /p a="请输入:"echo %a%echo 请按任意键退出程序 & pause > nul
程序接口 由一组系统调用组成 。用户通过在程序中使用这些系统调用来请求操作系统为其提供服务。比如说经典的C语言中的printf,大家都知道它是用来向屏幕输出信息的,但是向屏幕输出东西很明显需要借助操作系统完成,因为这就是对于硬件的控制,所以printf在底层会调用类似接口。在Linux系统编程中我们就提及了,它其实调用了write接口向stdout输入了信息
没有任何软件支持的计算机称之为裸机。它仅构成了计算机系统的物质基础,而实际呈现在用户面前的计算机是经过若干层软件改造过的计算机。裸机在最里面,其外面是操作系统,操作系统所提供的资源管理功能和方便用户的各种服务功能,将逻辑改造成功能更强、使用更方便的机器。因此,我们通常把覆盖了软件的机器称为扩充机器或虚拟机
并发: 指两个或多个事件在同一时间间隔内发生,这些事件在宏观上是同时发生的,但是在微观上是交替发生的
操作系统的并发性: 指的是计算机系统“同时”运行着多个程序,这些程序宏观上看是运行着的,而微观上看是交替运行的
共享: 是指系统中的资源可供内存中的多个并发执行的进程共同使用
互斥共享很典型的例子就是摄像头,使用QQ进行视频聊天时,微信暂时就不能使用摄像头
互斥共享:当进程A访问某个资源时,必须先提出请求,若此时该资源空闲,则系统并将其分配给进程A使用,此后有其他进程也要访问该资源时,只要A没有用完就必须等待。当且仅当进程A访问并释放资源后,才运行另一个进程对资源进行访问。这一段资源称之为临界资源
这里的共享仍然是指宏观上的共享,其微观上可能也是交替地进行资源访问的。比较典型的资源就是磁盘设备
并发和共享是操作系统的两个最基本特征,两者互为存在的前提 。如果失去并发,则系统只有一个程序在运行,则共享就失去了存在的意义;如果失去共享,则两个程序无法同时访问资源,有些并发操作也无从谈起
虚拟: 是指把一个物理上的实体变为若干逻辑上的对应物。物理实体是实的,即实际存在的,而后者虚拟的,是用户感觉上的事物
虚拟处理器技术是通过多道程序设计技术,采用让多道程序并发执行的方法,来分时使用一个处理器。此时虽然只有一个处理器,但是他能同时为多个用户服务,让每个终端用户都感觉有一个CPU在为它专门服务。利用多道程序设计技术把一个物理上的CPU虚拟为多个逻辑上的CPU,称为虚拟处理器
类似的,可以采用虚拟存储器技术将一台机器的物理存储变为虚拟存储器,以便从逻辑上扩充存储器的容量,当然此时用户感觉到的内存容量是虚的,我们把用户感觉到的存储器称为虚拟存储器
还可以采用虚拟设备技术将一台物理I/O设备虚拟为多台逻辑上的I/O设备,并允许每个用户占用一台逻辑上的I/O设备,使原来仅允许在一段时间内由一个用户访问的设备也即临界资源,变为在一段时间内允许多个用户同时访问的共享设备
操作系统的虚拟技术也有
异步: 是指在多道程序环境下,允许多个程序并发执行,但是由于资源有限,进程的执行不能做到一气呵成,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性