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