操作系统的定义

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

问题之一在于操作系统所做的工作,是两个基本上不相关的功能:作为机器的扩展(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)。

假设有足够内存容纳多个程序,将多个程序同时驻留在内存中,比单个程序全部占用更有效,尤其是程序只需要一小部分内存的时候。

当然,这会引发公平、保护等问题,且由操作系统来解决。

另一种空间复用的资源是磁盘。

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