• OS结构设计


    1.5 OS结构设计

    一、传统操作系统结构

    1.无结构操作系统

    • 设计者只是把他的注意力放在功能的实现和获得高的效率上,缺乏首尾一致的设计思想。
    • 此时的OS是为数众多的一组过程的集合,各过程之间可以相互调用,在操作系统内部不存在任何结构
    • 缺点
      • 操作系统既庞大又杂乱,缺乏清晰的程序结构,调试困难
      • 程序难以阅读和理解,增加了维护人员的负担

    2.模块化结构OS

    基于20世纪60年代出现的一种结构化程序设计技术开发的。

    • 模块由众多服务过程(模块接口)组成,可以随意调用其他模块中的服务过程。
    • 优点:具有一定灵活性,在运行中的高效率。
    • 缺点:
      • 功能划分和模块接口确保正确和合理。
      • 模块之间的依赖关系(功能调用关系)复杂(调用深度和方向),降低了模块之间的相对独立性,不利于修改。

    Snipaste_2020-09-23_15-27-18

    3.分层式结构OS:

    在硬件机的基础上逐层扩展功能,自底向上的分层设计系统,有序分层的概念。

    • 基本原则是:每一层都仅使用其底层所提供的功能和服务,这样可使系统的调试和验证都变得容易

    • 层次的设计

      • 程序嵌套
      • 运行频率
      • 公用模块
      • 用户接口

      Snipaste_2020-09-23_15-29-22

    二、现代操作系统结构(微内核OS结构)

    把操作系统分成若干分别完成一组特定功能的服务进程,等待客户提出请求;而系统内核只实现操作系统的基本功能(如:虚拟存储、消息传递),微内核所提供的功能,通常都是一些最基本的功能,如进程管理、存储器管理、进程间通信、 低级I/O功能。

    微内核的四个特点:

    1、内核足够小

    在微内核操作系统中,内核是指精心设计的、能实现现代OS最基本的核心功能的部分。微内核并非是一个完整的OS,而只是操作系统中最基本的部分,它通常用于:

    1. 实现与硬件紧密相关的处理;
    2. 实现一些较基本的功能;
    3. 负责客户和服务器之间的通信。

    它们只是为构建通用OS提供一个重要基础,这样就可以确保把操作系统内核做得很小。

    2、基于客户/服务器模式

    • 单机微内核操作系统中都采用客户/服务器模式。
    • 所有这些服务器(进程)都运行在用户态。 当有一用户进程(现在称为客户进程)要求读文件的一个盘块时,该进程便向文件服务器(进程)发出一个请求。
    • 内核来接收客户的请求,再将该请求送至相应的服务器;同时它也接收服务器的应答, 并将此应答回送给请求客户;内核还有与硬件直接相关的一些功能。
    • 客户和服务器之间借助微内核提供的消息传递机制来实现信息交互。

    Snipaste_2020-09-23_15-32-46

    3、应用“机制与策略分离”原理

    在现代操作系统的结构设计中,经常利用“机制与策略分离”的原理来构造OS结构。

    • 机制,是指实现某一功能的具体执行机构。
    • 策略,是在机制的基础上,借助于某些参数和算法来实现该功能的优化,或达到不同的功能目标。

    通常,机制处于一个系统的基层,而策略则处于系统的高层。在传统的OS中,将机制放在OS的内核的较低层,把策略放在内核的较高层次中,而在微内核操作系统中,通常将机制放在OS的微内核中。正因为如此,才有可能将内核做得很小。

    4、采用面向对象技术

    操作系统是一个极其复杂的大型软件系统,我们不仅可以通过结构设计来分解操作系统的复杂度,还可以基于面向对象技术中的"抽象"和"隐蔽"原则控制系统的复杂性,再进一步利用"对象"、"封装"和"继承"等概念来确保操作系统的"正确性"、"可靠性"、"易修改性"、"易扩展性"等,并提高操作系统的设计速度。正因为面向对象技术能带来如此多的好处,故面向对象技术被广泛应用于现代操作系统的设计中。

    三、微内核的基本功能

    1、进程(线程)管理

    大多数的微内核OS,对于进程管理功能的实现,都采用“机制与策略分离”的原理。例如,为实现进程(线程)调度功能,须在进程管理中设置一个或多个进程(线程)优先级队列;能将指定优先级进程(线程)从所在队列中取出,并将其投入执行。由于这一部分属于调度功能的机制部分,应将它放入微内核中。应如何确定每类用户(进程)的优先级,以及应如何修改它们的优先级等,都属于策略问题,可将它们放入微内核外的进程(线程)管理服务器中。

    2、低级存储器管理

    通常在微内核中,只配置最基本的低级存储器管理机制。如用于实现将用户空间的逻辑地址变换为内存空间的物理地址的页表机制和地址变换机制,这一部分是依赖于机器的,因此放入微内核。而实现虚拟存储器管理的策略,则包含应采取何种页面置换算法,采用何种内存分配与回收策略等,应将这部分放在微内核外的存储器管理服务器中去实现。

    3、中断和陷入处理

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

    在微内核OS中是将进程管理、存储器管理以及I/O管理这些功能一分为二,属于机制的很小一部分放入微内核中,另外绝大部分放在微内核外的各种服务器中来实现。事实上,其中大多数服务器都比微内核大。这进一步说明了为什么能在采用客户/服务器模式后,还能把微内核做得很小的原因。

    四、微内核操作系统的优点

    1、提高了可扩展性

    由于微内核OS的许多功能是由相对独立的服务器软件来实现的,当开发了新的硬件和软件时,微内核OS只须在相应的服务器中增加新的功能,或再增加一个专门的服务器。与此同时,也必然改善系统的灵活性,不仅可在操作系统中增加新的功能,还可修改原有功能,以及删除已过时的功能,以形成一个更为精干有效的操作系统。

    2、增强了系统的可靠性

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

    3、系统可移植性强

    随着硬件的快速发展,出现了各种各样的硬件平台,作为一个好的操作系统,必须具备可移植性,使其能较容易地运行在不同的计算机硬件平台上。在微内核结构的操作系统中,所有与特定CPU和I/O设备硬件有关的代码,均放在内核和内核下面的硬件隐藏层中,而操作系统其它绝大部分(即各种服务器)均与硬件平台无关,因而,把操作系统移植到另一个计算机硬件平台上所需作的修改是比较小的。

    4、提供了对分布式系统的支持

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

    5、融入了面向对象技术

    在设计微内核OS时,采用了面向对象的技术,其中的"封装","继承","对象类"和"多态性",以及在对象之间采用消息传递机制等,都十分有利于提高系统的"正确性"、"可靠性"、"易修改性"、"易扩展性"等,而且还能显著地减少开发系统所付出的开销。

    五、微内核操作系统存在的问题

    效率降低的最主要的原因是,在完成一次客户对OS提出的服务请求时,需要利用消息实现多次交互和进行用户/内核模式及上下文的多次切换。例如,文件服务器还需要磁盘服务器的帮助,这时就需要进行八次上下文的切换。Snipaste_2020-09-23_15-38-50

    六、现在操作系统的特点

    • 微内核结构:只给内核分配最基本的功能,可简化实现,提供灵活性
    • 多线程:把执行一个应用程序的进程划分成可以同时运行的多个线程。提高程序的执行效率。
    • 对称多处理:有多个处理器共享同一个主存储器和I/O设备,可以执行相同的功能。提高并行性、可靠性
    • 分布式操作系统
    • 面向对象设计 提高模块独立性,便于扩展

    七、OS设计原则

    • 可维护性:容易修改与否称为可维护性
      • 改错性维护:改正已发现的错误;
      • 适应性维护:修改软件,使之适应新的运行环境(硬件环境和软件环境);如:操作系统的移植。
      • 完善性维护:增加新功能;
    • 可靠性
      • 正确性:正确实现所要求的功能和性能;
      • 稳健性:对意外(故障和误操作)作出适当的处理;
    • 可理解性:易于理解,以方便测试、维护和交流;
    • 性能:有效地使用系统资源;尽可能快地响应用户请求;
  • 相关阅读:
    OC block声明和使用
    OC 内存管理(retain和release)
    OC @class关键字
    OC typedef(起别名)
    OC static 和函数
    OC static 和变量
    java【基础】日期操作
    java【基础】正则表达式
    理解String拼接,+运算符重载的实际效果
    swoole的EventLoop学习
  • 原文地址:https://www.cnblogs.com/coderD/p/13718850.html
Copyright © 2020-2023  润新知