操作系统---引论


在这里插入图片描述

OS的目标和作用

操作系统是配置在计算机硬件上的第一层软件,是对硬件的首次扩充。

操作系统是一组控制和管理计算机硬件和软件资源,合理地对各类作业进行调度,以及方便用户使用的程序的集合。

没有任何软件支持的计算机称为裸机,实际呈现在用户面前的计算机系统是经过若干层软件改造的计算机。操作系统将裸机改造成功能更强、使用更方便的机器。我们将覆盖了软件的机器称为扩充机器虚拟机

OS 实现了对计算机资源的抽象,隐藏了对硬件操作的细节,使用户能更方便地使用机器。

  • 目标(与应用环境有关):
    人机交互

    实时性

    有效性:提高系统资源利用率 提高系统的吞吐量。

    方便性:配置OS 后可使计算机系统更容易使用。

    可扩充性:能适应计算机硬件、体系结构以及应用发展的要求,方便地增加新的功能和模块,并能修改老的功能和模块。

    开放性:统能遵循世界标准规范,特别是遵循开放系统互连(OSI)国际标准,凡遵循国际标准所开发的硬件和软件,均能彼此兼容,可方便地实现互连。

  • 作用
    用户与计算机硬件系统之间的接口
    命令接口:用户通过控制台或终端输入操作命令,向系统提供各种服务要求。
    程序接口:由系统调用组成,用户使用这些系统调用来请求操作系统为其提供服务。
    图形接口:常见的图形用户界面GUI ,终还是通过调用程序接口实现的。

    计算机系统资源的管理者
    处理机管理:用于分配和控制处理机
    存储器管理:内存的分配与回收
    I/O设备管理:负责I/O设备的分配(回收)与操纵
    文件管理:实现对文件的存取、共享和保护

推动操作系统发展的主要动力

不断提高计算机资源利用率
方便用户
器件的不断更新换代
计算机体系结构的不断发展
不断提出新的应用需求

操作系统的发展过程

人工操作方式

人机矛盾
未配置操作系统的计算机
用户独占全机
CPU等待人工操作

脱机输入/输出(Off-Line I/O)方式

  • 未配置操作系统的计算机
  • 事先将装有用户程序和数据的纸带(或卡片) 装入纸带输入机(或卡片机),在一台外围机的控制下,把纸带(卡片)上的数据(程序)输入到磁带上,当CPU 需要这些程序和数据时,再从磁带上将其高速地调入内存。
  • 减少了CPU的空闲时间,提高了 I/O 速度。

单道批处理系统(Simple Batch Processing System)

  • 把一批作业以脱机方式输入到磁带上,并在系统中配上监督程序(Monitor),在它的控制下使这批作业能一个接一个地连续处理。
  • 自动性:在磁带上的一批作业能自动地逐个地依次运行,而无需人工干预。
  • 顺序性:磁带上的各道作业是顺序地进入内存,各道作业的完成顺序与它们进入内存的顺序,在正常情况下应完全相同。
  • 单道性:内存中仅有一道程序运行,即监督程序每次从磁带上只调入一道程序进入内存运行,当该程序完成或发生异常情况时,才换入其后继程序进入内存运行。

多道批处理系统(Multiprogrammed Batch Processing System)

  • 用户所提交的作业都先存放在外存上并排成一个队列,称为“后备队列”,然后,由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使它们共享CPU 和系统中的各种资源。

  • 提高CPU 的利用率:多道程序交替运行,以保持CPU处于忙碌状态
    提高I/O设备的利用率
    增加系统的吞吐量
    平均周转时间长(排队)
    无交互能力

  • 处理机争用问题:既要能满足各道程序运行的需要,又要能提高处理机的利用率。

    内存分配和保护问题:系统应能为每道程序分配必要的内存空间,且不致因相互重叠而丢失信息,防止因某道程序出现异常情况而破坏其它程序等问题。

    I/O设备分配问题:既方便用户对设备的使用,又能提高设备的利用率。

    文件的组织和管理问题:使它们既便于用户使用,又能保证数据的安全性和一致性。

    作业(应用程序)管理问题:系统应能对系统中所有的作业进行合理的组织,以满足这些作业用户的不同要求。

    用户与系统的接口问题: OS还提供用户与OS之间的接口。

分时系统(Time Sharing System)

  • 满足用户对人—机交互的需求

  • 指在一台主机上连接了多个带有显示器和键盘的终端,同时允许多个用户通过自己的终端,以交互方式使用计算机,共享主机中的资源。

  • 共享主机:便于用户上机
    及时接收 及时处理作业直接进入内存,不允许一个作业长期占用处理机。

    多路性(同时性):允许在一台主机上同时联接多台联机终端,系统按分时原则为每个用户服务。

    独立性:每个用户各占一个终端,彼此独立操作,互不干扰。

    及时性

    交互性

实时系统(Real Time System)

  • 系统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。

  • 实时控制,实时信息处理。

  • 多路性:按分时原则为多个终端用户服务。

    独立性:每个终端用户在向实时系统提出服务请求时,是彼此独立地操作,互不干扰。

    及时性:是以控制对象所要求的开始截止时间或完成截止时间来确定的。

    交互性:仅限于访问系统中某些特定的专用服务程序,它不像分时系统那样能向终端用户提供数据处理和资源共享等服务。

    可靠性:具有高度的可靠性。

  • 实时任务的类型

    按任务执行时是否呈现周期性来划分
    周期性实时任务:外部设备周期性地发出激励信号给计算机,要求它按指定周期循环执行,以便周期性地控制某外部设备。非周期性实时任务:外部设备所发出的激励信号并无明显的周期性,但都必须联系着一个截止时间(Deadline)。

    根据对截止时间的要求来划分
    开始截止时间(某任务在某时间以前必须开始执行) 和完成截止时间(某任务在某时间以前必须完成)。硬实时任务(Hard real-time Task):系统必须满足任务对截止时间的要求,否则可能出现难以预测的结果。**软实时任务(**Soft real-time Task):联系着一个截止时间,但不严格,若偶尔错过了任务的截止时间,对系统产生的影响不会太大。

微机操作系统的发展

  • 配置在微型机上的操作系统称为微机操作系。

  • 单用户单任务操作系统:CP/M MS-DOS。

    单用户多任务操作系统:只允许一个用户上机,但允许用户把程序分为若干个任务,使它们并发执行。

    多用户多任务操作系统:允许多个用户通过各自的终端使用同一台机器,共享主机系统中的各种资源,而每个用户程序又可进一步分为几个任务,使它们能并发执行,从而可进一步提高资源利用率和系统吞吐量。

操作系统的基本特性

并发和共享是操作系统的两个最基本的特征,它们又是互为存在的条件。

并发(Concurrence)

  • 并行性是指两个或多个事件在同一时刻发生,若在计算机系统中有多个处理机,则这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行。
  • 并发性是指两个或多个事件在同一时间间隔内发生。
  • 进程:OS中可以拥有资源并作为独立运行的基本单位,若对内存中的多个程序都分别建立一个进程,它们就可以并发执行。
  • 线程:独立运行和独立调度的基本单位。

共享(Sharing)

  • 指系统中的资源可供内存中多个并发执行的进程(线程)共同使用。
  • 互斥共享方式:虽然可以提供给多个进程(线程)使用,但应规定在一段时间内,只允许一个进程访问该资源。应建立一种机制,以保证多个进程对这类资源的互斥访问,微观上,这些进程对该资源的访问是交替进行的。
  • 同时访问方式:允许在一段时间内由多个进程同时(宏观)对它们进行访问。微观上,这些进程可能是交替地对该资源进行访问。

虚拟(Virtual)

  • 通过某种技术将一个物理实体变为若干个逻辑上的对应物,物理实体是实际存在的,而后者是虚的,仅是用户感觉上的东西。

  • 时分复用技术(即分时使用):
    虚拟处理机技术:为每道程序建立一个进程,让多道程序并发地执行,以此来分时使用一台处理机。

    虚拟设备技术:将一台物理 I/O 设备虚拟为多台逻辑上的 I/O 设备,并允许每个用户占用一台逻辑上的 I/O 设备。

  • 空分复用技术
    用于对存储空间的管理,用以提高存储空间的利用率

    虚拟磁盘技术:将一台硬盘虚拟为多台虚拟磁盘,这样使用起来既方便又安全。将硬盘划分为若干个卷,再通过安装程序将它们分别安装在 C、D、E、F 四个逻辑驱动器上,机器上便有了四个虚拟磁盘。

    虚拟存储器技术:利用存储器的空闲空间来存放其它的程序,以提高内存的利用率。单纯的空分复用存储器只能提高内存的利用率,并不能实现在逻辑上扩大存储器容量的功能,须引入虚拟存储技术,虚拟存储技术在本质上就是使内存分时复用,它可以使一道程序通过时分复用方式,在远小于它的内存空间中运行。

异步(Asynchronism)

  • 不是“一气呵成”,而是“停停走走
    进程是以人们不可预知的速度向前推进

操作系统的主要功能

为多道程序的运行提供良好的运行环境。以保证多道程序能有条不紊地、高效地运行。并能最大程度地提高系统中各种资源的利用率,方便用户的使用。

处理机管理的功能

  • 进程控制
    主要功能是为作业创建进程,撤消已结束的进程,以及控制进程在运行过程中的状态转换,为一个进程创建若干个线程的功能和撤消(终止)已完成任务的线程的功能。

  • 进程同步
    实现进程同步的最常用的机制则是信号量机制。

    进程互斥方式:进程(线程)在对临界资源进行访问时,应采用互斥方式。

    进程同步方式:指在相互合作去完成共同任务的进程(线程)间,由同步机构对它们的执行次序加以协调。

  • 进程通信
    当相互合作的进程(线程)处于同一计算机系统时,通常采用直接通信方式,由源进程利用发送命令直接将消息挂到目标进程的消息队列上,由目标进程利用接收命令从其消息队列中取出消息。

  • 调度:
    作业调度:作业调度的基本任务是从后备队列中按照一定的算法,选择出若干个作业,为它们分配运行所需的资源(首先是分配内存),在将它们调入内存后,便分别为它们建立进程,使它们都成为可能获得处理机的就绪进程,并按照一定的算法将它们插入就绪队列。

    进程调度:从进程的就绪队列中,按照一定的算法选出一个进程, 把处理机分配给它,并设置运行现场,使进程投入执行。

存储器管理功能

  • 内存分配
    为每道程序分配内存空间,使它们“各得其所”。
    提高存储器的利用率,尽量减少不可用的内存空间(碎片)。
    允许正在运行的程序申请附加的内存空间,以适应程序和数据动态增长的需要。

    静态分配方式:
    每个作业的内存空间是在作业装入时确定的。在作业装入后的整个运行期间不允许该作业再申请新的内存空间不允许作业在内存中“移动”

    动态分配方式:
    每个作业所要求的基本内存空间是在装入时确定的。允许作业在运行过程中继续申请新的附加内存空间,以适应程序和数据的动态增长,允许作业在内存中“移动”

    内存分配数据结构:该结构用于记录内存空间的使用情况,作为内存分配的依据。

    内存分配功能:系统按照一定的内存分配算法为用户程序分配内存空间。

    内存回收功能:系统对于用户不再需要的内存,通过用户的释放请求去完成系统的回收功能。

  • 内存保护
    确保每道用户程序都仅在自己的内存空间内运行,彼此互不干扰。不允许用户程序访问操作系统的程序和数据。不允许用户程序转移到非共享的其它用户程序中去执行。

    界寄存器:设置两个界限寄存器,分别用于存放正在执行程序的上界和下界。系统须对每条指令所要访问的地址进行检查,如果发生越界,便发出越界中断请求,以停止该程序的执行。越界检查都由硬件实现,对发生越界后的处理,须与软件配合来完成

  • 地址映射
    程序中的地址是相对于起始地址计算的,由这些地址形成的地址范围称为地址空间,其中的地址称为逻辑地址或相对地址。内存中的一系列单元所限定的地址范围称为内存空间,其中的地址称为物理地址。

    在多道程序环境下,由于每道程序经编译(目标程序)和链接后所形成的(可装入程序)程序其地址都是从0开始的,致使(各程序段的)地址空间内的逻辑地址与其在内存空间中的物理地址并不相一致。存储器管理必须提供地址映射功能,即能够将地址空间中的逻辑地址转换为内存空间中与之对应的物理地址,该功能应在硬件的支持下完成。

  • 内存扩充
    借助于虚拟存储技术,从逻辑上扩充内存容量。使用户所感觉到的内存容量比实际内存容量大得多,以便让更多的用户程序能并发运行。这样既满足了用户的需要,又改善了系统的性能。

    请求调入功能
    允许在装入一部分用户程序和数据的情况下,便能启动该程序运行,在程序运行过程中,若发现要继续运行时所需的程序和数据尚未装入内存,可向 OS 发出请求,由 OS 从磁盘中将所需部分调入内存,以便继续运行。

    置换功能
    若发现在内存中已无足够的空间来装入需要调入的程序和数据时,系统应能将内存中的一部分暂时不用的程序和数据调至盘上,以腾出内存空间,然后再将所需调入的部分装入内存。

设备管理功能

用于管理计算机系统中所有的外围设备

  • 缓冲管理
    在 I/O 设备和 CPU 之间引入缓冲,缓和 CPU 与 I/O 设备速度不匹配的矛盾。提高 CPU 的利用率,系统吞吐量。

    最常见的缓冲区机制有单缓冲机制、 能实现双向同时传送数据的双缓冲机制,能供多个设备同时使用的公用缓冲池机制。

  • 设备分配
    根据用户进程的 I/O 请求、系统的现有资源情况以及按照某种设备的分配策略,为之分配其所需的设备。如果在 I/O 设备和 CPU 之间还存在着设备控制器 和 I/O 通道时,还须为分配出去的设备分配相应的控制器和通道。

    系统中应设置设备控制表、控制器控制表等数据结构,用于记录设备及控制器的标识符和状态。

    应针对不同的设备类型而采用不同的设备分配方式。对于独占设备(临界资源)的分配,还应考虑到该设备被分配出去后系统是否安全。在设备使用完后,应立即由系统回收。

  • 设备处理设备驱动程序):
    用于实现 CPU 和设备控制器之间的通信。

    由 CPU 向设备控制器发出 I/O 命令,要求它完成指定的 I/O 操作。设备处理程序首先检查 I/O 请求的合法性,了解设备状态是否是空闲,了解有关的传递参数及设置设备的工作方式,然后,向设备控制器发出 I/O 命令,启动 I/O 设备去完成指定的 I/O 操作。

    由 CPU 接收从控制器发来的中断请求,并给予迅速的响应和相应的处理。根据该中断请求的类型,调用相应的中断处理程序进行处理,对于设置了通道的计算机系统,设备处理程序还应能根据用户的 I/O 请求,自动地构成通道程序。

文件管理功能

  • 对用户文件和系统文件进行管理。以方便用户使用,并保证文件的安全性。

  • 文件存储空间的管理
    对于一些当前需要使用的系统文件和用户文件,都必须放在可随机存取的磁盘上由文件系统对诸多文件及文件的存储空间实施统一的管理。

    设置相应的数据结构,用于记录文件存储空间的使用情况,以供分配存储空间时参考。

    对存储空间进行分配和回收:
    为了提高存储空间的利用率,对存储空间的分配,通常是采用离散分配方式,以减少外存零头,并以盘块为基本分配单位,盘块的大小通常为 1~8KB。

  • 目录管理
    为每个文件建立其目录项,并对众多的目录项加以有效的组织,以实现方便的按名存取。

    为每个文件建立一个目录项:包括文件名、文件属性、文件在磁盘上的物理位置等。由若干个目录项构成一个目录文件

    文件共享:只须在外存上保留一份该共享文件的副本。

    快速的目录查询手段,以提高对文件的检索速度。

  • 文件的读写管理
    该功能是根据用户的请求,从外存中读取数据,或将数据写入外存。

    在进行文件读(写)时,系统先根据用户给出的文件名去检索文件目录,从中获得文件在外存中的位置,然后,利用文件读(写)指针,对文件进行读(写)。一旦读(写)完成,便修改读(写)指针,为下一次读(写)做好准备,由于读和写操作不会同时进行,故可合用一个读/写指针。

  • 文件保护
    防止未经核准的用户存取文件。
    防止冒名顶替存取文件。
    防止以不正确的方式使用文件。

操作系统与用户之间的接口

  • 提供给用户使用的接口,用户可通过该接口取得操作系统的服务。

    为了便于用户直接或间接地控制自己的作业,操作系统向用户提供了命令接口。用户可通过该接口向作业发出命令以控制作业的运行。

  • 联机用户接口
    这是为联机用户提供的,它由一组键盘操作命令及命令解释程序所组成。

    要求用户能熟记各种命令的名字和格式,并严格按照规定的格式输入命令。当用户在终端或控制台上每键入一条命令后,系统便立即转入命令解释程序,对该命令加以解释并执行该命令,在完成指定功能后,控制又返回到终端或控制台上,等待用户键入下一条命令,这样,用户可通过先后键入不同命令的方式,来实现对作业的控制,直至作业完成。

  • 脱机用户接口:
    该接口是为批处理作业的用户提供的,故也称为批处理用户接口。

    该接口由一组作业控制语言(JCL)组成。批处理作业的用户不能直接与自己的作业交互作用,只能委托系统代替用户对作业进行控制和干预。这里的作业控制语言(JCL)便是提供给批处理作业用户的、为实现所需功能而委托系统代为控制的一种语言。用户用 JCL 把需要对作业进行的控制和干预事先写在作业说明书上,然后将作业连同作业说明书一起提供给系统,当系统调度到该作业运行时,又调用命令解释程序,对作业说明书上的命令逐条地解释执行,如果作业在执行过程中出现异常现象,系统也将根据作业说明书上的指示进行干预。

  • 图形用户接口
    采用了图形化的操作界面
    用户可用鼠标或通过菜单和对话框来完成对应用程序和文件的操作。图形用户接口可以方便地将文字、图形和图像集成在一个文件中。

  • 程序接口
    提供给程序员在编程时使用的接口,是用户程序取得操作系统服务的唯一途径。

    它是由一组系统调用组成,每一个系统调用都是一个能完成特定功能的子程序,每当应用程序要求 OS 提供某种服务(功能)时,便调用具有相应功能的系统调用。

    早期的系统调用都是用汇编语言提供的,只有在用汇编语言书写的程序中才能直接使用系统调用,但在高级语言以及 C 语言中,往往提供了与各系统调用一一对应的库函数,应用程序可通过调用对库函数来使用系统调用。但在近几年所推出的操作系统中,其系统调用本身已经采用 C 语言编写,并以函数形式提供,故在用 C 语言编制的程序中,可直接使用系统调用。

OS 结构设计

软件工程所开发出的软件产品应具有良好的软件质量和合理的费用,整个费用应能为用户所接受。
软件质量指标:功能性,有效性,可靠性,易使用性,可维护性和易移植性。
利用不同的开发方法所开发出的操作系统将具有不同的操作系统结构。

传统的操作系统结构

  • 无结构(整体系统结构)操作系统:
    强调功能的实现和获得高的效率上,缺乏首尾一致的设计思想。是一组过程的集合,每个过程可以任意地相互调用其它过程,致使操作系统内部既复杂又混乱。程序设计的技巧只是如何编制紧凑的程序,以便于有效地利用内存。

  • 模块化结构 OS
    基于“分解”和“模块化”原则来控制大型软件的复杂度。OS 不再是由过程直接构成,而是将 OS 按其功能精心地划分为若干个具有一定独立性和大小的模块。每个模块具有某方面的管理功能,并仔细地规定好各模块间的接口,使各模块之间能通过该接口实现交互。然后,再进一步将各模块细分为若干个具有一定功能的子模块,同样也要规定好各子模块之间的接口。把这种设计方法称为模块―接口法,由此构成的操作系统就是具有模块化结构的操作系统。

    模块的独立性:
    在模块―接口法设计方法中,关键问题是模块的划分和规定好模块之间的接口。如果将模块划分得太小,虽然可以降低模块本身的复杂性,但会引起模块之间的联系过多,造成系统比较混乱,如果将模块划分得过大,又会增加模块内部的复杂性,使内部的联系增加。充分注意模块的独立性问题,模块的独立性越高,各模块间的交互就越少,系统的结构也就越清晰。

    衡量模块的独立性有以下两个标准:
    内聚性,指模块内部各部分间联系的紧密程度。内聚性越高,模块的独立性越强。
    耦合度,指模块间相互联系和相互影响的程度。耦合度越低,模块的独立性越好。

    提高OS设计的正确性、可理解性和可维护性。
    增强 OS 的适应性。
    加速 OS 的开发过程。

    在 OS 设计时,对各模块间的接口规定很难满足在模块完成后对接口的实际需求。在 OS 设计阶段,设计者必须做出一系列的决定(决策),每一个决定必须建立在上一个决定的基础上。但在模块化结构设计中,各模块的设计齐头并进,无法寻找到一个可靠的决定顺序,造成各种决定的“无序性”。这将使程序设计人员很难做到“设计中的每一步决定都是建立在可靠的基础上”,因此模块―接口法又被称为“无序模块法”。

  • 分层式结构 OS
    在目标系统 An 和裸机系统(又称宿主系统)A0 之间,铺设若干个层次的软件 A1、A2、A3、…、An-1,使 An 通过 An-1、An-2、…、A2、A1 层,最终能在 A0 上运行。在操作系统中,常采用自底向上法来铺设这些中间层,每一步设计都是建立在可靠的基础上,每一层仅能使用其底层所提供的功能和服务,这样可使系统的调试和验证都变得更容易。

    在用这种方法构成操作系统时,将一个操作系统分为若干个层次,每层又由若干个模块组成,各层之间只存在着单向的依赖关系,高层仅依赖于紧邻它的低层。

    保证系统的正确性:自下而上的设计方式,使所有设计中的决定都是有序的。

    易扩充和易维护性:在系统中增加、修改或替换一个层次中的模块或整个层次,只要不改变相应层次间的接口,就不会影响其它层次。

    系统效率降低了:由于层次结构是分层单向依赖的,因此必须在相邻层之间都要建立层次间的通信机制。

客户/服务器模式(C/S 模式)

  • 组成
    客户机:
    通常在一个 LAN 网络上连接有多台网络工作站(简称客户机),每台客户机都是一个自主计算机,具有一定的处理能力,客户进程在其上运行,平时它处理一些本地业务,也可发送一个消息给服务器,以请求某项服务。

    服务器:
    通常是一台规模较大的机器,在其上驻留有网络文件系统或数据库系统等。它应能为网上所有的用户提供一种或多种服务。平时它一直处于工作状态,被动地等待来自客户机的请求,一旦检查到有客户提出服务请求,便去完成客户的请求,并将结果送回客户,这样,工作站中的用户进程与服务器进程便形成了客户/服务器关系。

    网络系统:
    用于连接所有客户机和服务器,实现它们之间通信和网络资源共享的系统。

  • 交互
    在采用客户/服务器的系统中,通常是客户机和服务器共同完成对应用(程序)的处理,客户机和服务器需要进行交互,即必须利用消息机制在这两者之间进行多次通信。

    客户发送请求消息:
    当客户机上的用户要请求服务器进行应用处理时,应输入相应的命令和有关参数。由客户机上的发送进程先把这些信息装配成请求消息,然后把它发往服务器,客户机上的接收进程则等待接收从服务器发回来的响应消息。

    服务器接收消息:
    服务器中的接收进程平时处于等待状态,一旦有客户机发来请求,接收进程便被激活,并根据请求信息的内容,将其提供给服务器上的相应软件进行处理。

    服务器回送消息:
    服务器的软件根据请求进行处理,在完成指定的处理后,把处理结果装配成一个响应消息
    由服务器中的发送进程将之发往客户机。

    客户机接收消息:
    客户机中的接收进程把收到的响应消息转交给客户机软件,再由后者做出适当处理后提交给发送该请求的客户。

  • 数据的分布处理和存储
    由于客户机具有相当强的处理和存储能力,可进行本地处理和数据的分布存储。从而摆脱了由于把一切数据都存放在主机中而造成的既不可靠又容易产生瓶颈现象的困难局面。 便于集中管理:

    尽管 C/S 模式具有分布处理功能,但公司(单位)中的有关全局的重要信息,仍可采取集中管理方式,这样可较好地保障系统的“可靠”与“安全”。

  • 灵活性和可扩充性:
    理论上,客户机和服务器的数量不受限制,可以配置多种类型的客户机和服务器。

    易于改编应用软件:
    在客户/服务器模式中,对于客户机程序的修改和增删,比传统集中模式要容易得多,必要时也允许由客户进行修改。

    存在着不可靠性和瓶颈:
    在系统仅有一个服务器时,一旦服务器故障,将导致整个网络瘫痪。当服务器在重负荷下工作时,会因忙不过来而显著地延长对用户请求的响应时间。如果在网络中配置多个服务器,并采取相应的安全措施,则可加以改善。

面向对象的程序设计

  • 对象:
    在现实世界中具有相同属性、服从相同规则的一系列事物的抽象。事物可以是一个物理实体、一个概念或一个软件模块等。而把其中的具体事物称为对象的实例。

    在面向对象的技术中,是利用被封装的数据结构和一组对它进行操作的过程(方法)来表示系统中的某个对象。

    对象中的变量(数据)也称为属性,对象中的变量(数据)对外是隐蔽的,因而外界不能对它直接进行访问,必须通过该对象中的一组方法(操作函数)对它进行访问。

    方法:用于执行某种功能的过程,它可以改变对象的状态,更新对象中的某些数据值或作用于对象所要访问的外部资源。方法的实现细节也是隐蔽的,对象中的变量可以得到很好的保护,不会允许未经受权者使用和不正确的操作。

  • 对象类:
    定义一组大体相似的对象,一个类定义了一组变量和针对该变量的一组方法,用它们来描述一组对象的共同属性和行为。类是在对象上的抽象,对象则是类的实例。对象类中所定义的变量在实例中均有具体的值。

  • 继承:在面向对象的技术中,可以根据已有类来定义一个新的类,新类被称为子类,原来的类被称为父类。继承是父类和子类之间共享变量和方法的机制,子类自动继承父类中定义的变量和方法,并允许子类再增加新的内容。继承特性可使定义子类变得更为容易,一个父类可以定义多个子类,它们分别是父类的某种特例,父类描述了这些子类的公共变量和方法。类似地,这些子类又可以定义自己的子类,通过此途经可以生成一个继承的层次。另外,也允许一个子类有两个父类或多个父类,它可以从多个父类获得继承,此时称为“多重继承”。

  • 优点
    通过“重用”提高产品质量和生产率:通过“重用”以前项目来构建新的系统,可大大降低开发成本,获得更好的系统质量。

    使系统具有更好的易修改性和易扩展性:通过封装,可隐蔽对象中的变量和方法,因而当改变对象中的变量和方法时,不会影响到其它部分,从而可方便地修改老的对象类。

    可显著地减少开发的时空开销,使系统具有更好的易扩展性和灵活性。

    更易于保证系统的“正确性”和“可靠性”:对象是构成操作系统的基本单元,由于可以独立地对它进行测试,易于保证每个对象的正确性和可靠性,因此也就比较容易保证整个系统的正确性和可靠性。

    封装对对象类中的信息进行了隐蔽,这样又可有效地防止未经授权者的访问和用户不正确的使用,有助于构建更为安全的系统。

微内核

  • 操作系统内核:
    支撑功能:中断处理 时钟管理 原语操作
    资源管理功能:进程管理 存储器管理 设备管理

  • 微内核(Micro Kernel)OS 结构
    由于它能有效地支持多处理机运行,故非常适用于分布式系统环境。

    足够小的内核:在微内核操作系统中,内核是指精心设计的、能实现现代 OS 最基本的核心功能的部分,微内核并非是一个完整的 OS,只是操作系统中最基本的部分。实现与硬件紧密相关的处理

  • 基于客户/服务器模式
    将操作系统中最基本的部分放入内核中,而把操作系统的绝大部分功能都放在微内核外面的一组服务器(进程)中实现。

  • 应用“机制与策略分离”原理:
    机制是指实现某一功能的具体执行机构,策略是在机制的基础上,借助于某些参数和算法来实现该功能的优化,或达到不同的功能目标。在传统的 OS 中,将机制放在 OS 的内核的较低层,把策略放在内核的较高层次中。而在微内核操作系统中,将机制放在OS 的微内核中。

  • 采用面向对象技术:
    操作系统是一个极其复杂的大型软件系统,我们可以通过结构设计来分解操作系统的复杂度。可以基于面向对象技术中的“抽象”和“隐蔽”原则控制系统的复杂性。利用“对象”、“封装”和“继承”等概念来确保操作系统的“正确性”、“可靠性”、“易修改性”、“易扩展性”等,提高操作系统的设计速度。

  • 微内核的基本功能
    进程(线程)管理
    大多数的微内核 OS,对于进程管理功能的实现,都采用“机制与策略分离”的原理。

    进程(线程)之间的通信功能:微内核 OS 最基本的功能,几乎所有的微内核 OS 都将进程之间的通信功能放入微内核中。进程的切换、线程的调度,以及多处理机之间的同步等功能也放入微内核中。

    低级存储器管理

    中断和陷入处理
    大多数微内核操作系统都是将与硬件紧密相关的一小部分放入微内核中处理,此时微内核的主要功能,是捕获所发生的中断和陷入事件,并进行相应的前期处理,然后将有关事件的信息转换成消息后,把它发送给相关的服务器,由服务器根据中断或陷入的类型,调用相应的处理程序来进行后期处理。

  • 微内核操作系统的优点
    提高了系统的可扩展性:
    由于微内核 OS 的许多功能是由相对独立的服务器软件来实现的,当开发了新的硬件和软件时,微内核 OS 只须在相应的服务器中增加新的功能,或再增加一个专门的服务器。

    改善系统的灵活性:
    可在操作系统中增加新的功能,修改原有功能,删除已过时的功能,以形成一个更为精干有效的操作系统。

    增强了系统的可靠性:
    这一方面是由于微内核是出于精心设计和严格测试的,容易保证其正确性。另一方面,是它提供了规范而精简的应用程序接口(API),为微内核外部的程序编制高质量的代码创造了条件。由于所有服务器都是运行在用户态,服务器与服务器之间采用的是消息传递通信机制,当某个服务器出现错误时,不会影响内核,也不会影响其它服务器。

    可移植性
    在微内核结构的操作系统中,所有与特定CPU 和 I/O 设备硬件有关的代码,均放在内核和内核下面的硬件隐藏层中,而操作系统其它绝大部分(即各种服务器)均与硬件平台无关。因而,把操作系统移植到另一个计算机硬件平台上所需作的修改是比较小的。

    提供了对分布式系统的支持
    由于在微内核 OS 中,客户和服务器之间以及服务器和服务器之间的通信,是采用消息传递通信机制进行的,致使微内核 OS 能很好地支持分布式系统和网络系统。事实上,只要在分布式系统中赋予所有进程和服务器惟一的标识符,在微内核中再配置一张系统映射表 (即进程和服务器的标识符与它们所驻留的机器之间的对应表),在进行客户与服务器通信时,只需在所发送的消息中标上发送进程和接收进程的标识符,微内核便可利用系统映射表,将消息发往目标,而无论目标是驻留在哪台机器上。

    融入了面向对象技术
    有利于提高系统的“正确性”、“可靠性”、“易修改性”、“易扩展性”。减少开发系统所付出的开销。

  • 微内核操作系统存在的问题
    较之早期 OS,微内核 OS 的运行效率有所降低。在完成一次客户对 OS 提出的服务请求时,需要利用消息实现多次交互和进行用户/内核模式及上下文的多次切换。

    在早期的 OS 中,用户进程在请求取得OS 服务时,一般只需进行两次上下文的切换:一次是在执行系统调用后,由用户态转向系统态时,另一次是在系统完成用户请求的服务后,由系统态返回用户态时。

    在微内核 OS 中,由于客户和服务器及服务器和服务器之间的通信,都需通过微内核,致使同样的服务请求至少需要进行四次上下文切换。第一次是发生在客户发送请求消息给内核, 以请求取得某服务器特定的服务时。第二次是发生在由内核把客户的请求消息发往服务器时,第三次是当服务器完成客户请求后,把响应消息发送到内核时,第四次是在内核将响应消息发送给客户时。 实际情况是往往还会引起更多的上下文切换。

    为了改善运行效率,可以重新把一些常用的操作系统基本功能,由服务器移入微内核中,这样可使客户对常用操作系统功能的请求所发生的用户/内核模式和上下文的切换的次数减少,但这又会使微内核的容量明显地增大,在小型接口定义和适应性方面的优点也有所下降,同时也提高了微内核的设计代价。

发布了30 篇原创文章 · 获赞 1 · 访问量 408

猜你喜欢

转载自blog.csdn.net/weixin_46265246/article/details/105057992