正如前面所述,用户与操作系统的界面有多种方式。这里,讨论两种基本方案:
有的操作系统内核包括命令解释程序。其他操作系统,如 Windows 和 UNIX,将命令解释程序当作一个特殊程序,当一个任务开始或用户首次登录时(交互系统),该程序就会运行。对于具有多个可选命令解释程序的系统,解释程序称为外壳(shell)。
例如,UNIX 和 Linux 系统有多种不同外壳可供用户选择,包括 Bourne shell、C shell、Bourne-Again shell、Korn shell 等。也有第三方的外壳和用户自己编写的免费外壳。大多数外壳都提供相似功能,用户外壳的选择通常基于个人偏好。图 1 为使用 Solaris 10 Bourne shell 命令解释程序的案例。
命令解释程序的主要功能是,获取并执行用户指定的下一条命令。这层提供了许多命令来操作文件:创建、删除、列出、打印、复制、执行等。MS-DOS 和 UNIX 的外壳就是这么工作的。这些命令的实现有两种常用方法。
一种方法是,命令解释程序本身包含代码以执行这些命令。例如,删除文件的命令可让命令解释程序跳转到相应的代码段,以设置参数并执行相应系统调用。对于这种方法,所能提供命令的数量决定命令解释程序的大小,因为每个命令都要有实现代码。
另一种方法是,通过系统程序实现大多数的命令,常用于许多操作系统,如 UNIX。这样,命令解释程序不必理解命令,而只要通过命令确定一个文件,以加载到内存并执行。因此,UNIX 删除文件的命令
rm fuke txt
会查找名为 rm 的文件,将该文件加载到内存,并用参数 file.txt 来执行。与 rm 命令相关的功能是完全由文件 rm 的代码决定的。这样,程序员可以通过创建合适名称的新文件,轻松地向系统增加新命令。这种命令解释程序可能很小,而且在增加新命令时无需修改。
与操作系统交互的第二种方法是,采用用户友好的图形用户界面(GUI)。因此,用户不是通过命令行界面直接输入命令,而是利用桌面(desktop)概念,即采用基于鼠标的视窗和菜单系统。用户移动鼠标,定位指针到屏幕(桌面)上的图标(icon),而这些图标代表程序、文件、目录和系统功能。根据鼠标指针的位置,按下鼠标按钮可以调用程序,选择文件和目录(也称为文件夹(folder)),或打开菜单命令。
图形用户界面首次出现于 20 世纪 70 年代,部分源于 Xerox PARC 研究中心的研发工作。首个 GUI 于 1973 年出现在 Xerox Alto 计算机上。不过,直到 20 世纪 80 年代,随着 Apple Macintosh 计算机的出现,图形界面才更为普及。多年来,Macintosh 操作系统(Mac OS)的用户界面经历了很多变化,最重要的是 Mac OS X 采纳了 Aqua 界面。微软公司的首个 Windows 版本,即版本 1.0,为 MS-DOS 操作系统提供了 GUI。后来版本的 Windows 改进了 GUI 外观,并增强了许多功能。
由于鼠标不适用于大多数的移动系统,因此智能手机和手持平板电脑通常采用触摸屏界面。这样,用户交互就是在触摸屏上做手势(gesture),例如,在触摸屏上用手指点击和滑动等。图 2 为Apple iPad的触摸屏。虽说早期智能手机有键盘,但现在大多数智能手机只有触摸屏的模拟键盘。
传统而言,UNIX 系统主要采用命令行界面。不过,现在有多种 GUI,包括公共桌面环境(Common Desktop Environment,CDE)和 X 视窗(X-Windows)系统,常用于商用版本的 UNIX,如 Solaris 和 IBM AIX 系统。
另外,在图形用户界面设计方面,有重要贡献的还有开源项目,如 K 桌面环境(K Desktop Environment,KDE)和 GNU 项目的 GNOME 桌面(GNOME desktop)。KDE 和 GNOME 桌面都可运行于 Linux 和各种 UNIX 系统,并且采用开源许可,这意味着,根据许可,可以阅读和修改这些桌面的源代码。
选择命令行界面或 GUI 主要取决于各人喜好。管理计算机的系统管理员(system administrator)和了解系统很透彻的高级用户(power user)经常使用命令行界面。对他们来说,这样效率更高。事实上,有的系统只有部分功能可通过 GUI 使用,而其他不常用的功能则通过命令行来使用。再者,命令行界面对重复性的任务更为容易,其部分原因是它具有可编程的功能。
例如,某个常见任务包括一组命令行步骤,而且这些步骤可编成一个文件,而该文件可像程序一样运行。这种程序不是编译成可执行代码,而是由命令行界面来解释执行的。这些外壳脚本(shell script)较常用于以命令行为主的系统,如 UNIX 和 Linux。
相比之下,大多数 Windows 用户喜欢使用 Windows GUI 环境,而几乎从不使用 MS-DOS 命令行外壳界面。Macintosh 操作系统经历的各种变化提供了一个很好的对比研究。最初,Mac OS 没有提供命令行界面,而总是要求用户通过 GUI 与之交互。不过,随着 Mac OS X 的发行(其部分实现采用了 UNIX 内核),它包括了 Aqua 界面和命令行界面。图 3 为 Mac OS X GUI 的屏幕截图。
用户界面可随系统的不同甚至系统用户的不同而不同。它通常不属于系统内核。因此,友好并有用的用户界面设计不是操作系统的直接功能。本教程主要研究为用户程序提供足够服务这一根本问题。从操作系统角度,我们不必区分用户程序和系统程序。