1 为什么要有操作系统
程序员无法把所有的硬件操作细节都了接到,管理这些硬件并且加以优化使用时非常繁琐的工作,这个繁琐的工作就是操作系统来干的,有了操作系统,程序员就从这些繁琐的工作中解脱出来,只需要考虑自己的应用软件的编写就可以了,应用软件直接使用操作系统提供的功能来间接使用硬件。
2 什么是操作系统
操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。
操作系统的位置:
操作系统位于计算机硬件与软件之间,本质是一个软件。操作系统由操作系统的内核(运行与内核态,管理硬件资源)以及系统调用(运行于用户态,为应用程序员写的应用程序提供系统调用接口)两部分组成,所以,单纯的说操作系统是运行于内核态的,是不准确的。
操作系统分为两个部分:
(1) 隐藏了丑陋的硬件调用接口,为应用程序员提供调用硬件资源的更好,更简单,更清晰的模型(系统调用接口)。应用程序员有了这些接口后,就不用再考虑操作硬件的细节,专心开发自己的应用程序即可。
比如:磁盘资源的抽象是文件系统(C盘,D盘...以及下面的目录和文件),有了文件的概念,我们直接打开文件,读或写就可以了,无需关心记录是否应该使用修正的调频记录方式,以及当前电机的状态等细节。
(2)将应用程序对硬件资源的竟态请求变得有序化,例如:很多应用软件其实是共享一套计算机硬件,比如说有可能有三个应用程序同时需要申请打印机来输出内容,那么a程序竞争到了打印机资源就打印,然后可能是b竞争到打印机资源,也可能是c,这就导致了无序,打印机可能打印了一段a的内容然后又去打印b的内容。
操作系统的一个功能就是将这种无序变得有序(多路复用)
3 操作系统的作用
作用1:为应用程序提供如何使用硬件资源的抽象
例如:操作系统提供了文件这个抽象概念,对文件的操作就是对磁盘的操作,有了文件我们无需再去考虑关于磁盘的读写控制。
注意:
操作系统提供应用程序的该抽象是简单,清晰,优雅的。为何要提供该抽象呢?
硬件厂商需要为操作系统提供自己硬件的驱动程序(设备驱动,这也是为何我们要使用声卡,就必须安装声卡驱动。厂商为了节省成本或者兼容旧得硬件,他们的驱动程序是复杂且丑陋的。
操作系统就是为了隐藏这些丑陋的信息,从而为用户提供更好的接口。
作用2:管理硬件资源
现代的操作系统运行同时运行多道程序,操作系统的任务是在相互竞争之间有序地控制对处理器、存储器以及其他I/O接口设备的分配。
例如:
同一台计算机上同时运行三个程序,他们三个想在同一时刻在同一台计算机上输出结果,那么开始的几行可能是程序1的输出,接下来几行是程序2的输出,然后又是程序3的输出,最终是一团糟(程序之间是一种互相竞争资源的过程)。操作系统将打印机的结果送到磁盘的缓冲区,在一个程序完全结束后,才将暂存在磁盘上的文件送到打印机输出,同时其他的程序可以继续产生更多的输出结果(这些程序的输出没有真正的送到打印机),这样,操作系统就将由竞争产生的无序变得有序化。
4 多路复用
现代计算机或者网络都是多用户的,多个用户不仅共享硬件,而且共享文件,数据库等信息,共享意味着冲突和无序。
操作系统主要使用来
(1) 记录哪个程序使用什么资源
(2)对资源请求进行分配
(3) 为不同的程序和用户调解互相冲突的资源请求
我们可将上述操作系统的功能总结为:处理来自多个程序发起的多个(多个即多路)共享(共享即复用)资源的请求,简称多路复用。
多路复用的两种实现方式:
(1) 时间上的复用
当一个资源在时间上复用时,不同的程序或用户轮流使用它,第一个程序获取该资源使用结束后,在轮到第二个。。第三个。。
例如,只有一个CPU,多个程序需要在该cpu上运行,操作系统先把cpu分给第一个程序,在这个程序运行的足够长的时间(时间长短由操作系统的算法说了算)或者遇到了I/O阻塞,操作系统则把cpu分配给下一个程序,以此类推,直到第一个程序重新被分配到cpu然后运行。由于cpu的切换速度很快,给用户的感觉就是这些程序是同时运行的,或者说是并发的,或者说是伪并行的。至于资源如何实现时间复用,或者说谁应该是下一个要运行的程序,以及一个任务需要运行多长时间,这些都是操作系统的工作。
(2)空间上的复用
每个客户都获取了一个大的资源中的一小部分资源,从而减少了排队等待资源的时间。
例如:多个运行的程序同时进入内存,硬件层面提供保护机制来确保各自的内存是分割开的,且由操作系统控制,这比一个程序独占内存一个一个排队进入内存效率要搞的多。
有关空间多路复用的其他资源还有磁盘,在许多系统中,一个磁盘同时为许多用户保存文件,分配磁盘空间并且记录谁正在使用哪个磁盘快是操作系统资源管理的典型任务。
时间上的复用和空间上的复用合起来就是多道技术。
5 操作系统发展史
第一代计算机(1940-1955):真空管和穿孔卡片
第二代计算机(1955-1965):晶体管和批处理系统
第三代计算机(1965-1980):集成电路芯片和多道程序设计