# 操作系统的定义
实际上操作系统没有普遍接受的定义
操作系统 (Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。
# 操作系统的功能和目标
# 作为系统资源的管理者
# 提供的功能
处理机管理
存储器管理
文件管理
设备管理
# 目标
安全、高效
# 向上层提供方便易用的服务
# GUI
(Graphical User Interface) 图形化用户接口
# CLI
(Command Line Interface) 命令行接口
- 联机命令接口 = 交互式命令接口
- 脱机命令接口 = 批处理命令接口
# 程序接口
可以在程序中进行系统调用来使用程序接口。普通用户不能直接使用程序接口,只能通过程序代码间接使用。
软件和程序员才能使用程序接口
封装思想:操作系统把一些丑陋的硬件功能封装成简单易用的服务,使用户能更方便地使用计算机,用户无需关心底层硬件的原理,只需要对操作系统发出命令即可
# 作为最接近硬件的层次
目标:实现对硬件机器的拓展
没有任何软件支持的计算机称为裸机。在裸机上安装的操作系统,可以提供资源管理功能和方便用户的服务功能,将裸机改造成功能更强、使用更方便的机器
通常把覆盖了软件的机器成为扩充机器,又称之虚拟机
# 操作系统的特征
# 并发
并发:指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的
操作系统的并发性:计算机系统中 “同时” 运行着多个程序,这些程序宏观上看是同时运行着的,而微观上看是交替运行的。
操作系统就是伴随着 “多道程序技术” 而出现的。因此,操作系统和程序并发是一起诞生的。
注意(重要考点):单核 CPU 同一时刻只能执行一个程序,各个程序只能并发地执行多核 CPU 同一时刻可以同时执行多个程序,多个程序可以并行地执行
# 共享
共享即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。
# 互斥共享方式
系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源
# 同时共享方式
系统中的某些资源,允许一个时间段内由多个进程 “同时” 对它们进行访问
所谓的 “同时” 往往是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问的(即分时共享)
并发 和 共享 的关系是相互依存,不可分割的
如果失去并发性,则系统中只有一个程序正在运行,则共享性失去存在的意义;
如果失去共享性,则不同的程序不能同时访问硬盘资源,就无法实现同时发送文件,也就无法并发
# 虚拟
虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的。
# 空分复用技术
如虚拟存储器技术
# 时分复用技术
如虚拟处理器
并发 和 共享 的关系是相互依存,不可分割的
如果失去了并发性,则一个时间段内系统中只需运行一道程序,那么就失去了实现虚拟性的意义了。因此,没有并发性,就谈不上虚拟性
# 异步
异步指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
# 操作系统的发展和分类
# 手工操作阶段
主要缺点:
用户独占全机、人机速度矛盾导致资源利用率极低
# 批处理阶段
引入脱机输入 / 输出技术(用外围机 + 磁带完成),并由监督程序负责控制作业的输入、输出,通过外围机把程序提前存到磁带里
目标是追求吞吐量,提高资源利用率。
# 脱机
在主机以外的设备上进行输入 / 输出操作,需要时再送主机处理。
# 批处理 bash
后端运行的作业,开始运行之后就不再需要任何交互。由于无法交互控制程序,所以还不算真正意义上的操作系统。
# 单道批处理系统
也叫简单批处理系统。已经出现操作系统的一些特征:
- 用户态、内核态(monitor)
- 时钟
主要优点:
缓解了一定程度的人机速度矛盾,资源利用率有所提升。
主要缺点:
内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序。
CPU 有大量的时间是在空闲等待 1/0 完成。资源利用率依然很低。
没有人机交互功能。
# 多道程序设计
多道程序的运行环境比单道程序等更加复杂。
特点:
- 多道 —— 计算机内存中同时存放多道相互独立的程序
- 宏观上并行
- 微观上串行
- 非封闭、非顺序 —— 引入多道程序后,程序的执行就失去了封闭性和顺序性
- 相互制约 —— 程序执行因为共享资源以及相互协同的原因相互制约
- 断续性 —— 考虑到竞争的公平性,程序的执行是断续的
多道程序设计的实现需要解决如下问题:
- 处理机的分配
- 多道程序的内存分配
- I/O 设备的分配
- 如何组织和存放大量的程序和数据,以方便用户使用并保证一致性和安全性
- 一定需要实现虚拟存储吗?—— 不一定,早期多道批处理操作系统将所有进程数据全部调入主存
这些问题的处理也会增加系统开销。
多道程序设计开始引入中断,目的是使 CPU 和 I/O 设备并行运行,提高资源利用率。
# 多道批处理系统(操作系统开始出现)
在批处理系统中采用多道程序设计就形成了多道批处理系统。
每次往内存中读入多道程序,操作系统正式诞生,用于支持多道程序并发运行。
主要优点:
多道程序并发执行,共享计算机资源。资源利用率大幅提升,CPU 和其他资源更能保持 “忙碌” 状态,系统吞吐量增大。
主要缺点:
用户响应时间长,仍然没有人机交互功能(用户提交自己的作业之后就只能等待计算机处理完成,中间不能控制自己的作业执行。eg:无法调试程序 / 无法在程序运行过程中输入一些参数)
# 分时操作系统
计算机以时间片为单位轮流为各个用户 / 作业服务,各个用户可通过终端与计算机进行交互。
目标是追求时延(latency)
主要特征:
- 同时性、也叫多路性
- 交互性
- 独立性
- 及时性
主要优点:
用户请求可以被即时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。
主要缺点:
不能优先处理一些紧急任务。操作系统对各个用户 / 作业都是完全公平的,循环地为每个用户 / 作业服务一个时间片,不区分任务的紧急性。
# 实时操作系统
主要优点:
能够优先响应一些紧急任务,某些紧急任务不需时间片排队。
在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。实时操作系统的主要特点是及时性和可靠性
# 硬实时系统
必须在绝对严格的规定时间内完成处理
eg: 导弹控制系统、自动驾驶系统
# 软实时系统
能接受偶尔违反时间规定
如:12306 火车订票系统
# 网络操作系统
是伴随着计算机网络的发展而诞生的,能把网络中各个计算机有机地结合起来,实现数据传送等功能,实现网络中各种资源的共享(如文件共享)和各台计算机之间的通信。(如:Windows NT 就是一种典型的网络操作系统,网站服务器就可以使用)
# 分布式操作系统
主要特点是分布性和并行性。系统中的各台计算机地位相同,任何工作都可以分布在这些计算机上,由它们并行、协同完成这个任务。
# 个人计算机操作系统
eg: windows、macos
# 操作系统服务
- 资源分配
- 记账
- 日志服务
# 内核
内核是操作系统最重要最核心的部分,也是最接近硬件的部分
甚至可以説,一个操作系統只要有内核就够了(eg:Docker-> 仅需 Linux 内核)
操作系统的功能未必都在内核中,如图形化用户界面 GUI
由很多内核程序组成了 “操作系统内核”,或简称 “内核、(Kernel)”
# 内核程序 —— 运行在内核态
微软、苹果有一帮人负责实现操作系统,他们写的是 “内核程序”。操作系统内核作为 “管理者”,有时会让 CPU 执行一些 “特权指令”,如:内存清零指令。这些指令影响重大,只允许 “管理者”—— 即操作系统内核来使用
普通程序员写的程序就是 “应用程序”,应用程序只能使用 “非特权指令”,如:加法指令、减法指令等
在 CPU 设计和生产的时候就划分了特权指令和非特权指令,因此 CPU 执行一条指令前就能判断出其类型
CPU 中有一个寄存器叫 程序状态字寄存器(PSW),其中有个二进制位,1 表示 “内核态”,0 表示 “用户态”
# 内核态 —— 运行内核程序
CPU 有两种状态,“内核态” 和 “用户态”。处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令
内核态 = 核心态 = 管态;用户态 = 目态
# 内核态和用户态的切换 (变态)
变态的过程是有成本的,要消耗不少时间,频繁地变态会降低系统性能
# 内核态 -> 用户态
执行一条特权指令一一修改 PSW 的标志位为 “用户态”,这个动作意味着操作系统将主动让出 CPU 使用权
# 用户态 -> 内核态
由 “中断” 引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回 CPU 的使用权。除了非法使用特权指令之外,还有很多事件会触发中断信号。一个共性是,旦凡需要操作系统介入的地方,都会触发中断信号
# 系统调用
对象 | 与系统调用、库函数的关系 |
---|---|
普通应用程序 | 可直接进行系统调用,也可使用库函数。 有的库函数涉及系统调用,有的不涉及 |
编程语言 | 向上提供库函数。有时会将系统调用封装成库函数,以隐藏系统调用的一些细节,使程序员编程更加方便。 |
操作系统 | 向上提供系统调用,使得上层程序能请求内核的服务 |
裸机 |
不涉及系统调用的库函数.eg
- “取绝对值” 的函数
涉及系统调用的库函数.eg
- “创建一个新文件” 的函数
# 按功能分类
- 设备管理 —— 完成设备的 请求 / 释放 / 启动 等功能
- 文件管理 —— 完成文件的 读 / 写 / 创建 / 删除 等功能
- 进程控制 —— 完成进程的 创建 / 撒销 / 阻塞 / 唤醒 等功能
- 进程通信 —— 完成进程之间的 消息传递 / 信号传递 等功能
- 内存管理 —— 完成内存的 分配 / 回收 等功能
应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作(如存储分配、1/0 操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
# 系统调用过程
- 传递系统调用参数
- 寄存器传递参数
- 内存中存储在块或表中的参数,以及作为参数在寄存器中传递的块地址
- linux 和 solaris 采用这种方式
- 由程序放置或推送到堆栈上并由操作系统弹出堆栈到参数
块和堆栈的方式传递参数大小不受限制
- 执行陷入指令(用户态)
- 执行相应的内请求核程序处理系统调用(内核态)
- 返回应用程序
陷入指令 = trap 指令 = 访管指令
陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,使 CPU 进入内核态
发出系统调用请求是在用户态,而对系统调用的相应处理在内核态下进行
# 计算计组成原理相关基础概念
# 中断和异常
参考这个
没有中断就没有并发,也就没有操作系统
中断是让操作系统内核夺回 CPU 使用权的唯一途径,使 CPU 由用户态变为内核态
通用概念 | 产生 原因 | AArch64 | x86-64 |
---|---|---|---|
中断 | 硬件 异步 | 异步异常 (重置 / 中断) | 中断 (可屏蔽 / 不可屏蔽) |
异常 | 软件 同步 | 同步异常 (终止 / 异常指令) | 异常 (Fault/Trap/Abort) |
(广义上的中断包括)Interrupt Handlers used in all 3 scenarios :
- HW -> CPU -> Kernel: Classic HW Interrupt (狭义上的中断)
- User -> Kernel: SW Interrupt
- CPU -> Kernel: Exception
# 其他类型 (非狭义) 中断
- SW Interrupt
- Interrupts caused by the execution of a software instruction:
INT<interrupt_number>
- Used by the system call interrupt()
- Initiated by the running (user level) process
- Cause current processing to be interrupted and transfers control to the corresponding interrupt handler in the kernel
- Interrupts caused by the execution of a software instruction:
- Exceptions
- Initiated by processor hardware itself
- Example: divide by zero
- Cause a transfer of control to the kernel to handle the exception (like a software interrupt)
# Linux 系统的中断
- 在中断处理中做尽量少的事
- 推迟非关键行为
结构:
Top half :马上做,找到 handler
最小的、公共行为
- 保存寄存器、屏蔽其他中断
- 恢复寄存器,返回原来场景
最重要:调用合适的由硬件驱动提供的中断处理 handler
因为中断被屏蔽,所以不要做太多事情 (时间、空间)
使用将请求放入队列,或者设置标志位将其他处理推迟到 bottom half
现代处理器中,多个 I/O 设备共享一个 IRQ 和中断向量 v 多个 ISR (interrupt service routines) 可以结合在一个向量上
调用每个设备对应该 IRQ 的 ISR
Bottom half : 推迟处理 (softirq, tasklets, 工作队列,内核线程)
提供一些推迟完成任务的机制
softirqs
tasklets (建立在 softirqs 之上)
工作队列
内核线程
这些工作可以被中断
中断处理没有进程上下文!
中断 (和异常相比) 和具体的某条指令无关
也和中断时正在跑的进程、用户程序无关
中断处理 handler 不能睡眠!
中断处理的一些约束条件:
- 不能睡眠
- 或者调用可能会睡眠的任务
- 不能调用 schedule () 调度
- 不能释放信号或调用可能睡眠的操作
- 不能和用户地址空间交换数据
# 中断向量表
每一个处理器有一个中断向量表,由操作系统内核建立,指向处理不同时间的中断处理程序入口
结构:
# 需要中断的场景举例
Hardware devices may need asynchronous and immediate service. For example:
- Timer interrupt: Timers and time-dependent activities need to be updated with the passage of time at precise intervals
- Network interrupt: The network card interrupts the CPU when data arrives from the network
- I/O device interrupt: I/O devices (such as mouse and keyboard) issue hardware interrupts when they have input (e.g., a new character or mouse click)
# 多核系统上的中断
Howareinterruptshandledonmulticoremachines?
- On x86 systems each CPU gets its own local Advanced Programmable Interrupt Controller (APIC). They are wired in a way that allows routing device interrupts to any selected local APIC.
- The OS can program the APICs to determine which interrupts get routed to which CPUs.
- The default (unless OS states otherwise) is to route all interrupts to processor 0
# 陷入指令
执行 “陷入指令”,意味着应用程序主动地将 CPU 控制权还给操作系统内核。“系统调用” 就是通过陷入指令完成的
# I/O (输入输出系统)
# BUS (总线)
# 并行系统
# 多核处理器
# 多处理器系统
又称并行系统、紧耦合系统
区分 多处理器系统 和 多核系统 ,实际计算机往往既是多核的也是多处理器的
多核和多处理器系统都用于加速计算过程。多核包含在单个 CPU 中的多个核或处理单元。多处理器由多个 CPU 组成。多核处理器不需要像多处理器那样复杂的配置。相反,多处理器更可靠并且能够运行许多程序。
# 三个优点一个缺点???
老师出的作业题😅难道本来是想问多道批处理系统?而且那个也是单处理器系统啊)
- 增加吞吐量,并行处理?
- 规模经济,降低成本,比多核处理器便宜?
- 增加可靠性?
- ???
# 非对称多处理器系统 (AMP)
非对称多处理是指一种计算机结构,其中有多个处理器,但它们并不都是一样的。这意味着,一个 CPU 可能正在处理操作系统代码,而另一个 CPU 正在执行输入和输出工作。它使用两个或更多的处理器由一个主处理器处理。所有的 CPU 都是相互连接的,但不是自我调度的。它用于根据任务的优先级和重要性将特定任务安排到一个 CPU。
非对称处理器的应用场景:被用于嵌入式系统,在这些系统中,特定任务需要并发执行,但系统不需要像对称多处理系统那样的通用计算能力
# 对称多处理器系统 (SMP)
SMP(Sysmmetric Multi-Processor System,对称多处理器),它由多个具有对称关系的处理器组成。所谓对称,即处理器之间没有主从之分。SMP 架构使得一台计算机不再由单个 CPU 组成,而是由两个或更多的处理器连接到一个共享的主存储器上,并能够共同执行任务。这些处理器通常是相同的,能够运行分配给它们的任何任务。这可以提高性能,因为任务可以在处理器之间分配,使其更快完成。
对称多处理将多个 CPU 应用于一个任务,以并行和更快的方式完成。因此,在对称多处理系统中,两个或更多的 CPU 被连接到一个共享的主存储器。同时,所有这些 CPU 都可以完全访问输入和输出设备。在对称多处理系统中,操作系统认为所有的处理器都是平等的。
对称处理器 (SMP) 架构同时也是 UMA 架构
SMP 是一个紧密耦合的多处理器系统,它有一组独立运行的相同的 CPU。每个 CPU 处理不同的程序,执行不同的数据集。对称多处理系统共享公共资源,如输入设备、输出设备、内存等。
# 问题
所有处理器相同,没有考虑不同任务要求处理器的差异性
# 多处理器环境的 3 种内存共享模型
# UMA
UMA(Uniform Memory Access,一致性存储器访问),实际上就是 SMP 。其中,一致性指的就是在任意时刻,多个处理器只能为内存的每个数据保存或共享一个唯一的数值。它的结构特征就是多处理器共享一个集中式存储器,每个处理器访问存储器所需的时间一致,工作负载能够均匀的分配到所有可用处理器上,极大地提高了整个系统的数据处理能力。但是,如果多个处理器同时请求访问共享资源时,就会引发资源竞争,需要软硬件实现加锁机制来解决这个问题。
因此,这样的架构设计无法拥有良好的处理器数量扩展性,因为共享内存的资源竞态总是存在的,处理器利用率最好的情况只能停留在 2 到 4 颗。
# NUMA
NUMA(Non-Uniform Memory Access,非一致性存储器访问)架构优化了 SMP 架构扩展性差以及存储器带宽窄的问题。采用了分布式存储器,将处理器和存储器划分为不同的节点(NUMA Node),每个节点都包含了若干的处理器与内存资源。多节点的设计有效提高了存储器的带宽和处理器的扩展性。
另一方面,NUMA 节点的处理器可以访问到整体存储器。按照节点内外,内存被分为:
- 节点内部的本地内存
- 节点外部的远程内存
当处理器访问本地内存时,走的是内部总线,当处理器访问远程内存时,走的是主板上的 QPI 互联模块。访问前者的速度要远快于后者,NUMA(非一致性存储器访问)因此而得名。
# 问题
各个处理器访问自己的内存速度很快,但如果出现需要跨处理器访存,即访问另一处理器的内存时会非常缓慢
# COMA
Cache-only Memory Access (COMA) 是 ccNUMA (Cache Coherent NUMA, 缓存一致性 NUMA) 的一种演变。COMA 可以看成是专用的 NUMA,将 NUMA 中的分布式内存用高速缓存来取代。全局地址空间由高速缓存组成。访问远端的高速缓存借助分布式高速缓存目录进行。
# 集群系统
类似多处理系统,集群系统时多个机器,每台机器有自己的操作系统,并行工作。
Usually sharing storage via a storage-area network (SAN)
Provides a high-availability service which survives failures
- Asymmetric clustering has one machine in hot-standby mode
- Symmetric clustering has multiple nodes running applications, monitoring each other
Some clusters are for high-performance computing (HPC)
- Applications must be written to use parallelization
Some have distributed lock manager (DLM) to avoid conflicting operations
# 操作系统的结构
不同结构操作系统举例:
- 大内核 / 宏内核 / 单内核: Windows、Android、iOS、UNIX、Linux、MacOS
- 微内核:Windows NT、Mach、Fuchsia、鸿蒙
- 模块化:Solaris
操作系统体系结构 | 区别 | 优点 | 缺点 |
---|---|---|---|
大内核 / 宏内核 / 单内核 | 将操作系统的主要功能模块都作为系统内核,运行在核心态 | 高性能 | 内核代码庞大,结构混乱,难以维护 |
微内核 | 只把最基本的功能保留在内核 | 内核功能少,结构清晰,方便维护 | 需要频繁地在核心态和用户态之间切换,性能低 |
特性、思想 | 优点 | 缺点 | |
---|---|---|---|
分层结构 | 内核分多层,每层可单向调用更低一层提供的接 | 1. 便于调试和验证,自底向上逐层调试验证 | 1. 仅可调用相邻低层,难以合理定义各层的边界 |
2. 效率低,不可跨层调用,系统调用执行时间长 | 2. 效率低,不可跨层调用,系统调用执行时间长 | ||
模块化 | 将内核划分为多个模块,各模块之间相互协作。内核 = 主模块 + 可加载内核模块 | 1. 模块间逻辑清晰易于维护,确定模块间接口后即可多模块同时开发 | 1. 模块间的接口定义未必合理、实用 |
主模块:只负责核心功能,如进程调度、内存管 | 2. 支持动态加载新的内核模块(如:安装设备驱动程序、安装新的文件系统模块到内核),增强 OS 适应性 | 2. 模块间相互依赖,更难调试和验证 | |
可加载内核模块:可以动态加载新模块到内核,而无需重新编译整个内核 | 3. 任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高 | ||
宏内核 (大内核) | 所有的系统功能都放在内核里(大内核结构的 OS 通常也采用了 " 模块化” 的设计思想) | 性能高,内核内部各种功能都可以直接相互调用 | 1. 内核庞大功能复杂,难以维护 |
2. 大内核中某个功能模块出错,就可能导致整个 系统崩溃 | |||
微内核 | 只把中断、原语、进程通信等最核心的功能放入内核。进程管理、文件管理、设备管理等功能以用户进程的形式运行在用户态 | 1. 内核小功能少、易于维护,内核可靠性高 | 1. 性能低,需要频繁的切换 用户态 / 核心态。用户态下的各功能模块不可以直接相互调用,只能通过内核的 "消息传递" 来间接通信 |
2. 内核外的某个功能模块出错不会导致整个系统 崩溃 | 2. 用户态下的各功能模块不可以直接相互调用,只能通过内核的 "消息传递" 来间接通信 | ||
外核 (exokernel) | 内核负责进程调度、进程通信等功能,外核负责为用户进程分配未经抽象的硬件资源,且由外核负责保证资源使用安全 | 1. 外核可直接给用户进程分配 "不虚拟、不抽象" 的硬件资源,使用户进程可以更灵活的使用硬件 | 1. 降低了系统的一致性 |
2. 减少了虚拟硬件资源的 “映射层”,提升效率 | 2. 使系统变得更复杂 |
# 非内核功能(如 GUI)
操作系统的非内核功能运行在用户态
# (大) 内核
内核是操作系统最基本、最核心的部分。
实现操作系统内核功能的那些程序就是内核程序。
操作系统内核需要运行在内核态
# 对系统资源进行管理的功能
大内核结构中运行在内核态,所以大内核结构操作系统变态不那么频繁
微内核结构中运行在用户态,所以微内核结构操作系统变态更加频繁
# 进程管理
# 存储器管理
# 设备管理等功能
# (微内核)
# 时钟管理
实现计时功能
# 中断处理
负责实现中断机制
# 原语(设备驱动、CPU 切换等)
是一种特殊的程序,具有如下特点:
- 处于操作系统最底层,是最接近硬件的部分
- 这种程序的运行具有原子性 —— 其运行只能一气呵成,不可中断
- 运行时间较短、调用频繁
# 操作系统的引导
操作系统引导过程
- CPU 从一个特定主存地址开始,取指令,执行 ROM 中的引导程序(先进行硬件自检,再开机)
- 将磁盘的第一块 —— 主引导记录 读入内存,执行磁盘引导程序,扫描分区表
- 从活动分区(又称主分区,即安装了操作系统的分区)读入分区引导记录,执行其中的程序
- 从根目录下找到完整的操作系统初始化程序(即启动管理器)并执行,完成 “开机” 的一系列动作
- 加载内核
- BIOS
- UEFI,逐渐取代 BIOS,加载更简洁
- GRUB,更加复杂,可以选择加载不同的内核
- 启动系统守护进程(在内核之外提供的服务)
- 启动内核中断驱动(硬件和软件)
- 启动设备的硬件中断
- 启动软件中断(异常或陷阱)
- 软件错误(例如,除零)
- 操作系统服务请求 - 系统调用
- 故障处理:其他进程问题包括无限循环、进程相互修改,甚至修改操作系统;
- 加载内核
不同体系结构下,不同 OS 启动也有不同:
x86 需要兼顾 “历史包袱”,需要兼容 32 位
ARM
完整的操作系统初始化程序(即启动管理器)可在根目录下找到
Eg : windows 操作系统完整的开机初始化程序在 根目录/Windows/Boot
下
# 双 / 多 模式操作
# 双模式操作
即经典的内核态、用户态两个模式
# 多重模式操作
两模式扩展到多模式,典型场景是虚拟化;
支持虚拟化技术的 CPU 有一种单独模式,用于表示虚拟机管理器 VMM;
这种模式的特权多于用户,但少于内核;
# 虚拟机
虚拟机:使用虚拟化技术,将一台物理机器虚拟化多台虚拟机器(Virtual Machine, VM),每个虚拟机器都可以独立运行一个操作系统
同义术语:
- 虚拟机管理程序
- 虚拟机监控程序
- Virtual Machine Monitor
- Hypervisor
当源 CPU 类型不同于目标类型(例如 PowerPC 到 Intel x86)时使用仿真
当计算机语言未编译本机代码时进行解释
# 第一类 VMM
直接运行在硬件上
KVM(Kernel-based Virtual Machine)是一种基于硬件虚拟化扩展的完全虚拟化技术。使用 KVM,虚拟机可以在真实硬件上运行,并获得对硬件的直接访问。每个 KVM 虚拟机都被视为一个独立的虚拟计算机,具有自己的虚拟硬件,包括虚拟的 CPU、内存、磁盘和网络接口等。
WSL(Windows Subsystem for Linux)是一项由 Microsoft 开发的技术,旨在在 Windows 操作系统上运行本地的 Linux 环境。WSL 提供了一个兼容层,允许在 Windows 上运行原生的 Linux 二进制文件(如命令行工具、实用程序和应用程序)。在 WSL 中,并没有采用传统的虚拟化技术来创建完全虚拟化的虚拟机。相反,WSL 利用 Windows 操作系统的内核功能,通过在用户模式和内核模式之间进行转换,提供了对 Linux 系统调用的兼容支持。
# 第二类 VMM
运行在宿主操作系统上
LXC(Linux Containers)是一种操作系统级虚拟化技术,也被称为容器化。使用 LXC,虚拟机实际上是在宿主机的操作系统内运行的,共享宿主机的内核。这些虚拟机被称为容器,它们与宿主机共享相同的内核和一些系统资源。相比于 KVM,LXC 提供了更轻量级的虚拟化解决方案,更适合运行基于 Linux 的应用程序。
VMware:完全虚拟化
VirtualBox:“半虚拟化”
PVE 中的虚拟机就是 KVM 技术实现,而容器 CT 就是 LXC 技术实现
# 两类 VMM 的对比
第一类 VMM | 第二类 VMM | |
---|---|---|
对物理资源的控制权 | 直接运行在硬件之上,能直接控制和分配物理资 源 | 运行在 Host OS 之上,依赖于 Host OS 为其分配物理资源 |
资源分配方式 | 在安装 Guest OS 时,VMM 要在原本的硬盘上自行分配存储空间,类似于 “外核” 的分配方式,分配未经抽象的物理硬件 | GuestOS 拥有自己的虚拟磁盘,该盘实际上是 Host OS 文件系统中的一个大文件。GuestOS 分配到的内存是虚拟内存 |
性能 | 性能更好 | 性能更差,需要 HostOS 作为 “中介 " |
可支持的虚拟机数量 | 更多,不需要和 Host OS 竞争资源,相同的硬件资源可以支持更多的虚拟机 | 更少,Host OS 本身需要使用物理资源,Host OS 上运行的其他进程也需要物理资源 |
虚拟机的可迁移性 | 更差 | 更好,只需导出虚拟机镜像文件即可迁移到另一台 HostOS 上,商业化应用更广泛 |
运行模式 | 第一类 VMM 运行在最高特权级(Ring O),可以执行最高特权的指令;上层操作系统内核运行在次高特权级(Ring 1);上层操作系统非内核程序程序运行在次高特权级(Ring 1) | 第二类 VMM 部分运行在用户态、部分运行在内核态。GuestOS 发出的系统调用会被 VMM 截获,并转化为 VMM 对 HostOS 的系统调用 |