什么是操作系统?

大多数计算机用户都有一些操作系统的经验,但是很难准确地定义操作系统是什么。

问题的一部分在于操作系统执行的是,两个基本上不相关的功能,作为机器的扩展(extending the machine )和管理资源,并且取决于跟谁说话,平时主要听到的是其中一个方面,现在让我们一起看看这两者。

 

操作系统作为机器的扩展(作为机器的延伸)

如前所述,大多数计算机在机器语言级别上的体系结构(指令集、内存组织、I/O和总线结构)是原始的,难以编程,特别是对于输入/输出。

为了更具体地说明这一点,让我们简单地看看,基于Intel的个人计算机,所使用的NEC PD765兼容控制器芯片完成的软盘I/O,PD765有16个命令,每个命令通过向设备寄存器加载1到9个指定的字节。

这些命令用于读取和写入数据、移动磁盘臂和格式化跟踪,以及初始化、感知、重置和重新校准控制器和驱动器。

 

最基本的命令是读和写,每个命令需要13个参数,压缩为9个字节。这些参数指定要读取的磁盘块的地址、每个磁道的扇区数、物理介质上使用的记录模式、扇区间隙距离以及如何处理删除数据地址标记等项。

如果你不明白这个胡言乱语,不要担心,这正是问题所在——它相当深奥。当操作完成时,控制器芯片返回23个状态和错误字段,压缩成7字节。

似乎这还不够,软盘程序员还必须时刻意识到,电机是打开还是关闭的,如果电机是关着的,那么在读取或写入数据之前,必须先打开(启动延迟很长)。

然而,电动机不能开得太久,否则软盘就会磨损。因此,程序员不得不在长时间的启动延迟,和耗尽软盘(以及丢失软盘上的数据)之间进行权衡。

 

如果不深入讨论真正的细节,就不会发出,一般的程序员可能不太希望密切地参与软盘(或硬盘,它们同样复杂,而且有很大的不同)的编程。

相反,程序员想要的是一个简单的高级抽象来处理。 对于磁盘,典型的抽象是磁盘包含命名文件的集合。

每个文件都可以打开,然后进行读取或写入,最后关闭。在呈现给用户的抽象中,不应该出现是否应该记录使用修改过的调频,以及电机的当前状态等细节。

这个程序向程序员隐藏了硬件的真实细节,并提供了一个可以读写的命名文件,一个漂亮、简单的视图,这个程序就是操作系统。

 

如同操作系统保护程序员不受磁盘硬件的影响,而提供的面向文件的接口一样,操作系统还隐藏了许多与中断、计时器、内存管理,和其他低级特性有关的令人不快的事务。在每种情况下,操作系统提供的抽象,比底层硬件提供的抽象更简单、更容易使用。

在这个视图中,操作系统的功能是向用户提供等价的扩展机或虚拟机,这些扩展机或虚拟机比底层硬件更容易编程。

操作系统如何实现这一目标是一个漫长的故事,我们将在后面的章节中详细研究。简而言之,操作系统提供了各种各样的服务,应用程序可以使用称之为系统调用的特殊指令,来获得操作系统的这些服务。我们将在后面章节研究一些更常见的系统调用。

 


操作系统作为资源管理器

操作系统的概念主要是为用户提供方便的界面,这是一个自顶向下的视角。另一种从下往上的观点认为,操作系统是用来管理复杂系统的。

现代计算机由处理器、存储器、定时器、磁盘、鼠标、网络接口、打印机和各种各样的其他设备组成。另一种观点认为,操作系统的工作是在争夺处理器、内存和I/O设备的各种程序之间提供一种有序的、可控的分配。

 

想象一下,在一台计算机上运行的三个程序,都试图在同一台打印机上进行打印操作,会发生什么情况。

打印输出的前几行可能来自程序1,接下来的几行可能来自程序2,然后有一部分可能来自程序3等等,结果将是一片混乱,操作系统可以通过缓存,为潜在的混乱带来秩序。

一个程序完成操作后,操作系统可以从磁盘文件中,复制数据然后输出到打印机,同时另一个程序可以继续产生更多的内容,无视这一事实的不是真正的打印机。

 

当一台计算机(或网络)有多个用户时,管理和保护内存、I/O设备和其他资源的需求会更大,因为用户之间可能会相互干扰。此外,用户不仅需要共享硬件,还需要共享信息(文件、数据库等)。

简而言之,操作系统的这种观点认为,它的主要任务是跟踪谁在使用哪个资源,授予资源请求,说明使用情况,以及协调来自不同程序和用户的请求冲突。

 

资源管理包括以两种方式的资源多路复用(共享):时间和空间。当资源被时间复用时,不同的程序或用户轮流使用它,其中第一个使用资源,然后是另一个,依此类推。

例如,只有一个CPU和多个想在其上运行的程序,操作系统首先将CPU分配给一个程序,然后在它运行足够长的时间后,另一个程序使用CPU,然后是另一个,最后是第一个程序。确定资源是如何进行时间复用的,下一步是谁,操作系统的任务持续多长时间。

时间复用的另一个例子是共享打印机。当多个打印作业排队等待在一台打印机上打印时,必须决定下一步打印哪个作业。

 

另一种复用是空间复用,而不是客户轮流,每个人都获得资源的一部分。 例如,主内存通常在多个运行程序之间划分,因此各个程序间可以同时驻留(例如,为了轮流使用CPU)。

假设有足够的内存来容纳多个程序,将多个程序同时驻留在内存中,比单个程序全部占用更有效,尤其是程序只需要一小部分内存的情况, 当然,这会引发公平、保护等问题,并且由操作系统来解决它们。 另一种空间复用的资源是磁盘。

在许多系统中,单个磁盘可以同时保存来自多个用户的文件,分配磁盘空间并跟踪谁正在使用哪些磁盘块,是操作系统典型的资源管理任务。