操作系统总结

对于运行数百万到数千万条代码的大型操作系统,仅仅有模块化程序设计是不够的,软件体系结构和信息抽象的概念正得到越来越广泛的使用。现代操作系统的层次结构按照复杂性、时间刻度、抽象级进行功能划分。我们可以把系统看做是一系列的层。每一层执行操作系统所需功能的相关子集。它依赖于下一个较低层,较低层执行更为原始的功能并隐藏这些功能的细节。它还给相邻的较高层提供服务。在理想情况下,可以通过定义层使得改变一层时不需要改变其他层。

● 第1 层:由电路组成,处理的对象是寄存器、存储单元和逻辑门。定义在这些对象上的操作是动作,如清空寄存器或读取存储单元。 
● 第2 层:处理器指令**。该层定义的操作是机器语言指令**允许的操作,如加、减、加载和保存。 
● 第3 层:增加了过程或子程序的概念,以及调用/返回操作。 
● 第4 层:引入了中断,能导致处理器保存当前环境、调用中断处理程序。前面这4 层并不是操作系统的一部分,而是构成了处理器的硬件。但是,操作系统的一些元素开始在这些层出现,如中断处理程序。从第5 层开始,才真正到达了操作系统,并开始出现和多道程序设计相关的概念。 
● 第5 层:在这一层引入了进程的概念,用来表示程序的执行。操作系统运行多个进程的基本要求包括挂起和恢复进程的能力,这就要求保存硬件寄存器,使得可以从一个进程切换到另一个。此外,如果进程需要合作,则需要一些同步方法。操作系统设计中一个最简单的技术和重要的概念是信号量,简单信号机制将在第5 章讲述。

● 第6 层:处理计算机的辅助存储设备。在这一层出现了定位读/写头和实际传送数据块的功能。第6 层依赖于第5 层对操作的调度和当一个操作完成后通知等待进程该操作已完成的能力。更高层涉及对磁盘中所需数据的寻址,并向第5 层中的设备驱动程序请求相应的块。 
● 第7 层:为进程创建一个逻辑地址空间。这一层把虚地址空间组织成块,可以在内存和外存之间移动。比较常用的有三个方案:使用固定大小的页、使用可变长度的段或两者都用。当所需要的块不在内存中时,这一层的逻辑将请求第6 层的传送。至此,操作系统处理的都是单处理器的资源。从第8 层开始,操作系统处理外部对象,如外围设备、网络和网络中的计算机。这些位于高层的对象都是逻辑对象,命名对象可以在同一台计算机或在多台计算机间共享。 
● 第8 层:处理进程间的信息和消息通信。尽管第5 层提供了一个原始的信号机制,用于进程间的同步,但这一层处理更丰富的信息共享。用于此目的的最强大的工具之一是管道(pipe),它是为进程间的数据流提供的一个逻辑通道。一个管道定义成它的输出来自一个进程,而它的输入是到另一个进程中去。它还可用于把外部设备或文件链接到进程。这个概念将在第6 章中讲述。 
● 第9 层:支持称为文件的长期存储。在这一层,辅助存储器中的数据可以看做是一个抽象的可变长度的实体。这与第6 层辅助存储器中面向硬件的磁道、簇和固定大小的块形成对比。 
● 第10 层:提供访问外部设备的标准接口。

● 第11 层:负责维护系统资源和对象的外部标识符与内部标识符间的关联。外部标识符是应用程序和用户使用的名字;内部标识符是一个地址或操作系统在低层使用、用于定位和控制一个对象的其他指示符。这些关联在目录中维护,目录项不仅包括外部/内部映射,而且包括诸如访问权之类的特性。 

● 第12 层:提供了一个支持进程的功能完善的软件设施,这和第5 层中所提供的大不相同。第5 层只维护与进程相关的处理器寄存器内容和用于调度进程的逻辑,而第12 层支持进程管理所需的全部信息,这包括进程的虚地址空间、可能与进程发生交互的对象和进程的列表以及对交互的约束、在进程创建后传递给进程的参数和操作系统在控制进程时可能用到的其他特性。

● 第13 层:为用户提供操作系统的一个界面。它之所以称做命令行解释器(shell),是因为它将用户和操作系统细节分离开,而简单地把操作系统作为一组服务提供给用户。命令行解释器接受用户命令或作业控制语句,对它们进行解释,并在需要时创建和控制进程。例如,这一层的界面可以用图形方式实现,即通过菜单提供用户可以使用的命令,并输出结果到一个特殊设备(如显示器)来显示。

操作系统是控制应用程序执行的程序,并充当应用程序和计算机硬件之间的接口。它有下面三个目标: 
● 方便:操作系统使计算机更易于使用。 
● 有效:操作系统允许以更有效的方式使用计算机系统资源。 
● 扩展能力:在构造操作系统时,应该允许在不妨碍服务的前提下有效地开发、测试和引进新的系统功能。

作为用户/计算机接口的操作系统 为用户提供应用的硬件和软件可以看做是一种层次结构,应用程序的用户,即终端用户,通常并不关心计算机的硬件细节。因此,终端用户把计算机系统看做是一组应用程序。一个应用程序可以用一种程序设计语言描述,并且由程序员开发而成。如果需要用一组完全负责控制计算机硬件的机器指令开发应用程序,将会是一件非常复杂的任务。为简化这个任务,需要提供一些系统程序,其中一部分称做实用工具,它们实现了在创建程序、管理文件和控制I/O 设备中经常使用的功能。程序员在开发应用程序时将使用这些功能提供的接口;在应用程序运行时,将调用这些实用工具以实现特定的功能。最重要的系统程序是操作系统,操作系统为程序员屏蔽了硬件细节,并为程序员使用系统提供方便的接口。它可以作为中介,使程序员和应用程序更容易地访问和使用这些功能和服务。

一台计算机就是一组资源,这些资源用于对数据的移动、存储和处理,以及对这些功能的控制。而操作系统负责管理这些资源。 
操作系统实际上不过是一组计算机程序,与其他计算机程序类似,它们都给处理器提供指令,主要区别在于程序的意图。操作系统控制处理器使用其他系统资源,并控制其他程序的执行时机。但是,处理器为了做任何一件这类事情,都必须停止执行操作系统程序,而去执行其他程序。因此,这时操作系统释放对处理器的控制,让处理器去做其他一些有用的工作,然后用足够长的时间恢复控制权,让处理器准备好做下一项工作。

操作系统是最复杂的软件之一,这反映在为了达到那些困难的甚至相互冲突的目标(方便、有效和易扩展性)而带来的挑战上. 在操作系统开发中有5 个重要的理论进展:进程、内存管理、信息保护和安全、调度和资源管理、系统结构。每个进展都是为了解决实际的难题,并由相关原理或抽象概念来描述的。这5 个领域包括了现代操作系统设计和实现中的关键问题。

进程的概念是操作系统结构的基础,存在很多关于进程的定义,如下所示:
● 一个正在执行的程序。
● 计算机中正在运行的程序的一个实例。
● 可以分配给处理器并由处理器执行的一个实体。
● 由单一的顺序的执行线程、一个当前状态和一组相关的系统资源所描述的活动单元。
后面将会对这个概念进行更清晰的阐述。

计算机系统的发展有三条主线:多道程序批处理操作、分时和实时事务系统,它们在时间安排和同步中所产生的问题推动了进程概念的发展: 

多道程序设计是为了让处理器和I/O 设备(包括存储设备)同时保持忙状态,以实现最大效率。其关键机制是:在响应表示I/O 事务结束的信号时,操作系统将对内存中驻留的不同程序进行处理器切换。 

发展的第二条主线是通用的分时。其主要设计目标是能及时响应单个用户的要求,但是由于成本原因,又要可以同时支持多个用户。由于用户反应时间相对比较慢,这两个目标是可以同时实现的。例如,如果一个典型用户平均需要每分钟2 秒的处理时间,则可以有近30 个这样的用户共享同一个系统,并且感觉不到互相的干扰。 

发展的另一个重要主线是实时事务处理系统。在这种情况下,很多用户都在对数据库进行查询或修改,例如航空公司的预订系统。事务处理系统和分时系统的主要差别在于前者局限于一个或几个应用,而分时系统的用户可以从事程序开发、作业执行以及使用各种各样的应用程序。对于这两种情况,系统响应时间都是最重要的。

系统程序员在开发早期的多道程序和多用户交互系统时使用的主要工具是中断。设计出一个能够协调各种不同活动的系统软件是非常困难的。在任何时刻都有许多作业在运行中,每个作业都包括要求按顺序执行的很多步骤,因此,分析事件序列的所有组合几乎是不可能的。由于缺乏能够在所有活动中进行协调和合作的系统级的方法,程序员只能基于他们对操作系统所控制的环境的理解,采用自己的特殊方法。然而这种方法是很脆弱的,尤其对于一些程序设计中的小错误,因为这些错误只有在很少见的事件序列发生时才会出现。由于需要从应用程序软件错误和硬件错误中区分出这些错误,因而诊断工作是很困难的。即使检测出错误,也很难确定其原因,因为很难再现错误产生的精确场景。 

进程被当做数据结构来实现。一个进程可以是正在执行,也可以是等待执行。任何时候整个进程状态都包含在它的上下文环境中。这个结构使得可以开发功能强大的技术,以确保在进程中进行协调和合作。在操作系统中可能会设计和并入一些新的功能(如优先级),这可以通过扩展上下文环境以包括支持这些特征的新信息。

 

通过支持模块化程序设计的计算环境和数据的灵活使用,用户的要求可以得到很好的满足。系统管理员需要有效且有条理地控制存储器分配。操作系统为满足这些要求,担负着5 个基本的存储器管理责任:
● 进程隔离:操作系统必须保护独立的进程,防止互相干涉各自的存储空间,包括数据和指令。
● 自动分配和管理:程序应该根据需要在存储层次间动态地分配,分配对程序员是透明的。因此,程序员无需关心与存储限制有关的问题,操作系统有效地实现分配问题,可以仅在需要时才给作业分配存储空间。
● 支持模块化程序设计:程序员应该能够定义程序模块,并且动态地创建、销毁模块,动态地改变模块大小。
● 保护和访问控制:不论在存储层次中的哪一级,存储器的共享都会产生一个程序访问另一个程序存储空间的潜在可能性。当一个特定的应用程序需要共享时,这是可取的。但在别的时候,它可能威胁到程序的完整性,甚至威胁到操作系统自身。操作系统必须允许一部分内存可以由各种用户以各种方式进行访问。
● 长期存储:许多应用程序需要在计算机关机后长时间保存信息。

在典型情况下,操作系统使用虚拟存储器和文件系统机制来满足这些要求。文件系统实现了长期存储,它在一个有名字的对象中保存信息,这个对象称做文件。对程序员来说,文件是一个很方便的概念;对操作系统来说,文件是访问控制和保护的一个有用单元。

虚拟存储器机制允许程序从逻辑的角度访问存储器,而不考虑物理内存上可用的空间数量。虚拟存储器的构想是为了满足有多个用户作业同时驻留在内存中的要求,这样,当一个进程被写出到辅助存储器中并且后继进程被读入时,在连续的进程执行之间将不会脱节。由于进程大小不同,如果处理器在很多进程间切换,则很难把它们紧密地压入内存中,因此引进了分页系统。在分页系统中,进程由许多固定大小的块组成,这些块称做页。程序通过虚地址(virtual address)访问字,虚地址由页号和页中的偏移量组成。进程的每一页都可以放置在内存中的任何地方,分页系统提供了程序中使用的虚地址和内存中的实地址(real address)或物理地址之间的动态映射。
处理器硬件和操作系统一起提供给用户“虚拟处理器”的概念,而“虚拟处理器”有对虚拟存储器的访问权。这个存储器可以是一个线性地址空间,也可以是段的**,而段是可变长度的连续地址块。不论哪种情况,程序设计语言的指令都可以访问虚拟存储器区域中的程序和数据。可以通过给每个进程一个唯一的不重叠的虚拟存储器空间来实现进程隔离;可以通过使两个虚拟存储器空间的一部分重叠来实现内存共享。

 

虚拟存储器

 

虚拟储存器寻址

信息保护是在使用分时系统时提出的,近年来计算机网络进一步关注和发展了这个问题。由于
环境不同,涉及一个组织的威胁的本质也不同。但是,有一些通用工具可以嵌入支持各种保护和安
全机制的计算机和操作系统内部。总之,我们关心对计算机系统的控制访问和其中保存的信息。
大多数与操作系统相关的安全和保护问题可以分为4 类:
● 可用性:保护系统不被打断。
● 保密性:保证用户不能读到未授权访问的数据。
● 数据完整性:保护数据不被未授权修改。
● 认证:涉及用户身份的正确认证和消息或数据的合法性。

操作系统的一个关键任务是管理各种可用资源(内存空间、I/O 设备、处理器),并调度各种活动进程使用这些资源。任何资源分配和调度策略都必须考虑三个因素:
● 公平性:通常希望给竞争使用某一特定资源的所有进程提供几乎相等和公平的访问机会。对同一类作业,也就是说有类似请求的作业,更是需要如此。
● 有差别的响应性:另一方面,操作系统可能需要区分有不同服务要求的不同作业类。操作系统将试图做出满足所有要求的分配和调度决策,并且动态地做出决策。例如,如果一个进程正在等待使用一个I/O 设备,操作系统会尽可能迅速地调度这个进程,从而释放这个设备以方便其他进程使用。
● 有效性:操作系统希望获得最大的吞吐量和最小的响应时间,并且在分时的情况下,能够容纳尽可能多的用户。这些标准互相矛盾,在给定状态下寻找适当的平衡是操作系统中一个正在进行研究的问题。

 

多道程序设计环境中涉及进程调度和资源分配的操作系统主要组件

操作系统中维护着多个队列,每个队列代表等待某些资源的进程的简单列表。短期队列由在内存中(或至少最基本的一小部分在内存中)并等待处理器可用时随时准备运行的进程组成。任何一个这样的进程都可以在下一步使用处理器,究竟选择哪一个取决于短期调度器,或者称为分派器( dispatcher)。一个常用的策略是依次给队列中的每个进程一定的时间,这称为时间片轮转(round-robin)技术,时间片轮转技术使用了一个环形队列。另一种策略是给不同的进程分配不同的优先级,根据优先级进行调度。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值