操作系统-Operating-System第三章01:计算机体系结构及内存分层体系

B站资源:操作系统_清华大学(向勇、陈渝)

Github资源:chyyuu/os_course_info

参考书籍:Operating systems: internals and design principles

Operating System Concepts

MIT公开课:6.828: Operating System Engineering

计算机体系结构

Windows基本架构

下图为Windows 7的总体结构, 所有基于Windows NT的发行版都拥有类似的体系结构。几乎和所有操作系统一样,Windows系统从内核中分离了面向应用的软件(application-oriented software)。总体包括执行单元,内核,设备驱动和硬件抽象层,运行在内核态。内核态下可以访问系统数据和硬件,剩下的软件则运行在用户态,对于系统数据的访问受限。

尽管WINDOWS是用C语言写的,但是很多设计原则和面向对象思想是一致的。

操作系统-Operating-System第三章01:计算机体系结构及内存分层体系

Windows是一种高度模块化的结构。所有的系统功能由操作系统的一个组成部分实现。剩下的操作系统和应用通过相应负责的组成部分和标准的结构实现特定的功能。关键的系统数据只能被合适的函数所调用。原理上,任何模块都可以被移除、更新或替换,同时并不需要重写整个系统或者他的标准应用程序接口Application program interfaces,简称API)。

内核态组成

执行器(Executive:核心的OS服务,例如内存管理,进程和线程管理,安全,I/O以及进程内通讯。

内核(Kernel:控制处理器的执行。内核管理了线程调度,进程的切换,异常和中断处理以及多处理器同步。不像剩下的执行器和用户层,内核自己的代码不会在线程运行。

硬件抽象层(Hardware abstract layer,简称HAL):在通用硬件命令和响应与特定平台的命令之间进行映射。它将操作系统与特定于平台的硬件差异区分开来,使得每一个操作系统的系统总线,直接内存控制器,中断控制器,系统计时器和内存控制器,在执行器和内核面前看起来一样。

设备驱动(Device drivers:动态库扩展了执行器的功能性。其中包括可以将用户的I/O功能调用转换为特定硬件设备I/O请求的硬件设备驱动 ,以及用于实现文件系统,网络协议和需要以内核态运行的任何其他系统扩展。

窗口和图形系统(Windowing and graphics systems):继承了GUI功能,例如处理窗口、用户界面控制和绘图。

其中执行器主要包括以下部分:

  1. I/O管理(I/O manager):提供一个框架,应用程序可以通过该框架访问I/O设备,并负责分派给适当的设备驱动程序以进行进一步处理。
  2. 缓存管理(Cache manager):通过使最近引用的文件数据驻留在主内存中以便快速访问,将数据发送到磁盘之前先保留一段时间来推迟磁盘写入,从而提高了基于文件的I/O性能。
  3. 对象管理(Object manager):创建,管理和删除用于资源(例如进程,线程和同步对象)的Windows执行器对象。它强制执行用于保留,命名和设置对象安全性的统一规则。对象管理器还在每个进程的句柄表中创建条目,其中包括访问控制信息和指向对象的指针。
  4. 即插即用管理器(Plug-and-play manager):确定支持特定设备所需的驱动程序并加载这些驱动程序。
  5. 电源管理(Power manager):协调各种设备之间的电源管理,并且可以关闭空闲设备,是处理器进入睡眠状态,升值将所有的内存写入磁盘并切断整个系统的电源来降低功耗。
  6. 安全引用监视器(Security reference monitor):强行执行访问验证和审核生成规则。Windows的面向对象模型允许对安全性进行一致、统一的查看,直至构成安全性的基本实体。因此,Windows使用相同的程序进行访问验证以及对所有受保护对象(包括文件,进程,地址空间和I/O设备)进行盛和检查。
  7. 虚拟内存管理(Virtually memory manager):管理虚拟地址,物理内存,和磁盘上的页面文件。控制内存管理硬件和数据结构,这些硬件和数据结构将地址空间中的虚拟地址映射到计算机内存中的物理页面。
  8. 进程/线程管理(Process/thread manager):创建、管理和删除进程和线程对象。
  9. 配置管理(Configuration manager):负责实施和管理系统注册表,该注册表是系统内每个用户的各种参数设置的存储库。
  10. 先进的本地程序调用工具(Advanced local procedure call(ALPC) facility):实现有效的跨进程过程调用机制,以实现服务和子系统本地进程之间的通信。

用户态进程

以下为Windows下四个基本的用户态进程:

特殊系统进程(Special system processes):需要管理系统的用户态服务,例如会话管理,身份验证子系统,服务管理和登录过程。

服务进程(Service processes):打印机后台处理程序,活动日志,与驱动程序配合使用的用户态组件,各种网络服务以及许多其他功能。Windows和外部程序开发人员都使用服务来扩展系统功能,因为它们是在Windows系统上运行后台用户态活动的唯一办法。

环境子系统(Environment subsystems):提供不同的操作系统个性(环境)。每个环境子系统都包含一个子系统进程,该子系统进程使用子系统和动态链接库(DDL)在所有的应用程序之间共享,动态链接库将用户应用程序调用转换为子系统进程上的ALPC调用或者本机Windows调用。

用户应用(User application):提供用户运行以使用系统功能的可执行文件(Executable,简称EXEs)和动态链接库(Dynamic link libraries,简称DLLs)。EXE和DLL通常正对特定的环境子系统

Unix基本架构

unix基本架构

操作系统-Operating-System第三章01:计算机体系结构及内存分层体系

传统unix内核

操作系统-Operating-System第三章01:计算机体系结构及内存分层体系

内存分层体系

计算机系统内存的设计原则可以被总结为三个问题(三个how):多少(How much)?多快(How fast)?多贵(How expensive)?

  1. How much?

    容量多少的问题没有定论,如果可以,应用程序可以尽可能的来使用这些容量。

  2. How fast?

    为了获得最佳性能,内存必须跟上处理器的速度。也就是说当处理器正在执行指令时,我们不希望它暂停等待指令或者操作数。

  3. How expensive?

    对于一个实际的系统,内存的成本和其他的部件相比合理。

总结来说就是三点:容量访问时间成本。 多种技术用于实现内存系统,在这一系列技术中,以下关系保持不变:

  1. 更快的访问速度,每位所需的成本越高;
  2. 更大的容量,每位所需的成本越低;
  3. 更大的容量,访问速度越慢。

所以设计者棉铃的困境显而易见。设计者希望使用提供大容量内存的内存技术,这既是因为容量是必须的,同样也因为每位带来的成本就更低。然而,为了满足性能要求,设计者需要使用昂贵、容量相对较低、存取时间快的存储器。为了实现这个目的,不是依赖于单个内存组件或技术,而是采用内存层次结构,如下图所示。

操作系统-Operating-System第三章01:计算机体系结构及内存分层体系

有了层次结构之后,更小、更贵、更快的存储器由更大、更便宜、更慢的存储器补充。关键在于,降低低层次存储器的

用。假设处理器可以访问两个级别的内存。等级1包含1000位,访问时间为0.1 μ \mu μs,等级2包含100000位,访问时间为1 μ \mu μs

如果一个位数据可以从等级1中获取,则处理器可以直接获得。但如果在等级2中,这个位数据会先从等级2转移到等级1

然后被处理器获得。为简单起见,可以忽略处理器确定字节是在等级1还是等级2所需的时间。下图所示为上述情况的简

曲线。两个等级内存的平均访问时间关于H(hit ratio,在更快的内存(如缓存中)找到的所有内存访问的百分比)

为等级1的访问时间, T 2 T_2 T2为等级2的访问时间。可以发现对于高占比的一级访问,平均访问时间相比二级访问时间更接近

一级访问。 假设 95 % 95\% 95%的内存访问在缓存中(H=0.95),则对于一位数据的总平均访问时间可以计算为:

( 0.95 ) ( 0.1 μ s + ( 0.05 ) ( 0.1 μ s + 1 μ s ) = 0.095 + 0.055 = 0.15 μ s (0.95)(0.1\mu{s}+(0.05)(0.1\mu{s}+1\mu{s})=0.095+0.055=0.15\mu{s} (0.95)(0.1μs+(0.05)(0.1μs+1μs)=0.095+0.055=0.15μs

由此可见两层内存结构是可以加快内存的访问速度。

操作系统-Operating-System第三章01:计算机体系结构及内存分层体系

缓存

虽然缓存对于操作系统是不可见的,但它其他的内存管理硬件进行交互。

为什么要引入缓存?

首先了解程序的执行过程。首先从硬盘执行程序,存放到内存,再交给CPU运算和执行。由于内存和硬盘的速度相比于CPU实在慢太多了,每执行一个程序CPU都需要等待内存和硬盘,引入缓存技术便是为了解决此问题,缓存和CPU速度一直,CPU从缓存中读取数据比在内存快的多,从而提升了电脑性能。

在所有的指令周期中,处理器至少访问内存一次来获取指令,为了获取指令,通常要一次或者多次额外的次数,以获取操作数和存储结果。显而易见,处理器处理指令的速度取决于内存的周期次数(从内存中读取数据或者向内存中写入数据的次数)。主要还是因为处理器和内存之间运行速度的不匹配,理想来说,主存应该使用与处理器寄存器使用相同的技术构建,使得内存周期和与处理器周期时间相当,但是这一直一个代价很高的策略。解决方案则是利用局部性原理,在处理器和主存之间提供一个小而快的内存,即缓存(Cache)。

(a)有一个比较快的缓存和相对较小的主内存。缓存包含一部分主内存的副本。当处理器企图从内存中读取一个位或者一个字节的数据时,将会首先检查缓存中是否有这个位或者这个字节的数据。如果没有的话,则由固定字节组成的主存块将被读入高速缓存,然后字节或者位数据被传送给处理器。

(b)对于三级缓存来说,L2相比于L1速度更慢,但是容量越大。L3相比于L2速度更慢,但容量更大。

操作系统-Operating-System第三章01:计算机体系结构及内存分层体系

操作系统-Operating-System第三章01:计算机体系结构及内存分层体系