首页 操作系统概念第三章 操作系统结构

操作系统概念第三章 操作系统结构

举报
开通vip

操作系统概念第三章 操作系统结构 http://www.tulipsys.com - 1 - Operating System Concepts (6th Edition) 第三章 操作系统结构 更新日期:2005.3.21 操作系统提供了程序执行的环境。各种操作系统的内部构成相当不同,它们沿着一些不同的思路组织。 新的操作系统的设计是重大的工作(major task)。设计之前必须要明确定义系统目标,针对所期望的系统 类型选择算法和策略。 可以从几个有利的位置来观察一个操作系统。首先是分析它所提供的服务。其次是分析它向用...

操作系统概念第三章 操作系统结构
http://www.tulipsys.com - 1 - Operating System Concepts (6th Edition) 第三章 操作系统结构 更新日期:2005.3.21 操作系统提供了程序执行的环境。各种操作系统的内部构成相当不同,它们沿着一些不同的思路组织。 新的操作系统的设计是重大的工作(major task)。设计之前必须要明确定义系统目标,针对所期望的系统 类型选择算法和策略。 可以从几个有利的位置来观察一个操作系统。首先是分析它所提供的服务。其次是分析它向用户和程 序员提供的接口。最后是分析系统组件和这些组件之间的联系。本章我们将研究操作系统的这三个特征, 并展现用户、程序员以及操作系统设计者的观点。我们要考虑:操作系统提供了什么样的服务、它是怎样 提供这些服务的,以及设计这样的系统需要什么样的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 学理论。 3.1 系统组件 构造像操作系统这样大型的复杂的系统就必须要把它划分成许多小块(piece,可以理解为子系统)。 每一小块必须是系统某一部分的详细定义,包括输入、输出和功能。显然,不是所有的系统都有着同样的 结构。然而许多现代操作系统有着同样的目标,就是支持从 3.1.1 节到 3.1.8 节所列出的系统组件。 3.1.1 进程管理 程序本身并不能做什么,只有在 CPU 执行它的指令时才能有所作为。可以把进程看作是正在运行的 程序,但是当我们进一步研究时,对进程的定义将更为普遍。一个分时用户程序(如编译器)是一个进程。 个人用户在 PC 上运行的字处理程序是一个进程。一个系统任务(如输出到打印机)也是一个进程。现在, 我们认为进程是一个作业或分时程序,但是,稍后你将明白这个概念更加普遍。在第四章中将会看到我们 可以提供允许进程创建与其并发执行的子进程的系统调用。 进程需要特定的资源(包括 CPU 时间、内存、文件和 I/O 设备)来完成工作。这些资源或者在进程创 建时分配给它,或者在其运行时。除了在进程创建时所获得的各种物理资源和逻辑资源以外,各种各样的 初始化数据(或输入)也可能一同传送给进程。例如,考虑一个能够在终端的显示屏上显示一个文件状态 的进程。这个进程将获得包含输入的文件名,并且将执行相应的指令和系统调用来获取所期望的信息并显 示在终端上。 我们着重强调程序本身不是进程;程序是静态实体(passive entity)(像是存储在磁盘中的文件的内容), 而进程是动态实体(active entity),它用一个程序计数器来指明要执行的下一条指令。进程必须要按顺序 执行。CPU 执行完进程的一条指令后再执行下一条,直到进程结束。更进一步讲,一次最多执行一条代表 该进程的指令。这样,从来就不会出现两个独立运行的序列。一个程序在运行时创建多个进程是非常普遍 的。 在系统中,进程是工作单元。这样的系统由进程集合构成,有些是操作系统进程(那些执行的系统代 码),其它的是用户进程(那些执行的用户代码)。通过对 CPU 的多路复用,所有的这些进程可以被并发 执行。 操作系统要负责下列与进程管理相关的工作: ·创建和撤销用户及系统进程 ·挂起和恢复进程 ·提供进程同步机制 ·提供进程通信机制 ·提供死锁处理机制 我们将在第四章到第七章中讨论进程管理。 3.1.2 主存储器管理 就像我们在第一章中所讨论的,主存储器是现代计算机系统运行的核心。主存储器是由字或字节组成 的大型队列,容量在数十万到数十亿之间。每个字或字节都有它自己的地址。主存储器是 CPU 和 I/O 设备 共享的大容量快速存储器。中央处理器在取指令周期中从主存储器中读取指令,而且在取数据周期中从主 存储器中读写数据。通过 DMA,I/O 操作也实现了对主存储器的数据读写。通常主存储器是 CPU 唯一能 http://www.tulipsys.com - 2 - 够直接寻址和访问的大容量存储空间。例如,CPU 要处理磁盘中的数据,那么 CPU 首先发出 I/O 调用将 这些数据传送到主存储器中。同样,指令必须在存储器中才能够由 CPU 执行。 必须要把程序映射到绝对地址并载入内存中才可以执行。在程序运行时,它通过产生绝对地址来从内 存中访问程序指令和数据。最后,程序结束,它将释放所占内存空间,下一个程序能够被载入并执行。 为了提高 CPU 利用率和计算机响应速度,我们必须在内存中保留多个程序。有许多不同的内存管理 策略,而且不同算法的效率取决于具体的环境。为具体的系统选择内存管理策略要考虑到许多因素——尤 其是系统的硬件设计。每种算法都需要自己的硬件支持。 操作系统要负责下列与内存管理相关的工作: ·跟踪内存使用情况,明确哪一部分正在使用和为谁所用 ·在内存空间有效时决定将哪个进程载入内存 ·根据需要分配和释放内存空间 将在第九章和第十章中讨论内存管理技术。 3.1.3 文件管理 文件管理是操作系统中可视性最强的组件之一。计算机能够将数据存储在各种类型的物理介质上。磁 带、磁盘和光盘是最常用的介质。每种介质都有自己的特性和物理结构。每个存储媒体由一个驱动器控制 (如磁盘驱动器或磁带驱动器),这种驱动器也有自己的独有特性。这些特性包括访问速度、容量、数据 传输率和存取方式(顺序的或随机的)。 为了便于使用计算机系统,操作系统提供了一个计算机系统的整体逻辑层面。操作系统把存储设备的 物理属性抽象定义为一个逻辑存储单元——文件。文件被映象到物理媒介中,通过存储设备来访问这些文 件。 文件是由其创建者定义的相关信息的集合。一般的文件表现为程序(源程序和目标代码)和数据。数 据文件可能是数字的、字母的或二者混合的。文件可能是形式自由的(如文本文件),也可能有严格定义 的格式(如固定字段)。(Files may be free-form (for example, text files), or may be formatted rigidly (for example, fixed fields).)由字、字节、行或 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 组成的文件结构是其创建者定义的。文件概念具有相当广泛的含义。 操作系统通过管理大量存储体(如由驱动器控制的磁盘和磁带)实现了文件的抽象概念。另外,为了 更简易的使用文件,通常将他们组织到目录中。最后,如果有多个用户访问文件,我们可能需要控制谁以 什么样的方式访问(例如:读、写、追加)。 操作系统要负责下列与文件管理相关的工作: ·创建和删除文件 ·创建和删除目录 ·将文件映象到辅助存储器中 ·将文件备份到永久(非易失性)存储体中 我们将在第十一章和第十二章中讲述文件管理技术。 3.1.4 I/O 系统管理 操作系统的目的之一就是要向用户隐藏具体的硬件特性。例如,在 UNIX 中,通过 I/O 子系统向操作 系统本身隐藏了 I/O 设备的特性。I/O 子系统由以下几个方面组成: ·一个内存管理模块,这包括:buffering、caching 和 spooling ·一个通用设备驱动程序接口 ·针对具体硬件设备的驱动程序 只有设备驱动程序了解所指定的具体设备特性。 在第二章中我们讨论了高效的 I/O 子系统结构是如何应用中断处理程序和设备驱动程序的。在十三章, 我们将讨论 I/O 子系统怎样与其它的系统模块相连、怎样管理设备、怎样传输数据和怎样探测 I/O 操作结 束。 3.1.5 辅助存储器管理 操作系统的主要目的是执行程序。这些程序在运行时(以及它们要访问的数据)都必须在主存储器中。 因为主存储器的容量太小不能存储所有的程序和数据,而且掉电后会丢失所有的存储信息,所以计算机系 http://www.tulipsys.com - 3 - 统必须要提供辅助存储器作为主存储器的后备。大多数现代计算机系统使用磁盘作为存储程序和数据的主 要联机存储体。大多数程序(包括编译程序、汇编程序、排列程序、编辑程序和格式化程序)在载入内存 之前存储在磁盘上,并且在运行时利用磁盘存储它们所处理的源文件和目标文件。因此,合理的磁盘管理 对一个计算机系统来说是至关重要的。 操作系统要负责下列与辅助存储器管理相关的工作: ·空闲空间管理 ·空间分配 ·磁盘调度 因为频繁的使用辅助存储器,所以必须要能够高效运行。计算机的整体运行速度取决于磁盘子系统的 速度和该子系统的实现算法的效率。将在第十四章讨论辅助存储器管理。 3.1.6 网络管理 分布式系统是一个处理机的集合,这些处理机既不共享内存和外围设备,也不共享时钟。而是每个处 理机拥有自己的本地内存和时钟,并且这些处理机可以通过各种通信线路(如高速总线或网络)进行通信。 一个分布式系统中的处理机在规模和功能上有所不同。其中可能包括小型微处理器、工作站、小型机和大 型通用计算机。 在(分布式)系统中,处理机通过通讯网络相连接,有多种不同的方法可以配置该网络。这种网络可 以完全或部分的连接。通信网络的设计必须要考虑到报文路由选择和连接策略,以及争用和安全的问题。 分布式系统将物理上相互独立的可能不同种类的系统集合成为一个独立相连的系统,向用户提供了访 问由系统维护的各种资源的能力。对共享资源的访问加快了计算速度、增强了系统功能、提高了数据的可 用性并加强了可靠性。操作系统把网络细节包含在了网络接口设备驱动程序中,于是将网络访问泛化为一 种文件访问的形式。(Operating systems usually generalize network access as a form of file access, with the details of networking being contained in the network interface’s device driver.)分布式系统所使用的 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 在很大 程度上影响到系统的效用和普及。环球网的创新在于为信息共享提供了新的途径。它改进了现有的文件传 输协议(FTP)和网络文件系统(NFS),去掉了用户必须登陆才能访问远程资源的限制。环球网定义了一 个新的协议——超文本传输协议(http),它用于在 web 服务器和 web 浏览器之间进行通信。一个 web 浏 览器只需要向远程机器的 web 服务器发送一个信息请求,然后获得返回信息(文本、图片、指向其它信息 的链结)。这种在易用性上的提高促进了 http 和 Web 应用的快速成长。 我们将在第十五章到第十七章中讨论网络和分布式系统。 3.1.7 系统保护 如果一个计算机系统有多个用户并允许并行执行多个进程,那么必须要保护各个进程免受其它进程的 侵扰。为此,需要提供一种机制来保证只有那些从操作系统获取了合适权限的进程能够操作文件、存储段、 CPU 和其它资源。 例如,内存寻址硬件确保了一个进程只能在自己的地址空间内执行。计时器确保进程最终能够放弃对 CPU 的控制。用户不能够访问设备控制寄存器,这样就保护了各种外围设备的完整性。 保护是由操作系统定义的控制程序、进程或用户访问的机制。这个机制必须要提供一种方法来描述要 施加的控制,以及强制执行的方法。 通过检测子系统接口中潜伏的错误,保护能够增强系统的可靠性。对接口错误的早期检测常常能够阻 止一个子系统故障波及到其它正常的子系统。一个未受保护的资源难以防止未授权或不适当的用户的使用 (或误用)。一个面向保护的系统提供了一种区分经授权的和未授权的使用的方法,这将在第十八章中讨 论。 3.1.8 命令解释程序 命令解释程序是操作系统中最重要的系统程序之一,它是用户和操作系统间的接口。有些操作系统在 内核中包含了命令解释程序。其它的操作系统(像 DOS 和 UNIX)把命令行解释器当作一个特殊的程序, (在分时系统中)当一个用户登陆到系统或初始化一个任务时,它就已经在运行了。 许多命令是通过控制语句提供给操作系统的。(Many commands are given to the operating system by control statements.)当批处理系统中的一个新作业开始时,或当一个用户登录到分时系统中时,一个读取 http://www.tulipsys.com - 4 - 并解释控制语句的程序会自动运行。这个程序有时被称为控制卡片解释程序或命令行解释程序,而且经常 被称为 shell。它的功能很简单:获取下一条命令语句并执行。 通常操作系统在命令解释程序方面的差别很大,一个用户界面友好的命令解释程序会使操作系统更容 易为一些用户所接受。用户界面友好的一个风格是用在 Macintosh 和 Microsoft Windows 中的基于鼠标的窗 口菜单系统(mouse-based window-and-menu system)。可以移动鼠标的位置以指向图像、图标,或屏幕(屏 幕用于显示程序、文件和系统功能)上。根据鼠标指针的定位,单击鼠标上的按钮可以执行一个程序、选 择文件或目录(被称为文件夹)或弹出一个包含命令的菜单。有些用户喜欢功能更强大更复杂也更难掌握 的命令解释程序。在这些命令解释程序中,通过键盘键入命令并在屏幕上显示或在终端上打印出来,然后 通过“enter”(或“return”)键向命令解释程序发出信号,告知一条命令输入完成并等待运行。MS-DOS 或 UNIX 命令解释程序就是以这种方式执行。 命令语句本身负责进程的创建和管理、I/O 管理、辅助存储器管理、主存储器管理、文件系统访问、 保护和网络。 3.2 操作系统服务 操作系统提供了程序运行的环境。它为程序和程序用户提供了特定的服务。当然,不同的操作系统提 供的具体服务不同,但是我们能够找出其共同部分。提供的这些操作系统服务是为了便于程序员设计程序。 ·程序执行:系统必须要能够将程序载入内存并运行它。程序必须能够正常的或异常的(指示错误) 结束运行。 ·I/O 操作:一个正在运行的程序可能要请求 I/O 操作。这可能会涉及到文件或 I/O 设备。针对具体 的设备,需要特定的功能(如倒卷一个磁带驱动器或清空一个 CRT 屏幕显示)。出于系统效率和保护的原 因,用户通常不能够直接控制 I/O 设备。因此,操作系统必须要提供一种 I/O 运行机制。 ·文件系统处理:文件系统相当有意思。显然,程序需要能够读写文件,也要能够创建和删除文件。 ·通信:在很多情况下,一个进程需要与另外一个进程交换信息。这种通信可以通过两种主要的方式。 第一种方式是在运行在同一台计算机上的进程间通信;另外一种是在运行在由一个计算机网络连接的不同 的计算机系统上的进程间通信。可以通过共享存储器或报文传送(这种方式中,操作系统在进程之间将信 息打包移动)的方式实现进程间的通信。 ·错误检测:操作系统需要经常注意可能发生的错误。错误可能发生在 CPU 和内存(如存储错误或 电源故障)、I/O 设备(如磁带奇偶检验错误、连结网络失败或打印机缺纸)以及用户程序(如运算溢出、 试图访问非法存储器地址或过多占用 CPU 时间)中。对于每种类型的错误,操作系统应该能够采取针对 性 措施 《全国民用建筑工程设计技术措施》规划•建筑•景观全国民用建筑工程设计技术措施》规划•建筑•景观软件质量保证措施下载工地伤害及预防措施下载关于贯彻落实的具体措施 以确保计算的正确性和相容性。 另外,存在着另外一些操作系统功能,它们不是为了帮助用户工作,而是为了确保系统本身的高效运 行。通过在多个用户间共享计算机资源,多用户系统能够获得高运行效率。 ·资源分配:当多个用户登录到系统中或同时有多个作业运行时,必须要在它们之间分配资源。操作 系统管理许多不同类型的资源。有些资源(如 CPU 周期、主存储器和外存储器)可能有专用的分配代码, 而其它的(如 I/O 设备)可能有更通用的请求和释放代码。例如,在决定如何最好的使用 CPU 的问题上, 操作系统的 CPU 调度程序要考虑到 CPU 速度、必须要执行的作业、有效的寄存器数量和其它的一些因素。 也可能有一些程序用于向作业分配磁带驱动器。一个这样的程序定位一个未用的磁带驱动器并将该设备的 新用户记录在内部表中。其它的程序用于清空这个表。这些程序也能够分配绘图仪、调制解调器和其它外 围设备。 ·账户管理:我们希望跟踪记录每个用户使用哪些类型的计算机资源和用了多少。这个记录保持可能 用于记账(以便用户付账)或简单的用于累加使用率统计。对于研究者来说,使用率统计可能是个有效的 工具。利用使用率统计,研究者可以重新配制系统以改善计算服务。 ·保护:存储在多用户计算机系统上的信息的所有者希望能够控制对该信息的使用。当多个不相关的 进程并发执行时,一个进程不应该能够干扰其它进程或操作系统本身。保护包括了监控所有对系统资源的 访问。对来自外界的系统安全检测(security)也是非常重要的。这种保护往往通过密码的方式,用户向系 统验证口令才能访问资源。它也包括了保护外部 I/O 设备(包括调制解调器和网络适配器)免于非法的访 问企图和记录所有这样的非法闯入。如果一个系统受到保护并且是安全的,那么就必须要建立预防措施。 http://www.tulipsys.com - 5 - 系统的安全强度只与其最薄弱的一环有关。(A chain is only as strong as its weakest link.) 3.3 系统调用 系统调用提供了进程和操作系统间的接口。这些调用通常是以汇编语言的形式,而且它们通常会在汇 编语言程序员的使用手册中列出来。 某些系统允许高级语言直接进行系统调用,这通常是将系统调用预定义为函数或子程序调用。它们调 用一个指定的运行时程序(run-time routine),这个程序完成系统调用,或者直接在代码里加入系统调用。 有些语言(如 C、C++和 Perl)已经取代了汇编语言进行系统程序设计。这些语言允许直接进行系统 调用。例如,在 C 或 C++程序中可以直接调用 UNIX 系统调用。Microsoft Windows 平台中的系统调用是 Win32 应用程序接口(API)的一部分,Win32 API 可以用于所有针对 Microsoft Windows 的编译器。 作为一个使用系统调用的例子,考虑一个简单的程序,它从一个文件中读取数据并将数据拷贝到另外 一个文件中。这个程序首先需要获得这两个文件的文件名:输入文件和输出文件。指定文件名的方法有很 多种,这要看具体的操作系统。一种方法是由程序向用户询问这两个文件的名称。在交互式系统中,这种 方法将请求一系列系统调用:首先在屏幕上写出提示信息,然后读取键盘的输入字符(这些字符指定了两 个文件)。在基于鼠标的窗口菜单系统中,一个名为“文件”的菜单通常显示在窗口上。用户可以使用鼠 标选择源文件名,并且能够打开一个类似的窗口用于指定目标文件。 一旦获得了这两个文件名,这个程序就要打开输入文件并创建输出文件。这些操作的每一步都需要请 求另外的系统调用,并可能会出现错误。当这个程序尝试打开输入文件时,它可能会发现没有这个名字的 文件存在或文件被访问保护。在这种情况下,程序必须在控制台上打印出一段消息(要用到另外的系统调 用),或者我们删除现存的文件(也要用到另外的系统调用)并创建一个新文件(又要用到另外的系统调 用)。在交互式系统中,程序会询问用户是替换现有文件还是终止程序。 现在两个文件都建立起来了,接下来,我们从输入文件中循环的读出数据(用到一个系统调用),然 后写入输出文件(用到另一个系统调用)。每个读写操作必须要返回状态信息以便于考虑各种可能出现的 错误。在输入过程中,程序可能会发现到达文件末端或在读取时发生了硬件故障(比如奇偶校验错误)。 在输出过程中,依据不同的输出设备,可能会发生各种错误(比如,磁盘空间不足,磁带末端,打印机缺 纸)。 最后,在完成对整个文件的拷贝之后,程序就需要关闭这两个文件,向控制台中写一段消息(需要另 外的系统调用)并最终正常结束(最后的系统调用)。正如我们所看到的,即使是一个简单的程序也可能 要调用大量的系统调用。 然而大多数用户从未见到过这些细节。运行时(run-time)支持系统(功能构件在库中,并且包含一 个编译器)为高级语言提供了更为简洁的接口。例如,C++中的 cout 语句被编译为一条对 run-time 支持程 序的调用,该程序进行必要的系统调用,检查错误并最终将结果返回给用户程序。这样,编译器和 run-time 支持包向程序员隐藏了操作系统接口的大部分细节。 根据对计算机的使用情况,有多种方式可以进行系统调用。在进行系统调用时通常需要更多的信息, 而不仅仅是系统调用的标识。根据具体的操作系统和系统调用,所需的信息类型和数量不尽相同。例如, 为了获取输入,我们可能需要指定文件或设备作为信息来源,并且要把地址和内存缓冲区的长度放到输入 读取的位置。(For example, to get input, we may need to specify the file or device to use as the source, and the address and length of the memory buffer into which the input should be read.)当然,设备或文件以及长度可能 隐含在调用中。 有三种通用的方法可以向操作系统中传送参数。最简单的方法是将参数传送到寄存器中。然而,在某 些情况下寄存器存不下所有的参数。这样,通常将参数存储到内存中的块或表中,然后将内存块的地址作 为参数传送到寄存器中(图 3.1)。Linux 采用了这种方法。也可以使程序将参数放置或推入堆栈中,然后 由操作系统从堆栈中弹出。有些操作系统更喜欢利用块或堆栈,因为这些方法没有限制参数的数量和长度。 http://www.tulipsys.com - 6 - Figure 3.1 Passing of parameters as a table. 可以大概的将系统调用分为五类:进程控制、文件管理、设备管理、信息维护和通信。从 3.3.1 节到 3.3.5 节,我们简要的讨论一个操作系统可能会提供的系统调用的类型。其中大多数这些系统调用支持(或 被支持)后面的章节中所讨论的概念和功能。图 3.2 概述了一个操作系统通常提供的系统调用类型。 http://www.tulipsys.com - 7 - http://www.tulipsys.com - 8 - Figure 3.2 Types of system calls. 3.3.1 进程控制 正在运行的程序需要能够正常(结束)或非正常(异常终止)的结束执行。如果一个程序是被一个系 统调用异常终止的,或者是程序运行时出现问题并产生了错误自陷,有时要使用一段内存信息和产生的错 误消息。这段内存被转储到磁盘上,以便调试器检查问题的起因。在正常或异常的情况下,操作系统都必 须将控制移交给命令解释程序。然后,命令解释程序读取下一条命令。在交互式系统中,命令解释程序简 单的继续下一条命令;它假设用户对任何错误都有合适的命令处理。在批处理系统中,命令解释程序通常 会终止整个作业并开始下一个作业。有些系统允许控制卡片指明在错误发生时做出指定的校正动作。如果 一个程序发现了一个输入错误并希望能够异常终止,那么它可能也需要定义一个误差级(error level)。通 过更高级别的错误参数可以指明更多严重的错误。通过把正常终止定义为 0 级错误的方式可以将正常和非 正常终止结合起来。命令解释程序或随后的程序可以根据这个误差级自动的决定下一步的操作。 一个进程或运行中的作业程序可能要载入并执行另外一个程序。这个特性允许命令解释程序通过例如 用户命令、鼠标单击或批处理命令等方式直接运行程序。一个有趣的问题是:在载入的程序结束后,把控 制返回到哪里呢?这个问题关系到现有的程序是被丢失、保存或是被允许与新的程序并行执行。 如果在新程序结束时将控制返回给现有的程序,我们必须保存该程序的内存映象;这样,我们要创建 一个有效的机制用于使一个程序调用其它的程序。如果想要两个程序能够并行执行,我们就要进行多道程 序设计来创建新作业或进程。(If both programs continue concurrently, we have created a new job or process to be multiprogrammed.)许多系统调用因此而生(create process 或 submit job)。 如果我们创建了一个新作业或进程,或者甚至是一组作业或进程,我们应该能够控制它(它们)的运 行。这种控制需要能够测定和重新设置作业或进程的标志,这包括了进程的优先权、最大运行时间等等(get process attributes 和 set process attributes)。如果我们发现创建的作业或进程出错或不再有用时,可能也想终 止它们(terminate process)。 创建新作业或进程后,我们可能需要等待它们执行结束。我们可能要等待确定的时间(wait time);更 有可能等待特定事件的发生(wait event)。当事件发生时,作业或进程应该发出信号(signal event)。将在 第七章详尽讨论这种类型的系统调用(处理并行进程的系统运行)。 其它的系统调用对排除程序故障有所帮助。有些系统提供了系统调用以内存转储。这种 规定 关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定 有益于故 障排除。一个程序跟踪它执行时的每条指令列表;很少有系统提供了这种功能。甚至微处理器也提供了一 种被称为单步执行的 CPU 模式,这种模式下 CPU 在每条指令之后自陷一次。通常一个调试程序捕获这个 自陷,这个捕获程序设计用于帮助程序员发现和修正错误的系统程序。 许多操作系统为程序提供了一个时间表。它用于指示该程序在特定位置或区域的执行时间。时间表需 要具备跟踪功能或规则的计时中断。在每次计时中断发生时,就记录一次程序计数器值。如果计时中断足 够频繁,就能够获取表示程序的各个部分的执行时间的静态图。 进程和作业控制包含了太多的细节和变化,所以我们应该通过一些例子来阐明这些概念。MS-DOS 是 一个单任务系统的例子,它包含一个开机就开始运行的命令解释程序(图 3.3a)。因为 MS-DOS 是个单任 务系统,所以它以一种简单的方法运行一个程序并不再创建新进程。它将程序载入内存,写到自己内存地 址的上方,并为其分配尽可能多的内存(图 3.3b)。然后将指令指针指向程序的第一条指令。然后程序开 始运行,或者产生一个错误而自陷或者调用一个系统调用而结束执行。不论发生那种状况,都要将错误代 码保存在系统内存中备用。紧随其后,命令行解释器中常驻内存的那一小部分恢复执行。它首先将命令解 释器的其它部分重新从磁盘中载入内存。然后,命令解释器将先前程序的错误码提供给用户或下个程序。 http://www.tulipsys.com - 9 - Figure 3.3 MS-DOS execution. (a) At system startup. (b) Running a program. 虽然 MS-DOS 操作系统不具备通常的多任务处理能力,但是它提供了一种方法用于有限的并行执行。 一个 TSR 程序是一个程序,它“hook”一个中断并且利用 terminate 和 stay resident 系统调用退出。例如, 它把它的某个子程序的地址写到中断程序列表中以便于在系统时钟触发时被调用,就这样钩(hook)住了 时钟。这样,TSR 程序每秒钟执行数次,而且是在时钟 tick 时开始。Terminate 和 stay resident 系统使 MS-DOS 保留 TSR 程序所占用的内存空间,所以在命令解释程序重新载入时不会被覆盖。 FreeBSD 是一个多任务系统的例子。当用户登录到系统之后,用户所选择的 shell(命令解释程序)就 开始运行。这个命令解释程序与 MS-DOS 命令解释程序类似,它接收并执行用户请求的程序。然而,因为 FreeBSD 是一个多任务系统,命令解释程序在其它程序执行时继续运行(图 3.4)。命令解释程序通过执行 一个 fork 系统调用来创建一个新进程。然后,被选择的程序通过 exec 系统调用载入内存并执行。根据输 入命令的不同,命令解释程序等待进程结束或在后台运行进程。在后一种情况下,命令解释程序立即请求 下一个命令。当一个进程在后台运行时,它不能够直接接收键盘输入,因为命令解释程序正在使用这个资 源。因此,I/O 通过文件完成或者通过窗口菜单接口。其间,用户可以自由的要求命令解释程序运行其它 的程序、监视正在运行的进程的进度、更改程序优先级等。当一个进程完成时,它执行一个 exit 系统调用 结束运行,返回给调用进程一个状态代码或是一个非零的错误代码。然后这个状态(或错误)代码对命令 解释程序或其它程序有效。将在第四章中讨论进程。 http://www.tulipsys.com - 10 - Figure 3.4 UNIX running multiple programs. 3.3.2 文件管理 我们将在第十一章和第十二章中详细讨论文件系统。然而我们可以认识几个通用的处理文件的系统调 用。 首先,我们需要能够创建和删除文件。每个系统调用都需要获得文件名并且也许还需要知道一些文件 属性。一旦创建了文件,我们需要打开并使用它。我们也可能读、写或重定位(例如:倒带或跳到文件末 端)。最后,我们需要关闭文件,表明我们不再使用它。 如果在文件系统中我们使用一个目录结构来组织文件,那么就需要针对目录的这些同样的一系列操 作。另外,对于文件或目录,我们需要能够确定其各种属性值,并能够在需要的时候重新设置。文件属性 包含了文件名、文件类型、保护代码、计数信息等等。至少需要 get file attribute 和 set file attribute 两个文 件调用。有些操作系统提供了更多的调用。 3.3.3 设备管理 当一个程序运行时,可能需要额外的资源。这(额外的资源)可能是更多的内存、磁带驱动器、文件 等等。如果资源有效,那么就可以将它们分配给用户程序并将控制返回给用户程序;否则,程序就需要等 待,直到所需的资源有效。 可以把文件看成抽象或虚拟设备。这样,设备也需要针对文件的许多系统调用。如果系统有多个用户, 就必须要首先请求设备,以保证对设备的独占使用。在使用设备结束后,我们必须释放它。这些功能与打 开和关闭文件的系统调用非常类似。 一旦设备被请求(并分配给用户),我们就能够读、写和(可能)重定位该设备,正像我们对文件所 做的那样。事实上,I/O 设备和文件相当的类似,包括 UNIX 和 MS-DOS 在内的众多操作系统将二者合并 http://www.tulipsys.com - 11 - 为文件设备结构(file-device structure)。这样,通过特殊的文件明识别设备。 3.3.4 信息维护 有些系统调用仅仅是用于在用户程序和操作系统之间传输信息。例如,大多数系统有一个系统调用是 返回当前时间和日期(time 和 date)。其它的系统调用可能会返回关于系统的信息,比如:当前的用户数、 操作系统的版本号、空闲内存或磁盘数量等等。 另外,操作系统保持着所有的进程信息,而且有系统调用可以访问这些信息。通常也有系统调用用于 重新设置进程信息(get process attributes 和 set process attributes)。在 4.1.3 节,我们将讨论通常保留哪些信 息。 3.3.5 通信 有两种通用的通信模型。在消息传递模型中,操作系统提供进程间通信机制来实现信息交换。在通信 之前必须要建立一个连接。必须要知道其它通信点的名称,这可能是处于同一个 CPU 上的另外一个进程, 或者是在通过通信网络连接的另外一台计算机上的一个进程。网络上的每台计算机都有一个主机名(如 IP 名称),通过这个主机名来识别主机。类似的,每个进程都有一个进程名,可以把它转化为能够由操作系 统引用的等效标识符。Get hostid 和 get processid 系统调用做这种转化。然后,根据系统的通信模型,这些 标识符通过由文件系统提供的 open 和 close 调用或 open connection 和 close connection 系统调用传递。接收 进程必须要利用一个 accept connection 调用提供通信许可。大多数接受连接的进程是系统提供的特定用途 的守护进程(daemon)。它们执行一个等待连接的调用,当连接建立之后被唤醒。通信的源端叫做客户端, 接收守护进程叫做服务器,信息交换通过读写消息系统调用完成。Close connection 调用终止本次通信。 在共享存储器模型(shared-memory model)中,进程利用 map memory 系统调用访问其它进程的内存。 回想一下,操作系统通常不允许一个进程访问另一个进程的内存。共享存储器请求几个进程同意解除这种 限定。(Shared memory requires that several process agree to remove this restiction.)然后,他们可以在这些共 享空间上读写数据来交换信息。这些进程决定了数据的形式和位置,这不在操作系统控制之下。进程也要 确保不会同时往同样的地点写入信息。在第七章中讨论这种机制。我们也将看到另为一种进程模型——线 程——它们在默认情况下共享内存。 在操作系统中,这两种模型是通用的,而且有些系统甚至(同时)实现了二者。因为不需要避免冲突, 所以在需要交换的数据量较小的情况下,消息传递很有用。对于计算机间的通信,它也更容易实现。共享 存储器允许最高的速度和便利的通信,因为在一个计算机内的情况下它能够以内存的速度完成。然而,它 的问题在于保护和同步的一些方面。图 3.5 展现了这两种模型的对照。 http://www.tulipsys.com - 12 - Figure 3.5 Communications models. (a) Msg passing. (b) Shared memory. 3.4 系统程序 现代操作系统的另外一个特征是系统程序。回想一下图 1.1,它描述了计算机逻辑层次。最底层是硬 件。其次是操作系统,然后是系统程序,最上层是应用程序。系统程序为程序开发和执行提供了便利的环 境。有些系统程序只是用户和系统调用的接口;其它的相当复杂。可以把系统程序分为一下几类: ·文件管理:这些程序创建、删除、拷贝、重命名、打印、内存转储(dump)、列表文件和目录。 ·状态信息:有些程序简单的向系统要求数据、时间、有效内存或磁盘空间、用户数目等类似的信息。 然后这些信息被格式化并打印到中断、其它输出设备或文件中。 ·文件修改:一些文本编辑器也许能够创建和修改存储在磁盘或磁带上的文件。 ·程序设计语言支持:通用程序设计语言(如 C、C++、Java、Visual Basic 和 PERL)的编译器、汇 编器和解释器常常与操作系统一起提供给用户。其中有些程序现在单独标价出售。 ·程序载入和运行:一个程序一旦被汇编或编译完毕,它必须要载入内存并执行。系统可能提供了绝 对(地址)载入程序(absolute loader)、可重定位载入程序(relocatable loader)、连接编辑程序(linkage editor) 和 overlay loader。也可能需要针对高级语言或机器语言的调试系统。 ·通信:这些程序提供了进程、用户和在不同的计算机系统间建立虚拟通信的机制。允许用户发送信 息到另一个用户的屏幕上、浏览 Web 页面、发送电子邮件、远程登录或通过机器传输文件。 大多数操作系统提供了这些程序来解决共同的问题或实现通用的操作。这些程序包括了网页浏览器、 字处理器和文本格式化程序、电子制表软件、数据库系统、编译程序的编译程序、绘图和静态分析包(plotting and statistical-analysis package),以及游戏。这些程序被称为系统工具(system utility)或应用程序。 对一个系统来说,或许最重要的系统程序是命令解释程序,其主要功能是获取并执行下一条用户指定 的命令。 在这一层次的一些命令用于文件操作:创建、删除、列表、打印、拷贝、执行等等。这些命令能够以 两种通用的方式实现。一种是命令解释程序本身包含了执行命令的代码。例如,输入命令删除一个文件, 那么命令解释程序跳到(删除命令的)代码,这段代码设置参数并进行适当的系统调用。假若如此,给定 的命令的数量决定了命令解释程序的大小,因为每条命令都需要自己的实现代码。 另一种方法是由系统程序来实现大多数命令,这是 UNIX 以及其它的操作系统所采用的。在这种方式 下,命令解释程序不再去理解命令,它仅仅利用这个命令来识别一个文件并将这个文件载入内存中执行。 这样,删除文件的 UNIX 命令 rm G 将寻找一个名为 rm 的文件,将其载入内存并以参数 G 执行。命令 rm 的功能完全定义在名为“rm”的文件的代码中。以这种方法,通过创建新文件,程序员可以很容易的给系 统添加新的命令。命令解释程序(它可以非常小)则不需要为了添加的新命令而做出任何改变。 这种设计命令解释程序的方法也面临许多问题。首先,因为执行命令的代码是一个独立的系统程序, 那么操作系统必须要提供一种从命令解释程序向系统程序中传递参数的机制。但这常常很困难,因为命令 解释程序和系统程序不一定会同时在内存中,而且参数列表可能会非常巨大。而且,将程序载入内存执行 的速度要比在当前程序中简单的跳过其它的代码执行要慢。 另一个问题是把参数的解释留给了系统程序程序员。这样,程序间和用户看到的参数可能有所不一致, 因为这是不同的程序员在不同的时间写的。(Another problem is that the interpretation of the parameters is left up to the programmer of the system program. Thus, parameters may be provided inconsistently across programs that appear similar to the user, but were written at different times by different programmers.) 大多数用户眼中的操作系统是由系统程序定义的,而不是由实际的系统调用定义的。考虑一下 PC。 当你的计算机运行 Microsoft Windows 时,你可能会看到 MS-DOS 命令行解释程序或窗口和菜单图形界面。 虽然二者使用了同样的系统调用,但是这些系统调用看上去很不一样并且有不同的行为。因此,你的视角 从真实的系统结构中转移了。因此有用的友好的用户界面的设计不是操作系统的一个直接的功能。在本书 中,我们将专心于向用户提供充分的服务的基本问题。从操作系统的视角出发,我们不区分用户程序和系 统程序。 3.5 系统结构 如果要使像现代操作系统这样庞大复杂的系统正确运行并易于修改,那么必须要精心设计。一种通用 http://www.tulipsys.com - 13 - 的方法是将任务分为许多小部分,而不是一个整体的系统(monolithic system)。每一个模块必须是一个明 确定义的系统的一部分,这包括了对输入、输出和功能的详尽定义。我们已经简要讨论了操作系统的共同 的组件(3.1 节)。在这一节,我们将讨论这些组件互联和融合成一个内核的方法。 3.5.1 简单结构 许多商用系统没有明确定义的结构。这些操作系统常常作为小的简单有限的系统开始,然后成长的规 模远超过最初的设计:MS-DOS 就是这样的一个系统。MS-DOS 最初由不多的人设计和实现,设计者没有 想到 MS-DOS 会如此流行。MS-DOS 的设计是为了在最少的空间(因为它运行在有限的硬件中)内提供大 多数功能,所以没有将它仔细的分成多个模块。图 3.6 展示了它的结构。 Figure 3.6 MS-DOS layer structure. UNIX 是另一个系统,它开始时受到硬件功能的限制。UNIX 由两个可分离的部分组成:内核和系统 程序。内核可以进一步分离为接口和设备驱动程序,这是随着 UNIX 的发展而逐年添加和扩展的。我们可 以以图 3.7 中所展示的层次化结构来观察传统的 UNIX。处于系统调用接口之下和物理硬件之上的是内核。 内核通过系统调用提供了文件系统、CPU 调度、内存管理和其它的操作系统功能。总体上讲,为数众多的 功能组合在了一个层面中。这使得难以增强 UNIX 的功能,因为每一区域的变动都会对其它的方面产生不 利影响。 http://www.tulipsys.com - 14 - Figure 3.7 UNIX system structure. 系统调用为 UNIX 定义了 API;这些系统程序共同定义了系统接口。程序员和用户接口定义了内核必 须支持的上下文。 UNIX 的新版本设计采用了更先进的硬件。由于获得了充分的硬件支持,就可以把操作系统分成更小 更合适的部分,而不像 MS-DOS 或 UNIX 系统那样。于是操作系统能够保持对计算机和使用计算机的应用 程序的更大的控制。实现者在选择系统内部工作或创建操作系统模块时有了更大的自由。(Implementers have more freedom to make changes to the inner workings of the system and in the creation of modular operating system.)在自顶向下(top-down)的设计方法中,把全部的功能和特性分离成组件。这种分离允许程序员 隐藏信息;所以他们可以自由的实现中意的底层程序,在不改变程序的外部接口的情况下使程序完成所需 的任务。 3.5.2 层次化设计 有多种方法可以完成系统的模块化设计。一种方法是层次化设计(layered approach),这种技术将操 作系统分为若干层(或层次),每一层构建在下面一层之上。最底层(第 0 层)是硬件;最高层(第 N 层) 是用户接口。 操作系统的一层是对一个抽象对象的实现,它封装了数据和对这些数据的操作。图 3.8 描述了一个典 型的操作系统层(M 层)。它由数据结构和可由更高层调用的一系列程序构成。M 层也能够调用更低层的 操作。 http://www.tulipsys.com - 15 - Figure 3.8 An operating-system layer. 层次化设计的主要优点是模块化。每一层都只会用到更低层所提供的功能(或操作)和服务。这种技 术简化了调试和系统验证。调试第一层时能够不受系统其它部分的干扰,因为根据定义它仅仅使用了基本 硬件(假设硬件工作正常)来实现它的功能。一旦第一层调试完毕,调试第二层时可以假设第一层工作正 常,依此类推。如果在调试特定的一层时发现了错误,那么这个错误一定在这一层,这是因为下面的各层 已经调试通过了。这样,把系统拆为层次,就简化了系统的设计和实现。 每一层只能够过低层所提供的那些操作实现。一个层不需要知道这些操作的具体实现;只需要知道这 些操作的作用。因此,每一层向更高层隐藏了具体的数据结构、操作和硬件。 层次化设计的主要困难包含了对层的详细定义,因为一个层只能使用其下的那些层(所提供的操作)。 例如,存储器管理需要具备应用磁盘的能力,所以虚拟存储器算法中所使用的磁盘驱动程序就必须要处于 存储器管理程序下面的层上。 其它的请求可能就没有这么明显了。备份存储驱动器可能需要等待 I/O,而且可以在这段时间内重新 调度 CPU,所以它通常要处于 CPU 调度程序上层。然而,在一个大型系统上,内存容量可能不能满足 CPU 调度程序存储活动进程信息的要求。这样,就需要将这些信息换入和换出内存,这就需要备份存储驱动器 程序处于 CPU 调度程序下层。 层次化设计的最后一个问题是它的效率低于其它类型的系统。例如,当一个用户程序执行一个 I/O 操 作时,它就要执行一个自陷到 I/O 层的系统调用(it executes a system call that is trapped to the I/O layer),这 个调用再调用存储器管理层,再由存储器管理层调用 CPU 调度层,然后 CPU 调度层转到硬件。在每一层 中,可能要修改参数,可能要传递数据,等等。每一层都要增加系统调用的开销;最终要比采用非分层的 系统花费更多的时间。 近几年,这些限制造成了对分层思想的一些的质疑。在设计中采用更少的层次,使每一层提供更多的 功能,这样就能够在避开层次定义和交互的困难问题的同时提供了模块化代码的大多数优点。例如,OS/2 是 MS-DOS 的一个后继产品,它添加了多任务和双模式操作,以及其它的新特性。因为复杂性的提高和硬 件功能的增强,OS/2 的设计实现中就分了更多层。把图 3.9 描述的结构与 MS-DOS 的结构(图 3.6)对比; 从系统设计和实现出发,OS/2 有它的优点。例如,不允许用户直接访问底层程序、向操作系统提供了对硬 件的更多的控制和更多的用户程序使用资源的信息。 http://www.tulipsys.com - 16 - Figure 3.9 OS/2 layer structure. 作为另外一个例子,考虑一下 Windows NT 的历史。Windows NT 的第一版有一个高度面向层次的结 构;但是性能却比 Windows 95 差。Windows NT 4.0 将一些层次从用户空间移到内核空间,并更紧密的整 合,部分的解决了性能问题。 3.5.3 微内核 随着 UNIX 操作系统的不断扩展,其内核变得巨大而且难以管理。80 年代中期,Carnegie Mellon 大学 的研究人员开发了名为 Mach 的操作系统,它采用微内核技术来模块化内核。这种技术将所有不必要的组 件从内核中去掉,并将它们作为系统和用户层程序来实现。结果造就了更小的内核。对于哪些服务应该保 留在内核中和哪些应该在用户空间实现需要达成共识。然而,微内核通常典型的最小限度的提供了进程和 存储器管理,以及通信机制。 微内核的主要功能是在客户端程序和同样运行在用户空间的服务程序之间提供通信机制。通信是通过 消息传递提供的,在 3.3.5 节描述。例如,如果客户程序想要访问一个文件,它就必须要与文件服务程序 交互。客户程序和服务程序之间不会直接交互。相反,它们利用微内核交换信息而间接的通信。 微内核的优点还包括简化了对操作系统功能的扩充。向用户空间中添加的所有的新服务都不需要修改 内核。必须修改内核时,改变造成的影响更小,因为微内核是一个更小的内核。这样,操作系统更易于移 植。(The resulting operating system is easier to port from one hardware design to another.)因为大多数服务作 为用户进程而不是作为内核进程运行,所以微内核也提供了更强的安全性和可靠性。如果一个服务发生故 障,操作系统的其它部分不会受到影响。 当前有几个操作系统采用了微内核技术。T
本文档为【操作系统概念第三章 操作系统结构】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_662875
暂无简介~
格式:pdf
大小:1MB
软件:PDF阅读器
页数:25
分类:互联网
上传时间:2010-11-15
浏览量:17