图形渲染操作系统分析

图形渲染操作系统分析

迄今为止,博主在博客中阐述的内容包含渲染技术、性能优化、图形API、Shader、GPU、游戏引擎架构、图形驱动等等技术范畴的内容,这些内容都仅仅局限于单个应用程序之中,常常让人有”只缘身在此山中“的感叹。现在是时候更进一步了——进入操作系统(Operating System,OS)的范畴,以更高的层次去看待渲染体系,以便能够高屋建瓴,练就深厚的技术内功。

 

站在应用层开发者的视角,去阐述Windows、Linux等操作系统的相关技术内幕(如果是操作系统开发者,则博主不认为是很贴切的目标读者),主要包含但不限于以下内容:

  • 操作系统的架构。
  • 操作系统的概念。
  • 操作系统的技术。
  • 操作系统的机制和原理。
  • 操作系统的UE封装和实现。

操作系统经历了数十年的发展历程,从最初的形态,到当前的琳琅满目,无论是技术、体验、应用等方面都有了质的飞跃。

UNIX操作系统最早于20世纪70年代开发,是一个支持多个用户同时使用的多任务操作系统。它的特点是基于命令行,支持同时运行数千个小程序,易于从单个程序创建管道,内置多用户支持和分区。面临的挑战是基于命令行,寻找帮助和文档可能很繁琐,许多不同的变体(下图)。

 

Unix系统和它的衍生体。

同样流行且知名的还有Windows、MacOS、Android、Linux等操作系统。

1 操作系统功能

操作系统位于应用程序和硬件之间,调解访问并抽象出接口,程序通过陷阱或例外请求服务,设备通过中断请求关注等。操作系统执行许多功能,具体而言,有:

  • 实现用户界面。
  • 在用户之间共享硬件。
  • 允许用户之间共享数据。
  • 防止用户相互干扰。
  • 在用户之间调度资源。
  • 促进I/O操作。
  • 从错误中恢复。
  • 资源存储核算。
  • 促进并行操作。
  • 组织数据以实现安全快速访问。
  • 处理网络通信。

 

操作系统是一组程序,用于控制应用程序的执行,并充当计算机用户和计算机硬件之间的中介。操作系统是一种管理计算机硬件并为应用程序运行提供环境的软件,示例有Windows、Windows/NT、Linux、OS/2和MacOS。OS涉及的主题常常是以下几方面:

 

操作系统提供以下几大类功能:

  • 作业管理:识别作业,确定优先级,确定主内存的可用性,并准备运行作业或程序的时间表。
  • 进程管理:减少计算机系统处理器和输入/输出设备的空闲时间。
  • 输入/输出管理:在各种设备及其驱动程序的帮助下,管理计算机的输入和输出流。
  • 数据管理:跟踪磁盘和其他存储设备上的数据。
  • 文件管理:负责文件相关活动,如:创建、删除、操作文件和目录。
  • 内存管理:根据不同程序的需要分配和释放可用内存。
  • 虚拟存储:在不增加物理大小的情况下增加主内存的容量,使用虚拟内存存储指令和数据。
  • 安全管理:为敏感数据提供密码安全,以阻止未经授权的访问。
  • 在线处理:等待用户的操作指令,并立即执行。

常见的模块或子系统有内存管理、IO系统、文件系统、进程、线程、中断、安全、信息服务等等,它们之间有着错综复杂的关联:

 

操作系统的目标是:1、使计算机系统方便用户使用;2、有效地使用计算机硬件;3、执行用户程序并使解决用户问题更容易。

可以分别从用户、系统视角来看待操作系统。

计算机的用户视图取决于使用的界面。一些用户可能使用PC,在这种情况下,系统设计为只有一个用户可以利用资源,并且主要是为了便于使用,其中主要关注的是性能而不是资源利用率。一些用户可能使用连接到大型机或小型计算机的终端,其他用户可以通过其他终端访问同一台计算机,这些用户可以共享资源和交换信息。在这种情况下,操作系统被设计为最大限度地利用资源,以便有效地利用所有可用的CPU时间、内存和I/O。其他用户可以坐在工作站上,连接到其他工作站和服务器的网络,在这种情况下,操作系统被设计为在个人可见性和资源利用率之间进行折衷。

而从系统角度来看,可以将系统视为资源分配器,也就是说,一个计算机系统有许多可用于解决问题的资源。操作系统充当这些资源的管理器,必须决定如何将这些资源分配给程序和用户,以便能够高效、公平地操作计算机系统。操作系统的不同视角是,它需要控制各种I/O设备和用户程序,即操作系统是用于管理用户程序执行的控制程序,以防止错误和不当使用计算机。资源可以是CPU时间、内存空间、文件存储空间、I/O设备等。

操作系统服务是操作系统为程序的执行提供了环境,也为程序提供一些服务,每个操作系统提供的服务可能与其他操作系统不同,使得编程任务更容易。

 

操作系统服务概览。

操作系统提供的各种服务如下:

  • 程序执行:系统必须能够将程序加载到主内存分区并运行该程序,程序必须能够正常终止此执行以成功执行,或异常终止以显示错误。
  • I/O操作:完成设备分配和I/O设备控制任务,提供通知设备错误、设备状态等。
  • 文件系统操作:完成打开文件、关闭文件的任务,程序需要按名称创建和删除文件,允许文件操作,如读取文件、写入文件、附加文件。
  • 通信:在同一计算机系统上或在计算机网络上的不同计算机系统之间完成进程间通信的任务,在安全模式下提供消息传递和共享内存访问。
  • 错误检测:操作系统应针对任何类型的溢出(如算术溢出)采取适当的操作;除以零错误、访问非法内存位置和用户CPU时间过大。完成错误检测和恢复任务(如果有),例如打印机卡纸或缺纸。跟踪CPU、内存、I/O设备、存储设备、文件系统、网络等的状态。如果出现致命错误,如RAM奇偶校验错误、功率波动,则中止执行。
  • 资源分配:完成资源分配到多个作业的任务,在资源使用后或作业终止时回收分配的资源,当多个用户登录到系统时,必须将资源分配给每个用户。对于资源在各个进程之间的当前分配,操作系统使用CPU调度运行时间,以确定将为哪个进程分配资源。

 

  • 账户:操作系统跟踪哪些用户使用了多少和哪种计算机资源,维护系统活动日志以进行性能分析和错误恢复。
  • 保护:完成保护系统资源免受恶意使用的任务,采用安全方案防止未经授权的访问/用户进行安全计算,使用登录密码和注册对合法用户进行身份验证。操作系统负责硬件和软件保护,操作系统保护存储在多用户计算机系统中的信息。
  • 系统调用:系统调用提供进程和操作系统之间的接口,它们通常以汇编语言指令的形式提供。有些系统允许直接从高级语言程序(如C、BCPL和PERL等)进行系统调用,根据使用的计算机,系统调用以不同的方式进行。系统调用可以大致分为5大类:
    • 进程管理和控制:
      • 结束,中止:运行中的程序需要能够正常(结束)或异常(中止)执行。
      • 加载、执行:执行一个程序的进程或作业可能要加载并执行另一个程序。
      • 创建、终止进程:有一个系统调用指定用于创建新进程或作业(创建流程或提交作业),或者终止创建的作业或进程。
      • 获取或设置进程属性:如果创建新作业或进程,应该能够控制其执行,以便确定和重置作业或进程的属性。
      • 等待时间:创建新作业或进程后,可能需要等待它们完成执行(等待时间)。
      • 等待事件、信号事件:可以等待特定事件发生(等待事件),然后,作业或进程在该事件发生时发出信号(信号事件)。
      • 分配、释放内存。
      • 文件管理/文件操作/文件处理:
        • 创建文件,删除文件:首先需要能够创建和删除文件。两个系统调用都需要文件名及其某些属性。
        • 打开文件,关闭文件:创建文件后,需要打开并使用它。当不再使用该文件时,将其关闭。
        • 读取、写入、重新定位文件:打开后,还可以读取、写入或重新定位文件(回放或跳到文件末尾)。
        • 获取文件属性,设置文件属性:对于文件或目录,需要能够确定各种属性的值,并在必要时重置它们。需要两个系统调用获取文件属性和设置文件属性
        • 设备管理:
          • 请求设备,释放设备:如果系统有多个用户,首先请求设备,在完成设备后,必须释放它。
          • 读取、写入、重新定位:一旦设备被请求并分配,就可以读取、写入和重新定位设备。
          • 信息维护/管理:
            • 获取时间或日期、设置时间或日期:大多数系统都有一个系统调用来返回当前的日期和时间或设置当前的日期与时间。
            • 获取系统数据,设置系统数据:其他系统调用可能会返回有关系统的信息,如当前用户数、操作系统版本号、可用内存量等。
            • 获取进程属性,设置进程属性:操作系统保留有关其所有进程的信息,并且有系统调用来访问这些信息。
            • 通讯管理:
              • 创建、删除连接。
              • 发送、接收消息。
              • 连接、分离远程设备(安装/远程登录)。
              • 传输状态信息(字节)。

通讯管理有两种模式:

  • 消息传递模式:信息通过操作系统提供的进程间通信设施进行交换,网络中的每台计算机都有一个已知的名称。类似地,每个进程都有一个进程名,该进程名被转换为操作系统可以引用的等效标识符。get-host-id和get-processed系统调用来执行此转换,然后将这些标识符传递给文件系统提供的通用打开和关闭调用,或传递给特定的打开连接系统调用。收件人进程必须授予其权限,才能与接受连接呼叫进行通信。通信源称为客户端和接收方,称为服务器,通过读消息和写消息系统调用交换消息。关闭连接调用终止连接。
  • 共享内存模式:进程使用映射内存系统调用访问其他进程拥有的内存区域,他们通过读写共享区域中的数据来交换信息,这些进程确保它们不会同时写入同一位置。

 

2 操作系统种类

 

操作系统可分为以下几类。

2.1 批处理操作系统

批处理系统(Batch System)类型的操作系统中,用户定期(如每天、每周、每月)将作业提交到一个中心位置,该位置的系统用户不直接与计算机系统交互。为了加快处理速度,具有类似需求的作业被分批处理,并作为一个组在计算机中运行。因此,程序员将把程序留给操作员,每个作业的输出将发送给适当的程序员。这种类型的主要任务是自动将控制权从一个作业转移到下一个作业。

 

此种操作系统的优势是简单、连续的作业调度,尽量减少人为干预,由于作业成批处理,提高了性能和系统吞吐量。缺点是从用户的角度来看,由于批处理,周转时间可能会很长,程序调试困难,作业可以进入无限循环,可能会损坏显示器,由于缺乏保护方案,一项作业可能会影响待定作业。

应用案例是工资系统、银行对账单等。注意,周转时间是指用户提交流程或作业与完成该流程或作业之间所用的时间。

联机的全称是在线同步外围设备操作(Simultaneous Peripheral Operation On-Line,SPOOL),是暂时保存数据以供设备、程序或系统使用和执行的过程,数据被发送到其他易失性(临时存储器)存储器并存储在其中,直到程序或计算机请求执行。

2.2 分时操作系统

时间共享系统(Time-Sharing)也被称为分时系统多用户系统,提供用户与系统之间的在线通信,用户直接发出指令并接收中间响应,因此称为交互式系统。它允许多个用户同时共享计算机系统,CPU在几个程序之间快速多路复用,这些程序保存在内存和磁盘上,一个程序在磁盘上交换内存和内存。

CPU通过在多个作业之间切换来执行多个作业,但切换频繁,用户可以在每个程序运行时与之交互。交互式计算机系统提供用户和系统之间的直接通信,用户直接使用键盘或鼠标向操作系统或程序发出指令,并等待即时结果。因此,响应时间将很短。分时系统允许许多用户同时共享计算机,由于此系统中的每个操作都很短,因此每个用户只需要很少的CPU时间。系统可以快速地从一个用户切换到另一个用户,因此每个用户都会感觉整个计算机系统都是专门用于自己的使用的,即使它是由许多用户共享的。

 

在上图中,用户5处于活动状态,但用户1、用户2、用户3和用户4处于等待状态,而用户6处于就绪状态。一旦用户5的时间片完成,时间片就移到下一个就绪用户,即用户6。在此状态下,用户2、用户3、用户4和用户5处于等待状态,用户1处于就绪状态。这个过程以同样的方式继续,以此类推。

分时系统的优点是有效共享和利用计算机资源,对许多用户的快速响应时间,CPU空闲时间完全消除,适合在线数据处理和用户对话。

分时系统的缺点是比多道程序操作系统更复杂,系统必须具有内存管理和保护,因为多个作业同时保存在内存中,分时系统还必须提供文件系统,因此需要磁盘管理,它为需要复杂CPU调度方案的并发执行提供了机制。示例:Multics、UNIX等。

2.3 实时操作系统

实时系统(Real-Time System)的特点是提供即时响应,保证关键任务按时完成。对于要在计算机上执行的每个功能,此类型必须具有已知的最大时间限制。当处理器的操作或数据流有严格的时间要求时,使用实时系统,实时系统可用作专用应用中的控制设备。

当处理器的操作或数据流有严格的时间要求时,使用实时系统,控制科学实验、医学成像系统和一些显示系统的系统是实时系统。传感器将数据传送到计算机,计算机分析数据并调整控件以修改传感器输入。

实时系统的缺点是:只有当实时系统在时间限制内返回正确的结果时,才认为它能够正确运行,辅助存储有限或丢失,而数据通常存储在短期内存或ROM中,缺少高级操作系统功能。

实时系统有两种类型:

  • 硬实时系统:保证关键任务按时完成,例如突如其来的任务发生在一个突然的时刻。
  • 软实时系统:是一种限制较少的实时系统,其中关键任务的优先级高于其他任务,并在计算之前保持该优先级。与硬实时系统相比,这些系统的实用性更为有限。偶尔错过最后期限是可以接受的。

示例:QNX、VX工作,数字音频或多媒体包含在这一类别中,是一种特殊用途的操作系统,其中对处理器的操作有严格的时间要求。实时操作系统有明确定义的固定时间限制,处理必须在时间限制内完成,否则系统将失败。只有在时间限制内返回正确的结果,实时系统才能正常运行。这些系统的特点是将时间作为关键参数。

 

实时操作系统的优点:

  • 最大化消费:设备和系统的最大利用率,从而从所有资源中获得更多输出。
  • 任务转移:在这些系统中分配给转移任务的时间非常少。例如,在较旧的系统中,将一个任务转移到另一个任务大约需要10微秒,而在最新的系统中则需要3微秒。
  • 专注于应用程序:专注于运行应用程序,而对队列中的应用程序不那么重要。
  • 嵌入式系统中的实时操作系统:由于程序的大小很小,RTOS也可以用于嵌入式系统,如传输和其他系统。
  • 无错误:这些类型的系统是无错误的。
  • 内存分配:内存分配在这些类型的系统中管理得最好。

实时操作系统的缺点:

  • 有限的任务:同一时间运行的任务很少,并且它们很少集中在少数应用程序上,以避免错误。
  • 使用繁重的系统资源:有时系统资源不是很好,而且也很昂贵。
  • 复杂算法:算法非常复杂,设计者很难写下去。
  • 设备驱动和中断信号:需要特定的设备驱动程序和中断信号来尽早响应中断。
  • 线程优先级:设置线程优先级并不好,因为这些系统不太容易切换任务。

实时操作系统的例子有:科学实验、医学成像系统、工业控制系统、武器系统、机器人、空中交通控制系统等。

 

2.4 多道程序操作系统

多程序设计(Multiprogramming)概念通过组织作业增加CPU利用率,CPU总有一个作业要执行。操作系统同时在内存中保留多个作业,如下图所示。

 

这组作业是作业池中保留的作业的子集,操作系统拾取并开始执行内存中的一个作业,当一个作业需要等待时,CPU只需切换到另一个作业,依此类推。

多道程序操作系统很复杂,因为操作系统为用户做出决定,称为作业调度。如果多个作业准备同时运行,系统将从中选择一个,称为CPU调度。其他功能包括内存管理、设备和文件管理。

多道程序系统的优点是有效的资源利用率(CPU、内存、外围设备),消除或最小化浪费的CPU空闲时间,增加的吞吐量(在给定的时间间隔内,相对于提交执行的作业数量,执行的作业数)。

多道程序系统的缺点是在程序执行期间,不提供用户与计算机系统的交互,磁盘技术的引入解决了这些问题,而不是将卡片从读卡器读入磁盘,这种处理形式称为联机,复杂且相当昂贵。

2.5 多处理器/并行/紧耦合系统

这些系统有多个处理器进行紧密通信,共享计算机总线、时钟、内存和外围设备,例如UNIX、LINUX。多处理器系统有三个主要优点:

  • 增加的吞吐量:每单位时间计算的进程数。通过增加处理器的数量,可以在更短的时间内完成工作。N个处理器的加速比不是N,但小于N。因为在保持所有部件正常工作时会产生一定的开销。
  • 提高可靠性:如果功能可以在多个处理器之间正确分配,那么一个处理器的故障不会停止系统,而是会降低系统速度。这种即使发生故障仍能继续运行的能力使系统具有容错能力。
  • 经济伸缩:多处理器系统可以节省资金,因为它们可以共享外围设备、存储和电源。

多处理系统的类型包括:

  • 对称多处理(Symmetric Multiprocessing,SMP):每个处理器运行操作系统的相同副本,这些副本根据需要彼此通信。例如:Encore版本的UNIX for multi-max计算机。实际上,包括Windows NT、Solaris、Digital UNIX、OS/2和LINUX在内的所有现代操作系统现在都支持SMP。
  • 非对称多处理(主-从处理器,Master – Slave Processors):每个处理器都是为特定任务设计的。主处理器控制系统,并将工作安排和分配给从处理器。Ex-Sun的操作系统SUNOS版本4提供非对称多处理。

2.6 分布式/松耦合系统

与紧耦合系统相比,处理器不共享内存或时钟,相反,每个处理器都有自己的本地内存。处理器通过各种通信线路(如高速总线或电话线)相互通信,分布式系统的功能依赖于网络。通过能够通信,分布式系统能够共享计算任务并为用户提供丰富的功能集,网络因所使用的协议、节点和传输介质之间的距离而异。

TCP/IP是最常见的网络协议,分布式系统中的处理器大小和功能各不相同,可以是微处理器、工作站、小型计算机和大型通用计算机,网络类型基于节点之间的距离,例如LAN(在房间、楼层或建筑物内)和WAN(在建筑物、城市或国家之间)。

 

分布式操作系统的优点:资源共享,计算速度加快,负载共享/负载平衡,可靠性,通讯。

分布式操作系统的缺点:主网络故障将停止整个通信,为了建立分布式系统,所使用的语言还没有很好的定义,这些类型的系统并不容易获得,因为它们非常昂贵。不仅底层软件非常复杂,而且还没有被很好地理解。示例是LOCUS等。

2.7 网络操作系统

这些系统在服务器上运行,并提供管理数据、用户、组、安全、应用程序和其他网络功能的能力。此类操作系统允许通过小型专用网络共享访问文件、打印机、安全、应用程序和其他网络功能。网络操作系统的另一个重要方面是,所有用户都清楚底层配置、网络中所有其他用户的配置、他们的个人连接等,这就是为什么这些计算机通常被称为紧耦合系统的原因。

 

网络操作系统的优点:高度稳定的集中式服务器,安全问题通过服务器处理,新技术和硬件升级很容易集成到系统中,可以从不同位置和类型的系统远程访问服务器。网络操作系统的缺点:服务器成本高昂,用户必须依赖中央位置进行大多数操作,需要定期维护和更新。

网络操作系统的示例有Microsoft Windows Server 2003、Microsoft Windows Server 2008、UNIX、Linux、Mac OS X、Novell NetWare和BSD等。

3 操作系统结构

操作系统体系结构的设计传统上遵循关注点分离原则,这一原则建议将操作系统结构化为相对独立的部分,这些部分提供简单的单个功能,从而使设计的复杂性保持可控。

3.1 简单结构

有几个商业系统没有定义良好的结构,例如操作系统开始时是小的、简单的和有限的系统,然后扩展到超出其原始范围。MS-DOS就是这种系统的一个例子,没有仔细地划分成模块。另一个有限结构的例子是UNIX操作系统,没有CPU执行模式(用户和内核),因此应用程序中的错误可能会导致整个系统崩溃。

g)

3.2 单片结构

在这个模型中,对于每个系统调用,都有一个服务过程来处理和执行它。实用程序执行多个服务程序所需的操作,例如从用户程序中获取数据。程序分为三层,如下图所示。

 

操作系统体系结构的单片设计不适合操作系统的特殊性质。尽管设计遵循关注点分离,但没有尝试限制授予操作系统各个部分的权限,整个操作系统以最大权限执行。

单片操作系统内的通信开销与任何其他软件内的通信开支相同,被认为相对较低。CP/M和DOS是单片操作系统的简单示例,CP/M和DOS都是与应用程序共享单个地址空间的操作系统。在CP/M中,16位地址空间以系统变量和应用程序区域开始,以操作系统的三个部分结束,即CCP(控制台命令处理器)、BDOS(基本磁盘操作系统)和BIOS(基本输入/输出系统)。在DOS中,20位地址空间从中断向量数组和系统变量开始,然后是DOS的常驻部分和应用程序区域,最后是视频卡和BIOS使用的内存块。

 

3.3 分层结构

在分层方法中,操作系统被划分为多个层(级别),每个层都构建在较低层之上。底层(第0层)是硬件,最顶层(第N层)是用户界面。

 

操作系统的分层通用架构。

分层方法的主要优点是模块化,层的选择使得每个用户只具有较低层的功能(或操作)和服务。这种方法简化了调试和系统验证,即可以调试第一层,而不必考虑系统的其余部分。一旦调试了第一层,就假定它在调试第二层时正常工作,依此类推。如果在调试特定层的过程中发现错误,则该错误必须位于该层上,因为它下面的层已被调试。

这样,当系统被分解为多个层次时,系统的设计和实现就简化了。每个层仅使用较低层提供的操作来实现,层不需要知道这些操作是如何实现的;它只需要知道这些操作是做什么的。分层方法首先在操作系统中使用。它被定义为六层。

功能

5

用户程序

4

I/O管理

3

操作进程通讯

2

内存管理

1

CPU调度

0

硬件

分层方法的主要缺点:

1、主要困难在于对层的仔细定义,因为一个层只能使用它下面的那些层。例如,虚拟内存算法使用的磁盘空间的设备驱动程序必须低于内存管理例程的级别,因为内存管理需要使用磁盘空间的能力。

2、效率低于非分层系统(每一层都会增加系统调用的开销,最终的结果是系统调用比非分层系统花费的时间更长)。

其中,Unix系统的架构如下图所示:

 

Unix可分为内核和系统程序。Unix内核包括系统资源管理、接口和设备驱动程序,如CPU调度、文件系统、内存管理和I/O管理。

Linux是针对Intel 386/486/Pentium机器的完整Unix克隆,充当计算机系统的硬件和软件之间的通信服务,其内核包含了任何操作系统中所期望的所有特性,部分功能包括:

  • 多任务处理(一种在多个独立作业之间共享单个处理器的技术)。
  • 虚拟内存(允许重复、扩展使用计算机的RAM以提高性能)。
  • 快速TCP/IP驱动程序(用于快速通信)。
  • 共享库(使应用程序能够共享公共代码)。
  • 多用户能力(意味着数百人可以通过网络、互联网、笔记本电脑/计算机或连接到这些计算机串行端口的终端同时使用计算机)。
  • 保护模式(允许程序访问物理内存,并保护系统的稳定性)。

Windows XP是一个基于增强技术的多任务操作系统,集成了Windows 2000的优点,如基于标准的安全性、可管理性和可靠性,以及Windows 98和Windows Me的最佳功能,如即插即用和易于使用的用户界面。Windows XP的体系结构如下图所示,采用分层结构,由硬件抽象层、内核层、执行层、用户模式层和应用程序组成。

 

Windows XP的每个内核实体都被视为一个对象,由执行程序中的对象管理器管理。用户模式应用程序可以通过进程中的对象句柄调用内核对象。使用内核对象来提供基本服务,以及对客户端-服务器计算的支持,使Windows XP能够支持多种应用程序。Windows XP还提供虚拟内存、集成缓存、抢占式调度、更强的安全模式和国际化功能。

 

Windows和Windows Vista架构图。

3.4 微内核结构

通过删除内核的所有不重要部分并将其作为系统级和用户级程序实现来构建操作系统,通常提供最少的进程和内存管理以及通信设施, 操作系统组件之间的通信通过消息传递提供。

微内核的优点是扩展操作系统变得容易得多,对内核的任何更改都会减少,因为内核更小,微内核还提供了更高的安全性和可靠性。主要缺点是由于消息传递增加了系统开销,性能较差。

 

MINIX 3微内核只有大约12000行C语言和1400行汇编语言,用于捕捉中断和切换进程等非常低级的功能。C代码管理和调度进程,处理进程间通信(通过在进程之间传递消息),并提供一组大约40个内核调用,以允许操作系统的其余部分完成其工作。这些调用执行诸如将处理程序挂接到中断、在地址空间之间移动数据以及为新进程安装内存映射等功能。MINIX 3的进程结构如下图所示,内核调用处理程序标记为Sys。时钟的设备驱动程序也在内核中,因为调度程序与它紧密交互。其他设备驱动程序作为单独的用户进程运行。

 

Solaris结构图如下:

 

3.5 客户端-服务器结构

微内核思想的一个微小变化是区分两类进程,即服务器(每个进程都提供一些服务)和客户端(使用这些服务)。此模型称为客户机-服务器模型,通常最底层是微内核(但非必需),其本质是客户端进程和服务器进程的存在。

客户端和服务器之间的通信通常是通过消息传递进行的。为了获得服务,客户端进程构造一条消息,说明它想要什么,并将其发送到适当的服务。然后,该服务完成工作并返回答案。如果客户机和服务器碰巧在同一台机器上运行,则可以进行某些优化,如消息传递。

这种想法的一个明显的概括是让客户端和服务器运行在不同的计算机上,通过局域网或广域网连接,如下图所示。由于客户端通过发送消息与服务器通信,客户端不需要知道消息是在自己的机器上本地处理的,还是通过网络发送到远程机器上的服务器。就客户而言,在这两种情况下都会发生同样的事情:发送请求,然后回复。因此,客户机-服务器模型是一种抽象,可以用于单个机器或机器网络。

 

3.6 虚拟机

 

虚拟机涉及的概念。

虚拟机采用分层方法得出其逻辑结论,将硬件和操作系统内核视为硬件,提供与底层裸硬件相同的接口。操作系统产生了多个进程的错觉,每个进程都使用自己的(虚拟)内存在自己的处理器上执行,共享物理计算机的资源以创建虚拟机。CPU调度可以创建用户拥有自己处理器的外观。联机和文件系统可以提供虚拟读卡器和虚拟行打印机。普通用户分时终端充当虚拟机操作员的控制台。

 

虚拟机概念提供了对系统资源的完全保护,因为每个虚拟机都与所有其他虚拟机隔离。然而,这种隔离不允许直接共享资源。虚拟机系统是操作系统研究和开发的完美工具。系统开发是在虚拟机上进行的,而不是在物理机上进行,因此不会中断正常的系统操作。虚拟机概念很难实现,因为需要为底层机器提供精确的副本。它的缺点是虚拟机包括由于大量模拟虚拟机操作而增加的系统开销,VM OS的效率取决于VM监视器必须模拟的操作数。虚拟机可分为进程和系统两个级别:

 

VM/370是于1979由Seawright和MacKinnon推出的虚拟机,它基于一个敏锐的观察:分时系统提供(1)多道程序设计和(2)扩展机器,与裸硬件相比,具有更方便的接口。VM/370的本质是将这两个功能完全分离。

系统的核心,即虚拟机监视器,在裸硬件上运行并执行多道程序设计,向上一层提供的不是一个,而是几个虚拟机,如图1-28所示。然而,与所有其他操作系统不同,这些虚拟机不是扩展机,具有文件和其他漂亮的功能。相反,它们是裸硬件的精确副本,包括内核/用户模式、I/O、中断以及真实机器所拥有的所有其他内容。

 

虚拟化在Web托管领域也很流行。如果没有虚拟化,Web托管客户就不得不在共享托管和专用托管之间进行选择。当一家网络托管公司提供虚拟机出租时,一台物理机可以运行许多虚拟机,每个虚拟机看起来都是一台完整的机器。租用虚拟机的客户可以运行他们想要的任何操作系统和软件,但成本仅为专用服务器的一小部分(因为同一物理机同时支持多个虚拟机)。

虚拟化的另一个用途是为那些希望能够同时运行两个或更多操作系统(例如Windows和Linux)的最终用户提供的,因为他们喜欢的一些应用程序包在一个上运行,而另一些在另一个上运行。这种情况如图下图(a)所示,其中术语“虚拟机监控器”已重命名为类型1虚拟机监控程序,现在常用的是,因为“虚拟机监控”需要的击键次数比人们现在准备好的要多。

 

(a) 1类虚拟机监控程序。(b) 纯类型2管理程序。(c) 一个实用的2型管理程序。

 

虚拟计算机的一种架构示例。

使用虚拟机的另一个领域是运行Java程序,但方式有所不同。当Sun Microsystems发明Java编程语言时,它还发明了一种称为JVM(Java Virtual Machine)的虚拟机(即计算机体系结构)。Java编译器为JVM生成代码,然后通常由软件JVM解释器执行。这种方法的优点是,JVM代码可以通过Internet发送到任何具有JVM解释器并在其中运行的计算机,例如,如果编译器生成了SPARC或x86二进制程序,那么它们就不可能如此容易地发布和运行。使用JVM的另一个优点是,如果解释器实现正确(并不是小事),可以检查传入的JVM程序的安全性,然后在受保护的环境中执行,这样它们就不会窃取数据或造成任何损坏。

4 操作系统组件

游戏开发是一个非常复杂的过程和项目,如果没有模块化架构和高效开发环境的帮助,几乎是不可行的。当前市面上的各种产品共享由以下抽象层次组成的结构,从上到下分别是:游戏应用、游戏引擎、图形API、操作系统、设备驱动、硬件设备。

 

下图是更加详细的层级模块,其中操作系统(OS)处于图形API等第三方SDK和驱动之间,充当着承上启下的重要作用和通讯桥梁,是整个计算机层级架构极其重要的组成部分。

 

计算机系统可以分为四个部分:硬件、操作系统、应用程序和用户。系统组件的抽象视图如图1所示。

1、硬件:如CPU、内存和I/O设备。

2、操作系统:在计算机系统的操作中提供正确使用硬件的方法,类似于政府。

3、应用程序:解决用户的计算问题,如:编译器、数据库系统和web浏览器。

4、用户:人、机器或其他计算机。

 

在顶层,计算机由处理器、内存和I/O组件组成,每种类型有一个或多个模块。这些组件以某种方式互连,以实现计算机的主要功能,即执行程序。有四个主要结构要素:

  • 处理器:控制计算机的操作并执行其数据处理功能。当只有一个处理器时,它通常被称为中央处理单元(CPU)。
  • 主存储器:存储数据和程序。易丢失,当计算机关闭时,内存中的内容会丢失。相反,即使计算机系统关闭,磁盘内存的内容也会保留。主存储器也称为实存储器或主存储器。
  • I/O模块:在计算机及其外部环境之间移动数据外部环境由各种设备组成,包括辅助存储器设备(如磁盘)、通信设备和终端。
  • 系统总线:提供处理器、主存储器和I/O模块之间的通信。

 

操作系统所处的层级如下图所示:

 

通用系统架构如下图,展示了Windows的总体架构,包含了用户模式和内核模式组件。

 

上图中出现的概念的简要说明如下:

  • 用户模式
    • 用户进程。是基于镜像文件(image file)的普通进程,在系统上执行,例如Notepad.exe、cmd.exe、explorer.exe等。
    • 子系统DLL。子系统DLL是实现子系统API的动态链接库(DLL),子系统是内核公开的功能的特定视图。从技术上讲,从Windows 8.1开始,只有一个子系统——Windows子系统。子系统dll包括众所周知的文件,如kernel32.dll、user32.dll、gdi32.dll,advapi32.dll和combase.dll和许多其他dll。它们主要实现了Windows的官方API。
    • NTDLL.DLL。实现Windows本机API的系统范围DLL,是代码的最底层,仍处于用户模式,最重要的作用是将系统调用转换到内核模式,还实现了堆管理器、映像加载器和用户模式线程池的某些部分。
    • 服务进程。服务进程是正常的Windows进程,与服务控制管理器(SCM,在services.exe中实现)通信,并允许对其生命周期进行一些控制。SCM可以启动、停止、暂停、恢复并向服务发送其他消息。
    • 系统进程。系统进程是一个概括术语,用于描述通常“就在那里”的进程,在通常情况下,这些进程不会直接通信。尽管如此,它们仍然很重要,其中一些对系统的功能至关重要,终止其中一些会导致致命的系统崩溃。一些系统进程是原生进程,意味着它们只使用原生API(由NTDLL实现的API)。系统进程的示例包括Smss.exe、Lsass.exe、Winlogon.exe、Services.exe等。
    • 子系统进程。Windows子系统进程,运行镜像Csrss.exe,可视为内核助手,用于管理在Windows系统下运行的进程。它是一个关键的进程,如果被杀死,系统将崩溃。通常有一个CSRS.exe实例,因此在标准系统中存在两个实例——一个用于会话(通常为0),一个用于登录用户会话(通常为1)。尽管CSRS.exe是Windows子系统的“管理器”(目前仅剩的一个),其重要性不仅仅是此角色。
  • 内核模式
    • 执行层(Executive)。执行层是NtOskrnl.exe(“内核”)的上层,承载了内核模式下的大部分代码。主要包括各种管理器:对象管理器、内存管理器、I/O管理器、即插即用管理器、电源管理器、配置管理器等,远远大于底层的内核层。
  • 内核。内核层实现内核模式操作系统代码的最基本和时间敏感部分,包括线程调度、中断和异常调度以及各种内核原语(如互斥和信号量)的实现。一些内核代码是用CPU特定的机器语言编写的,以提高效率并直接访问CPU特定的细节。
    • 设备驱动程序。设备驱动程序是可加载的内核模块,其代码以内核模式执行,因此拥有内核的全部功能。经典设备驱动程序提供了硬件设备和操作系统其余部分之间的粘合剂,其他类型的驱动程序提供过滤功能。
  • Win32k.sys。Windows子系统的内核模式组件,本质上是一个内核模块(驱动程序),用于处理Windows的用户界面部分和经典的图形设备接口(GDI)API。意味着所有窗口操作都由该组件处理,系统的其余部分对UI几乎一无所知。
    • 硬件抽象层(HAL)。HAL是最接近CPU的硬件上的抽象层,允许设备驱动程序使用不需要中断控制器或DMA控制器等详细和特定知识的API。当然,这一层对于为处理硬件设备而编写的设备驱动程序非常有用。目标是将特定于硬件的例程从“核心”操作系统中分离出来,提供便携性,提高可读性。
  • Hyper-V管理程序。如果支持基于虚拟化的安全性(VBS),则Hyper-V管理程序存在于Windows 10和server 2016(及更高版本)系统上。VBS提供了额外的安全层,其中实际的机器实际上是由Hyper-V控制的虚拟机。

下图是微内核结构示意图:

 

OS的组件通常包含控制程序、系统服务程序、工具类程序等。其中,控制程序创建环境以运行其它程序,通过图形接口,控制和维护计算机操作,例如windows环境的GUI。系统服务程序无需用户干预即可执行特定功能,可以手动启动,也可以配置为在启动操作系统时自动启动,在运行操作系统时在后台运行,可能会影响系统性能、响应能力、能效和安全性,例如任务调度程序、windows更新、信使服务、即插即用、索引服务等。工具类程序执行与管理系统资源相关的非常具体的任务,关注各种计算机组件的操作方式,常用实用程序是磁盘格式化实用程序、防病毒实用程序、备份实用程序、文件管理器、磁盘清理等。

操作系统提供由进程通过涉及环转换的机制访问的服务,以将控制转移到执行所需功能的内核。这有一个显著的缺点,即每个服务调用都涉及上下文切换的开销,其中保存处理器状态并执行保护域传输。然而,正如A High Performance Kernel-Less Operating System Architecture所发现的,在支持分段的处理器体系结构上,通过不执行环转换,可以在访问操作系统提供的服务时获得显著的性能提升。KLOS是基于这种设计构建的无内核操作系统,它的服务调用机制比当前广泛实施的服务或系统调用机制快了一个数量级,比传统陷阱/中断提高了4倍,比Intel SYSENTER/SYSEXIT快速系统调用模型提高了2倍。

 

KLOS的架构图。

5 操作系统高性能开发

常见的OS高性能开发技术包含:

  • 在线和离线操作。为每个I/O设备编写了一个称为设备控制器的特殊子程序,一些I/O设备已配备用于在线操作(它们连接到处理器)或离线操作(它们由控制单元运行)。
  • 缓冲。缓冲区是一个主存储器区域,用于在I/O传输期间保存数据。输入时,数据通过I/O通道放入缓冲区,当传输完成时,处理器可以访问数据。可以是单缓冲或双缓冲。
  • 联机(同时进行外围设备在线操作)。联机将磁盘用作非常大的缓冲区,它很有用,因为设备访问不同速率的数据。缓冲区提供了一个等待站,当较慢的设备赶上时,数据可以在这里暂存。联机允许一个作业的计算和另一个作业I/O之间的重叠。
  • 多道程序处理。在多道程序设计中,几个程序同时保存在主存中,CPU在它们之间切换,因此CPU总是有一个要执行的程序。操作系统开始从内存执行一个程序,如果该程序需要等待,例如I/O操作,操作系统将切换到另一个程序。多程序设计提高了CPU利用率。多道程序设计系统提供了一种环境,在这种环境中,各种系统资源得到了有效利用,但它们不提供用户与计算机系统的交互。优势是CPU利用率高,似乎许多程序几乎同时分配CPU。缺点是需要CPU调度,要在内存中容纳许多作业,需要内存管理。
  • 并行系统。系统中的处理器上有2个及以上,这些处理器共享计算机总线、时钟、内存和I/O设备。优点是提高吞吐量(以时间单位完成的程序数)。
  • 分布式系统。在几个物理处理器之间分配计算,涉及通过通信链路连接2个或多个独立的计算机系统。因此,每个处理器都有自己的OS和本地内存,处理器通过各种通信线路(如高速总线或电话线)相互通信。

 

分布式系统的优点:

  • 资源共享,可以共享文件和打印机。
  • 计算速度加快。可以对作业进行分区,以便每个处理器可以并发执行一部分任务(负载共享)。
  • 可靠性。如果一个处理器出现故障,其余处理器仍然可以正常工作。
  • 通信。如电子邮件、ftp。
  • 个人计算机。专用于单个用户的计算机系统,PC操作系统既不是多用户系统,也不是多任务系统。PC操作系统的目标是最大限度地提高用户的便利性和响应能力,而不是最大限度地利用CPU和I/O。比如Microsoft Windows和Apple Macintosh。

A caching model of operating system kernel functionality描述了操作系统功能的缓存模型,可以缓存内核缓存线程和地址空间等操作系统对象,就像传统硬件缓存内存数据一样。用户模式应用程序内核处理这些对象的加载和写回,实现特定于应用程序的管理策略和机制。在多处理器上实现缓存内核及其性能测量的经验表明,该缓存模型可以提供与传统单片操作系统相比具有竞争力的性能,同时还可以提供系统资源的应用程序级控制、更好的模块化、更好的可伸缩性、更小的大小以及故障控制的基础。

如下图所示,各种应用程序、服务器内核和操作系统仿真器可以在同一硬件上同时执行。一个称为系统资源管理器(SRM)的特殊应用程序内核,每个缓存内核/MPM复制一个,管理其他应用程序内核之间的资源共享,以便它们可以同时共享相同的硬件,而不会产生不合理的干扰。例如,它可以防止运行大型模拟的恶意应用程序内核中断提供在同一ParaDiGM配置上运行的分时服务的UNIX模拟器的执行。

 

软件架构一览。

下图显示了Cache Kernel对象之间的依赖关系。图中的箭头表示从箭头尾部的对象到头部的对象的引用,因此是缓存依赖项。例如,物理内存映射中的信号映射引用一个线程,该线程引用一个引用其所属内核对象的地址空间。因此,当线程、地址空间或内核被卸载时,必须卸载信号映射。

 

缓存数据架构。

 

posted @ 2023-12-01 03:59  吴建明wujianming  阅读(77)  评论(0编辑  收藏  举报