27 KiB
概述
操作系统的定义
- 是系统最基本最核心的软件,属于系统软件。
- 控制和管理整个计算机的硬件和软件资源。
- 合理的组织、调度计算机的工作与资源的分配。
- 为用户和其它软件提供方便的接口和环境。
操作系统的功能
计算机系统资源的管理者
管理软硬件资源、合理的组织、调度计算机的工作与资源的分配。
处理器(CPU)管理
在多道程序环境下,$CPU$的分配和运行都以进程(或线程)为基本单位,因此对$CPU$的管理可理解为对进程的管理。进程管理的主要功能包括进程控制、进程同步、进程通信、死锁处理、处理机调度等。
存储器管理
为多道程序的运行提供良好的环境,方便用户使用及提高内存的利用率,主要包括内存分配与回收、地址映射、内存保护与共享和内存扩充等功能。
文件管理
计算机中所有的信息都是以文件的形式存在的,操作系统中负责文件的管理的部分称为文件系统,文件管理包括文件存储空间的管理、目录管理及文件读写管理和保护等。
设备管理
设备管理的主要任务是完成用户的$I/O$请求,方便用户使用各种设备,并提高设备的利用率,主要包括缓存管理、设备分配、设备处理和虚拟设备等功能。
用户与计算机硬件系统之间的接口
为了让用户方便、快捷、可靠的操作计算机硬件并执行自己的程序,操作系统提供了用户接口。
操作系统提供的用户接口分为三类:命令接口、程序接口、图形用户接口。
命令接口
用户可以直接使用的,利用这些操作命令来组织和控制作业的执行。
命令接口分为两类:联机命令接口和脱机命令接口。
- 联机命令接口:又称交互式命令接口,适用于分时或实时系统的接口,由一组键盘操作命令组成。用户输入一条指令,操作系统就执行一条指令。
- 脱机命令接口:又称批处理接口,使用于批处理系统,由一组作业控制命令组成。用户输入一堆指令,操作系统运行一堆指令。在操作系统运行这些命令时用户不可干预。
批处理($Batch$),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于$DOS$和$Windows$系统中。批处理文件的扩展名为$bat$。
程序接口
用户通过程序间接使用的,编程人员可以使用它们来请求操作系统服务。由一组系统调用(也称广义指令)组成。
用户通过在程序中使用这些系统调用来请求操作系统为其提供服务(也称为系统调用),只能通过用户程序间接调用,如使用各种外部设备、申请分配和回收内存及其它各种要求。
图形用户接口
即图形用户界面$GUI$。指采用图形方式显示的计算机操作用户界面。图形接口不算操作系统的一部分,但是其调用的系统调用命令是操作系统的一部分。
作为扩充机器(虚拟机)
没有任何软件支持的计算机称为裸机。
覆盖了软件的机器称为扩充机器或虚拟机。
操作系统的特征
操作系统具有并发、共享、虚拟、异步四个特征,其中并发和共享是两个最基本的特征,两者互为存在条件。
并发
- 并发:两个或多个事件在同一时间间隔内发生,这些事件在宏观上是同时发生的,在微观上是交替发生的,操作系统的并发性指系统中同时存在着多个运行的程序。
- 并行:两个或多个事件在同一时刻发生。
- 一个单核($CPU$)同一时刻只能执行一个程序,因此操作系统会协调多个程序使他们交替进行(这些程序在宏观上是同时发生的,在微观上是交替进行的)。
- 操作系统是伴随着“多道程序技术”出现的,因此操作系统和并发是一同诞生的。
- 在如今的计算机中,一般都是多核$CPU$的,即在同一时刻可以并行执行多个程序,比如计算机是八核的,计算机可以在同一时刻并行执行八个程序,但是事实上计算机执行的程序并不止八个,因此并发技术是必须存在的,并发性必不可少。
共享
- 资源共享即共享,是指系统中的资源可以供内存中多个并发执行的进程共同使用。
- 共享分为两类:互斥共享和同时共享。
互斥共享
- 计算机中的某个资源在一段时间内只能允许一个进程访问,别的进程没有使用权。
- 临界资源(独占资源):在一段时间内只允许一个进程访问的资源,计算机中大多数物理设备及某些软件中的栈、变量和表格都属于临界资源,它们被要求互斥共享。
- 比如$QQ$和微信视频。同一段时间内摄像头只能分配给其中一个进程。
同时共享
- 计算机中的某个资源在在一段时间内可以同时允许多个进程访问。
- 同时共享通常要求一个请求分为几个时间片段间隔的完成,即交替进行,微观上“分时共享”。
- 这里的同时指在宏观上是同时的,在微观上是交替进行访问的,只是$CPU$处理速度很快,我们感觉不到,在宏观上感觉是在同时进行。
- 举个例子:比如$QQ$在发送文件$A$,微信在发送文件$B$,宏观上两个进程$A$和$B$都在访问磁盘,在我们看来是同时进行的,但是在微观上两个进程$A$和$B$是交替进行访问磁盘的,只是时间太短,$CPU$处理速度太快,我们感觉不到。
- 有时候多个进程可能真的是在同时进行资源访问,比如玩游戏时可以放音乐,游戏声音和音乐声音都能听见。
虚拟
虚拟技术
- 虚拟是把一个物理上的实体变为若干逻辑上的对应物。
- 物理实体(前者)是实际存在的;而后者是虚的,是用户感觉上的事务。
- 虚拟技术:用于实现虚拟的技术。
- 虚拟处理器($CPU$):通过多道程序设计技术,采用让多道程序并发执行的方法,分时来使用一个$CPU$,实际物理上只有一个$CPU$,但是用户感觉到有多个$CPU$。
- 虚拟存储器:从逻辑上扩充存储器容量,用户感觉到的但实际不存在的存储器。
- 虚拟设备:将一台物理设备虚拟为逻辑上的多台设备,使多个用户在同一时间段内访问同一台设备,即同时共享,用户宏观上感觉是同时的,但实际上是微观交替访问同一台设备的。
- 操作系统的虚拟技术科归纳为:
- 时分复用技术:如处理器的分时共享。
- 空分复用技术:如虚拟存储器。
异步
- 异步指多道程序环境允许多个程序并发执行,但由于资源有限,如$CPU$只有一个,进程的执行并不是一贯到底的,而是走走停停的,它以不可预知的速度向前推进。
- 比如$A$进程正在占用$CPU$计算,$B$进程这时也想占用$CPU$计算,$B$进程只有等,等$A$进程算完了,$A$进程去访问磁盘资源了,这时$B$进程再占用$CPU$进行计算,$B$进程还没计算完,$A$进程从磁盘取出资源了,$A$进程发现$B$这时在占用$CPU$,这时$A$进程就需要等待,等$B$算完后再继续到$CPU$中进行计算。由于每个进程占用资源的时间不固定,所以进程的执行以不可预知的速度前进。
- 操作系统必须在运行环境相同的条件下保证运行结果的一致性。
多道程序设计
多道程序设计:是指在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制之下,相互穿插的运行。 两个或两个以上程序在计算机系统中同处于开始到结束之间的状态。这就称为多道程序设计。多道程序技术运行的特征:多道、宏观上并行、微观上串行。
- 制约性:共享资源和相互协同产生了竞争。
- 间断性:为了竞争公平,需要间断释放资源重新竞争。
- 共享性。
封闭性。顺序性:单道程序设计特征。
操作系统的发展阶段
手动操作阶段
无操作系统。
- 缺点:
- 用户独占全机。
- 人机速度矛盾。
单道批处理系统
- 引入脱机输入/输出技术(磁带),并用监督程序复杂控制作业的输入输出。
- 特点:
- 自动性。
- 顺序性。
- 单道性。
- 优点:
- 缓解了一定的人机速度矛盾,资源利用率得到提升。
- 缺点:
- 内存只能有一道程序运行。只能串行执行。
- $CPU$大量时间用于等待$I/O$的完成,资源利用率低。
多道批处理系统
- 操作系统正式诞生,引入中断技术,从而能并发执行程序。
- 特点:
- 多道。
- 宏观并行。
- 微观串行。
- 优点:
- 多道程序并发执行,共享计算机资源。
- 资源利用率提升,$CPU$和其他资源基本上忙碌,系统吞吐量增大。
- 缺点:
- 用户响应时间长。
- 无法人机交互,不能控制作业执行。
- 问题:
- 处理器分配。
- 多道程序内存分配。
- $I/O$设备分配。
- 程序数据组织存放。
操作系统的分类
由于无法人机交互,操作系统进一步发展,出现了不同种类的操作系统。
分时操作系统
- 计算机以时间片为单位轮流为各个用户/作业服务,每个用户可以通过终端与计算机交互。
- 特点:
- 同时性。
- 交互性。
- 独立性。
- 及时性。
- 优点:
- 用户请求可以及时响应,解决人机交互问题。
- 运行多个用户共同使用一台计算机,且用户对计算机的操作相互独立,感受不到其他人存在。
- 缺点:
- 不能处理紧急任务,操作系统对于每个用户都是公平的,循环给出时间片。
- 非抢占式优先级高者优先算法。
实时操作系统
- 能优先响应紧急任务,不用等待时间片排队。
- 特点:
- 及时性。
- 可靠性。
- 优点:
- 能优先处理紧急任务,使用率更高。
- 对于紧急事件能有效高速处理,可靠性较高。
- 分类:
- 硬实时系统:对某个动作必须绝对在指定时间内完成,如导弹系统、股票系统、自动驾驶系统等。
- 软实时系统:对某个动作可以接受偶尔违反规定且伤害较小,如订票系统,旅店管理系统。
- 抢占式优先级高者优先算法。
其他操作系统
- 网络操作系统:伴随计算机网络发展,能连接网络中各个计算机从而能传输数据,实现网络中各种资源的共享和计算机之间的通信,如$Windows,NT$。
- 分布式操作系统:具有分布性和并行性,系统中各个计算机地位相同,任何工作可以分布在这些计算机上,并行写协同完成任务。
- 个人计算机操作系统:方便个人使用的操作系统,如$Windows,10$、$MacOS$等。
操作系统运行环境
系统开机后,操作系统的程序会被自动加载到内存中的系统区,这段区域是$RAM$。
操作系统运行机制
两种指令
- 指令就是处理器能识别和执行的最基本命令。所以指令能控制处理器,需要给指令进行控制,对于危险的指令要更高的权限。
- 特权指令:
- 指具有特殊权限的指令,只用于操作系统或其他系统软件,只能操作系统使用,普通用户不能直接使用。
- 如有关对$I/O$设备使用的指令、有关访问程序状态的指令、存取特殊寄存器指令。
- 具体而言如清内存、置时钟、输入输出、分配系统资源、修改虚存的段表和页表,修改用户的访问权限等。
- 非特权指令:
- 可以被用户自由使用的指令。
- 如读取时钟、从内存中取数、将运算结果装入内存、算术运算、寄存器清零等。
相关特权指令说明:
- 置时钟:若在用户态下执行“置时钟指令”,则一个用户进程可在时间片还未到之前把时钟改回去,从而导致时间片永远不会用完,进而导致该用户进程一直占用$CPU$,这显然不合理。
- 输入输出:涉及中断指令,而中断处理由系统内核负责,工作在核心态。
处理机状态
操作系统根据处理器状态来判断是否可以使用特权指令。
操作系统用程序状态字寄存器$PSW$中的某标志位来标识当前处理器处于什么状态,如$0$为用户态,$1$为核心态。
- 用户态(目态):只能执行非特权指令。
- 核心态(管态):可以执行特权指令。
计算机通过硬件完成操作系统由用户态到核心态的转换,这是通过中断机制来实现的。发生中断事件时(有可能是用户程序发出的系统调用),触发中断,硬件中断机制将计算机状态置为核心态。
计算机通过操作系统程序从核心态到用户态的转换,执行完成中断后操作系统自动转换。
程序类别
根据程序所可以使用指令的权限,程序分为两种:
- 内核程序:是系统的管理者,既可以运行特权指令也可以运行非特权指令,运行在核心态。
- 应用程序:为了保证安全,普通应用程序只能执行非特权指令,运行在用户态。
操作系统的内核
操作系统的程序既然分为内核程序和应用程序,就说明有些程序是更重要的。
内核是计算机上配置的底层软件,是操作系统最基本最核心的部分,而实现操作系统内核功能的程序就是内核程序,其他的就是非内核功能。
内核功能分为:
- 时钟管理:
- 进程等的计时功能。
- 时钟中断实现进程切换。
- 中断处理:
- 负责实现中断机制,提高$CPU$利用率。
- 只有一小部分功能属于内核,负责保护和恢复现场,转移控制权给相关处理程序。
- 原语:
- 是一种特殊的公用程序,是最接近硬件的部分。
- 这种程序的运行具有原子性,运行时间短,调用次数频繁。
- 定义原语的直接方法是关闭中断,让所有操作一致完成再打开中断。
- 如设备驱动、$CPU$切换、进程通信等。
- 系统资源管理功能:可能包含在内核中也可能不包含:
- 进程管理。
- 存储器管理。
- 设备管理。
中断
中断是内核所必要的基本功能。
中断机制的概念
- 并发批处理就需要中断机制。发生中断就表示需要操作系统介入,开展管理工作。
- 用户态道核心态之间的转换是通过中断实现的,且是唯一的途径,通过硬件的控制,类似$10$标志位。
- 而核心态道用户态之间的切换只用执行一个特权指令,将程序状态字$PSW$的标志位设置为用户态。
- 当中断发生时,$CPU$立刻进入核心态。
- 当中断发生后,当前运行的进程暂停,并由操作系统内核对中断进行处理。
- 对于不同的中断信号会进行不同的处理。
中断的分类
中断来源:
- 内中断(异常、例外、陷入)信号来自$CPU$内部,与当前执行的命令有关,必须立刻处理,且对于无法恢复故障的需要终止进程。
- 陷阱、自陷$Trap$:是一种事先安排的"异常"事件,用于在用户态下调用操作系统内核程序,如条件陷阱指令引起的访管中断。
- 故障$Fault$:通常是由指令执行引起的异常,如非法操作码、缺页故障、除数为零、运算溢出等。
- 终止$Abort$:是指出现了使得$CPU$无法继续执行的硬件故障,如控制器出错、存储器校验错等。
- 外中断(中断)信号来自$CPU$外部,与当前执行的命令无关。
- 可屏散中断中断是指通过$INTR$线发出的中断请求,通过改变屏蔽字可以实现多重中断,从而使得中断处理更加灵活。
- 不可屏蔽中断是指通过$NMI$线发出的中断请求,通常是紧急的硬件故障,如电源掉电等。
- 异常也是不能被屏蔽的。
- 常见外中断:
- 外设请求:如$I/O$操作完成时发出的中断信号。
- 时钟中断:时间片已到。
- 人工干预。
中断性质:
- 自愿中断:指令中断。
- 强迫中断:
- 硬件故障。(缺页、主存故障造成机器校验中断)
- 软件中断。(整数除零)
中断优先级
优先级从高到低:
- 内部中断:
- 故障中断。
- 访管中断。
- $DMA$中断。
- 外中断:
- 不可屏蔽中断。
- 可屏蔽中断。
- 高速设备中断。
- 低速设备中断。
- 输入输出设备中断。
- 实时时钟中断。
- 非实时时钟中断。
- 程序指令中断。
- 单步执行中断。
- 重启。
外中断的处理过程
- 关中断。$CPU$响应中断后,首先要保护程序的现场状态,在保护现场的过程中,$CPU$不应响应更高级中断源的中断请求。否则,若现场保存不完整,在中断服务程序结束后,也就不能正确地恢复并继续执行现行程序。
- 保存断点。为保证中断服务程序执行完毕后能正确地返回到原来的程序,中断隐指令将原来的程序的断点(即程序计数器$PC$)保存起来。由硬件自动完成。这是每个程序都要完成的。
- 中断服务程序寻址。其实质是取出中断服务程序的入口地址送入程序计数器$PC$。
- 保存现场和屏蔽字。进入中断服务程序后,首先要操作系统保存现场,现场信息一般是指程序状态字寄存器$PSWR$和某些通用寄存器的内容,即中断屏蔽字。只有父程序才需要完成,子程序不需要。
- 开中断。允许更高级中断请求得到响应。
- 执行中断服务程序。这是中断请求的目的。各中断向量统一存放在中断向量表中,该表由操作系统初始化,硬件找到该中断信号对应的中断向量,中断向量指明中断服务程序入口地址,然后根据其开始执行。
- 关中断。保证在恢复现场和屏蔽字时不被中断。
- 恢复现场和屏蔽字。将现场和屏蔽字恢复到原来的状态。
- 开中断、中断返回。中断服务程序的最后一条指令通常是一条中断返回指令,使其返回到原程序的断点处,以便继续执行原程序。
第一步到第三步是$CPU$进入中断周期后,由硬件自动完成(中断隐指令),第四到九条是中断服务程序(软件)完成。
终端服务程序本身可能是用户程序,但是具体进入中断进行处理的程序一定是系统程序。
中断处理和子程序调用都会压栈保存数据。子程序调用只需保存程序断点$PC$内容,即该指令的下一条指令的地址;中断处理不仅要保存断点($PC$的内容),还要保存程序状态字寄存器($PSW$)的内容。
系统调用
系统调用的概念
系统调用是程序接口的组成部分,用于应用软件调用,也称为广义指令。可以认为是一种可供应应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。
通过编译,系统调用需要触发访管指令,所以形成一系列参数与访管指令。
系统调用的过程
为什么要使用系统调用来处理应用程序的请求?如果不同进程争用有限的资源,没有良好的处理机制就会混乱。所以操作系统提供系统调用提供统一处理的过程规范,应用程序通过系统调用发出请求,操作系统在根据请求协调管理。
系统调用本质就是指令中断,所以需要特权指令,从而系统调用的相关处理只能在核心态下进行。
- 传递系统调用参数。
- 执行陷入指令(用户态)。
- 执行系统调用相应服务程序(核心态)。
- 返回用户程序。
- 陷入指令也称为访管指令,在用户态执行(因此不是特权指令),执行陷入指令后立刻引发一个内中断,从而$CPU$进入核心态。
- 发出系统调用请求的是在用户态,而对系统调用的相应处理在核心态下进行。
- 陷入指令是唯一一个只能在用户态执行,而不能在核心态执行的指令。
系统调用的类别
- 设备管理:设备的请求、释放、启动。
- 文件管理:文件的读、写、创建、删除。
- 进程管理:进程的创建、撤销、阻塞、唤醒。
- 进程通信:进程之间的消息传递、信号传递。
- 内存管理:内存的分配、回收。
系统调用与库函数的区别
| 层次 | 使用关系 |
|---|---|
| 普通应用程序 | 可直接使用系统调用,也可以使用库函数。有的库函数涉及系统调用有些则不涉及 |
| 编程语言 | 向上提供库函数,有时会将系统调用封装为库函数以隐藏系统调用细节,从而使上层系统调用更方便 |
| 操作系统 | 向上提供系统调用 |
| 裸机 | 无 |
操作系统的体系结构
按功能关系分类可以分为分层式架构和模块化架构;按照内核架构分类可以分为宏内核和微内核。
分层法
层$0$为硬件,层$N$为用户接口。每层只能调用紧邻其低层的功能和服务,为单向依赖。
优点:
- 便于系统调试和验证,简化系统设计和实现。
- 从底层向上调试。
- 易扩充和维护,不会影响其他层次。
缺点:
- 分层困难。
- 依赖复杂,不够灵活。
- 使用一个功能要穿越多层调用,效率较低。
模块化
将系统功能划分为独立模块,通过接口进行通信。重点是划分模块的方式。
标准:
- 内聚性,模块内部各部分间联系的紧密程度。内聚性越高,模块独立性越好。
- 耦合度,模块间相互联系和相互影响的程度。耦合度越低,模块独立性越好。
优点:
- 提高了操作系统设计的正确性、可理解性和可维护性。
- 增强了操作系统的可适应性。
- 加速了操作系统的开发过程。
缺点:
- 模块间的接口规定很难满足对接口的实际需求。
- 各模块设计者齐头并进,每个决定无法建立在上一个已验证的正确决定的基础上,因此无法找到一个可靠的决定顺序。
宏内核
除了基本功能外还包含进程管理等其他功能。
优点:高性能,速度快。
缺点:
- 内核代码庞大,结构混乱,难以维护。
- 可靠性低,不稳定,单个服务崩溃全系统崩溃。
- 占用空间大。
- 可移植性差。
主流的系统,如$Windows$、$MacOS$等都是宏内核。
微内核
内核功能只包含低级进程(线程)管理、低级存储器管理、中断和陷入处理、低级输入输出。
通过信息传递机制传输数据。
特点:
- 内核小。
- 基于C/S结构。
- 机制与策略分离。机制是指实现某一功能的其体执行机构。策略则是在机制的基础上借助于某些参数和算法来实现该功能的优化,或达到不同的功能目标。在传统的$OS$中,将机制放在$OS$内核的较低层中,把策略放在内核的较高层中。而在微内核$OS$中,通常将机制放在$OS$的微内核中。正因如此,才可以将内核做得很小。
- 面向对象技术。
优点:
- 扩展性和灵活性。
- 可靠性和安全性。
- 内核稳定。
- 可移植性。
- 分布式计算。
缺点:因为很多功能不在内核中,需要频繁在核心态和用户态之间切换,效率较低。
很多新系统,如谷歌$Fuchsia$和华为鸿蒙都是微内核。
外核
外核为一个程序,在内核态中运行,为虚拟机分配资源并管理。
优点:
- 减少了映射层,不需要表格重映磁盘地址。
- 将多道程序与操作系统代码分离。
操作系统引导
- 激活$CPU$。充电,$CS:IP$指向$FFFF0H$。
- 执行$JMP$指令跳转到$BIOS$(基本输入输出系统)。$BIOS$是一组固化到计算机内主板上一个$ROM$芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从$CMOS$中读写系统设置的具体信息。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,$BIOS$还向作业系统提供一些系统参数。系统硬件的变化是由$BIOS$隐藏,程序使用$BIOS$功能而不是直接控制硬件。现代作业系统会忽略$BIOS$提供的抽象层并直接控制硬件组件。
- 登记$BIOS$中断例程入口地址。读取$ROM$中的$boot$程序,将指令寄存器置为$BIOS$的第一条指令,即开始执行$BIOS$的指令。
- 硬件自检,并识别已连接的外设。检查硬件是否出现故障。如有故障,主板会发出不同含义的蜂鸣,启动中止。如无故障,屏幕会显示$CPU$、内存、硬盘等信息。
- 加载带有操作系统硬盘。硬件自检后,$BIOS$开始读取$Boot,Sequence$(通过$CMOS$里保存的启动顺序,或者通过与用户交互的方式),把控制权交给启动顺序排在第一位的存储设备,然后$CPU$将该存储设备引导扇区的内容加载到内存中。
- 在$ROM$中加载主引导记录$MBR$。硬盘以特定的标识符区分引导硬盘和非引导硬盘。如果发现一个存储设备不是可引导盘,就检查下一个存储设备。如无其他启动设备,就会死机。主引导记录$MBR$的作用是告诉$CPU$去硬盘的哪个主分区去找操作系统。
- $MBR$扫描硬盘分区表,加载硬盘活动分区。$MBR$包含硬盘分区表,硬盘分区表以特定的标识符区分活动分区和非活动分区。主引导记录扫描硬盘分区表,进而识别含有操作系统的硬盘分区(活动分区)。找到硬盘活动分区后,开始加载硬盘活动分区,将控制权交给活动分区。
- $MBR$加载分区引导记录$PBR$。即该分区的启动程序(操作系统引导扇区),读取活动分区的第一个扇区,这个扇区称为分区引导记录($PBR$),其作用是寻找并激活分区根目录下用于引导操作系统的程序(启动管理器)。
- 加载启动管理器。硬盘的分区引导记录搜索活动分区中的启动管理器(活动分区的引导扇区的引导程序),加载启动管理器。
- 加载操作系统。常驻内存的只有操作系统的内核,其他是需要再调入。
虚拟机
裸金属架构:
--------------------------------------------------------
| 用户操作系统程序进程 | 用户操作系统程序进程 | |
----------------------------------------------| 控制域 |
| 客户操作系统 | 客户操作系统 | |
--------------------------------------------------------
| 第一类虚拟机管理程序 |
--------------------------------------------------------
| 硬件 |
--------------------------------------------------------
寄居架构:
------------------------
| 用户程序 |
------------------------
| 客户操作系统 |
-------------------------------------------
| 第二类虚拟机管理程序 | 宿主操作系统进程 |
-------------------------------------------
| 宿主操作系统 |
-------------------------------------------
| 硬件 |
-------------------------------------------