操作系统简介

没有操作系统的软件,计算机基本上是一块无用的金属块。利用操作系统,计算机可以存储,处理和检索信息,播放音乐和视频,发送电子邮件,搜索互联网,并参与许多其他有价值的活动。

计算机软件大致可分为两类:管理计算机本身操作的系统程序,以及执行用户需求的应用程序。最基本的系统程序是操作系统,其工作是控制所有计算机的资源,并提供可以编写应用程序的基础。

在这里以MINIX 3的操作系统作为模型,来说明设计原则和实际的实现方案。

现代计算机系统包括一个或多个处理器,一些主存储器、磁盘、打印机、键盘、显示器,网络接口和其他输入/输出设备。总而言之,这是一个复杂的系统。编写程序来跟踪这些组件并正确使用它们,是一项极其困难的工作,更不用说最佳。

如果每个程序员都必须关注磁盘驱动器的工作方式,以及读取磁盘块时可能出现的所有问题,那么根本不可能编写大量程序。

很多年前,就表明必须找到一些方法来保护程序员免受硬件复杂性的侵害,后来逐渐发展为在裸硬件之上放置一层软件,管理系统的所有部分,并向用户呈现更易于理解,和编程的接口/虚拟机,这层软件就是操作系统。

操作系统的位置如图1-1所示。 底部是硬件,在大多情况下,硬件本身由两层或两层以上组成。 最底层是物理设备,包括集成电路芯片,电线,电源,阴极射线管和类似的物理设备。 它们是如何构建以及如何工作,都是电气工程师所关心的问题。

图1-1,计算机系统由硬件、系统程序和应用程序组成。

minix3介绍

接下来是微体系结构级别,其中物理设备被组合在一起以形成功能单元。 通常,该级别包含CPU(中央处理单元)内部的一些寄存器,和包含算术逻辑单元的数据路径。

在每个时钟周期中,从寄存器中取出一个或两个操作数,并在算术逻辑单元中组合(例如,通过加法或布尔AND)。

结果存储在一个或多个寄存器中。 在某些机器上,数据路径的操作由软件控制,称为微程序。 在其他机器上,它由硬件电路直接控制。

数据路径的目的是执行一些指令集。 其中一些可以在一个数据路径周期中执行; 其他可能需要多个数据路径周期。 这些指令可能使用寄存器或其他硬件设备。

汇编语言程序员可见的硬件和指令一起形成ISA(指令集架构),这个级别通常称为机器语言。

机器语言通常有50到300条指令,主要用于围绕机器移动数据、进行算术运算和比较数值。 在这个级别中,通过将值加载到特殊设备寄存器,来控制输入/输出设备。

例如,通过将磁盘地址、主存储器地址、字节计数和方向(读或写)的值,加载到其寄存器中来命令磁盘读取。

实际上,需要更多参数,并且在操作之后驱动器返回的状态可能很复杂。 此外,对于很多I/O(输入/输出)元器件,时序在编程中发挥着重要作用。

操作系统的一个主要功能是隐藏这些复杂性,并为程序员提供更方便的指令集。例如,从文件中读取数据块,在概念上比必须考虑移动磁头、等待它们稳定等诸多细节,要简单得多。


在操作系统之上是系统软件的其它部分,在这里,我们找到命令解释器(shell),桌面系统,编译器,编辑器和类似的独立于应用程序的程序。重要的是要意识到这些程序,绝对不是操作系统的一部分,即使它们通常由计算机制造商预先安装,或者在购买后安装在操作系统中。

这一点至关重要,但又很微妙。操作系统(通常)是以内核模式(kernel mode),或管理员模式(supervisor mode)运行的软件。它可以防止硬件被用户篡改(暂时忽略一些没有硬件保护的老式或低端微处理器)。

编译器和编辑器以用户模式运行,用户如果不喜欢特定的编译器,可以自由编写自己的编译器,但不能自由编写自己的时钟中断处理程序,它是操作系统的一部分,通常受硬件保护,防止用户企图修改它。

但是,在嵌入式系统(可能没有内核模式),或解释系统(例如使用解释而不是硬件来分离组件的,基于java语言的系统)中,这种区别有时是模糊的。不过,对于传统计算机,操作系统是在内核模式下运行的。

也就是说,在许多系统中,有以用户模式运行的程序,但是这些程序可以帮助操作系统,或执行特权功能。例如,通常有一个程序允许用户更改密码。

这个程序不是操作系统的一部分,也不是在内核模式下运行,但是它显然执行了一个敏感的功能,必须以一种特殊的方式进行保护。

包括MINIX 3在内的一些系统中,这种思想被发挥到了极致,一些传统上被认为是操作系统(比如文件系统)的部件,在用户空间中运行。

在这样的系统中,很难划清界限,在内核模式下运行的程序,显然都是操作系统的一部分,但是在内核模式之外运行的一些程序,也可能是操作系统的一部分,或者至少与操作系统密切相关。

例如,在minix3中,文件系统只是一个以用户模式运行的大型C程序。

最后,在系统程序之上是应用程序,用户购买(或编写)这些程序是为了解决他们的特定问题,如文字处理、电子表格、工程计算或将信息存储到数据库中。