操作系统概念第二章–操作系统结构(上)

Aki 发布于 2023-02-20 244 次阅读


操作系统提供环境以便执行程序。操作系统的内部结构差别很大,有许多不同的组织方式。新操作系统的设计是一项重大任务。在开始设计前,系统目标的明确定义非常重要。这些目标是选择各种算法和策略的依据。

我们可以从多个方面来分析操作系统:第一个方面注重系统提供的服务;第二个方面关注用户和程序员采用的接口;第三个方面是系统组件及其相互关系。本章探讨操作系统的这三个方面,以便展示用户观点、程序员观点和操作系统设计人员的观点。我们研究以下问题:操作系统提供什么服务,如何提供服务,如何调试,操作系统设计的各种方法是什么。最后,我们描述如何生成操作系统以及如何启动计算机的操作系统。

操作系统的服务、

操作系统提供环境以便执行程序。它为程序及程序用户提供某些服务。当然,提供的具体服务随操作系统不同而不同,但还是有些是共同的。这些操作系统服务方便了程序员,使得编程更加容易。

操作系统有一组服务,用于提供用户功能:

  • 用户界面:几乎所有操作系统都有用户界面(User Interface,UI)。这种界面可有多种形式。一种是命令行界面(Command-Line Interface,CLI),它采用文本命令,并用某一方法输入(例如,键盘可按一定格式和选项来输入命令)。另一种是批处理界面( batch interface),命令以及控制这些命令的指令可以编成文件以便执行。最为常用的是图形用户界面(Graphical User Interface,GUI)。这种界面是一种视窗系统,它具有通过定位设备控制IO、通过菜单选择、通过键盘输入文本和选择等。有些系统还提供了两种甚至所有三种界面。
  • 程序执行:系统应能加载程序到内存,并加以运行。程序应能结束执行,包括正常或不正常(并给出错误)。
  • IO操作:程序运行可能需要I/O,这些IO可能涉及文件或设备。对于特定设备,可能需要特殊功能(如烧录CD、DVD或者清屏)。为了效率和保护,用户通常不应直接控制1/O设备。因此,操作系统必须提供手段以便执行1/O。
  • 文件系统操作:用户对文件系统特别感兴趣。显然,程序需要读写文件和目录,也需要根据文件名称来创建和删除文件,搜索某个给定文件,列出文件信息等。最后,有些操作系统具有权限管理,根据文件所有者允许或拒绝对文件和目录的访问。许多操作系统提供多种文件系统,有的允许个人选择,有的提供特殊功能或性能。
  • 通信:在许多情况下,一个进程需要与另一个进程交换信息。这种通信可能发生在运行于同一台计算机的两个进程之间,也可能发生在运行于通过网络连接的不同计算机的进程之间。通信实现可以通过共享内存(shared memory)(两个或多个进程读写共享内存区域),也可以通过消息交换(message passing)(符合预先定义格式的信息分组可以通过操作系统在进程之间移动)。
  • 错误检测:操作系统需要不断检测错误和更正错误。错误可能源于:CPU或内存硬件(如内存错误或电源故障)、IO设备(如磁盘奇偶检验出错、网络连接故障、打印机缺纸)、用户程序(如算术溢出、企图非法访问内存地址、占用CPU时间太长)等。对于每类错误,操作系统必须采取适当动作,确保计算的正确和一致。有时,它只能停机。也有时,它可以终结出错进程,或者将出错码返给进程以便进程检测或纠正。
  • 资源分配:当多个用户或多个作业同时运行时,每个都应分配资源。操作系统管理许多不同类型的资源。有的资源(如CPU周期、内存和文件存储)可能要有特殊的分配代码,而其他资源(如IO设备)可能只需通用的请求和释放代码。例如,为了更好地使用CPU,操作系统需要采用CPU调度算法,以便考虑CPU的速度、要执行的作业、可用寄存器的数量和其他因素。还有一些其他程序可以分配打印机、USB存储器和其他外设。
  • 记账:我们需要记录用户使用资源的类型和数量。这种记录可以用于记账(以便向用户收费),或统计使用量。统计使用量对研究人员很有用,可用于重新配置系统以提高计算服务。
  • 保护与安全:对于保存在多用户或联网的计算机系统的信息,用户可能需要控制信息使用。当多个独立进程并发执行时,一个进程不应干预其他进程或操作系统本身。保护应该确保可以控制系统资源的所有访问。系统安全而不受外界侵犯,也很重要。这种安全要求用户向系统认证自己(利用密码),以获取系统资源的访问权限。安全还包括保护外部IO设备(如网络适配器)不受非法访问,并记录所有非法的闯入企图。如果一个系统需要保护和安全,那么系统的所有部分都要预防。一条链的强度与其最弱的环节一样。

用户与操作系统的界面、

正如前面所述,用户与操作系统的界面有多种方式。这里,讨论两种基本方案。一种提供命令行界面或命令解释程序( command interpreter),允许用户直接输入命令,以供操作系统执行。另一种允许用户通过图形用户界面(GUI)与操作系统交互。

命令解释程序、

有的操作系统内核包括命令解释程序。其他操作系统,如 Windows和 UNIX,将命令解释程序当作一个特殊程序,当一个任务开始或用户首次登录时(交互系统),该程序就会运行。对于具有多个可选命令解释程序的系统,解释程序称为外壳(shell)。例如,UNIX和Linux系统有多种不同外壳可供用户选择,包括Bourne shell、C shell、Bourne-Again shell、Korn shell等。也有第三方的外壳和用户自己编写的免费外壳。大多数外壳都提供相似功能,用户外壳的选择通常基于个人偏好。

命令解释程序的主要功能是,获取并执行用户指定的下一条命令。这层提供了许多命令来操作文件:创建、删除、列出、打印、复制、执行等。MS-DOS和UNIX的外壳就是这么工作的。这些命令的实现有两种常用方法。

一种方法是,命令解释程序本身包含代码以执行这些命令。例如,删除文件的命令可让命令解释程序跳转到相应的代码段,以设置参数并执行相应系统调用。对于这种方法,所能提供命令的数量决定命令解释程序的大小,因为每个命令都要有实现代码。

另一种方法是,通过系统程序实现大多数的命令,常用于许多操作系统,如 UNIX。这样,命令解释程序不必理解命令,而只要通过命令确定一个文件,以加载到内存并执行。因此,UNIX删除文件的命令

rm fuke.txt -r

会查找名为rm的文件,将该文件加载到内存,并用参数file.txt,-r 来执行。与rm命令相关的功能是完全由文件rm的代码决定的。这样,程序员可以通过创建合适名称的新文件,轻松地向系统增加新命令。这种命令解释程序可能很小,而且在增加新命令时无需修改。

linux下的命令程序基本上都保存在/bin和/sbin目录下,两者的区别是sbin下的命令是root才能使用的,bin下的是普通用户能使用的。

图形用户界面、

与操作系统交互的第二种方法是,采用用户友好的图形用户界面(GUI)。因此,用户不是通过命令行界面直接输入命令,而是利用桌面(desktop)概念,即采用基于鼠标的视窗和菜单系统。用户移动鼠标,定位指针到屏幕(桌面)上的图标(icon),而这些图标代表程序、文件、目录和系统功能。根据鼠标指针的位置,按下鼠标按钮可以调用程序,选择文件和目录(也称为文件夹( folder)),或打开菜单命令。

图形用户界面首次出现于20世纪70年代,部分源于Xerox PARC研究中心的研发工作。首个GUI于1973年出现在Xerox Alto计算机上。不过,直到20世纪80年代,随着Apple Macintosh计算机的出现,图形界面才更为普及。多年来,Macintosh操作系统(MacOS)的用户界面经历了很多变化,最重要的是Mac OS X采纳了Aqua界面。微软公司的首个Windows版本,即版本1.0,为MS-DOS操作系统提供了GUI。后来版本的 Windows改进了GUI外观,并增强了许多功能。

由于鼠标不适用于大多数的移动系统,因此智能手机和手持平板电脑通常采用触摸屏界面。这样,用户交互就是在触摸屏上做手势( gesture),例如,在触摸屏上用手指点击和滑动等。图2-3为Apple iPad的触摸屏。虽说早期智能手机有键盘,但现在大多数智能手机只有触摸屏的模拟键盘。

界面的选择、

选择命令行界面CLI或GUI主要取决于各人喜好。管理计算机的系统管理员( system admi-nistrator)和了解系统很透彻的高级用户( power user)经常使用命令行界面。对他们来说,这样效率更高。事实上,有的系统只有部分功能可通过GUI使用,而其他不常用的功能则通过命令行来使用。再者,命令行界面对重复性的任务更为容易,其部分原因是它具有可编程的功能。例如,某个常见任务包括一组命令行步骤,而且这些步骤可编成一个文件,而该文件可像程序一样运行。这种程序不是编译成可执行代码,而是由命令行界面来解释执行的。这些外壳脚本(shell script)较常用于以命令行为主的系统,如 UNIX和Linux。

相比之下,大多数Windows用户喜欢使用Windows GUI环境,而几乎从不使用MSDOS命令行外壳界面。Macintosh操作系统经历的各种变化提供了一个很好的对比研究。最初,Mac OS没有提供命令行界面,而总是要求用户通过GUI与之交互。不过,随着MacOS X的发行(其部分实现采用了UNIX内核),它包括了Aqua界面和命令行界面。