操作系统——408考研初试/复试——第一章计算机系统概述疑难问题(二)
11.中断发生时,硬件和操作系统做了什么
1. 中断隐指令(硬件自动完成)
正如你所说,这部分是由CPU 硬件电路直接实现的,不需要程序员编写代码,也不属于操作系统。
- 为什么由硬件做?因为这几步必须“极其迅速”且“万无一失”。
- 关键动作:
- 关中断:CPU 自动将中断触发器(或状态寄存器中的中断允许位)置 0,防止在保护断点时又被新的中断打断。
- 保存断点(PC):自动把当前正在执行的程序的下一条指令地址存入堆栈或特定寄存器,保证以后能回得来。
- 送中断向量:硬件根据中断源找到对应中断服务程序的“入口地址”,准备跳转。
- 性质:它不是一条真正的指令(指令集里查不到它),而是 CPU 响应中断时的一种硬件行为。
2. 中断服务程序(操作系统/驱动程序完成)
这部分是由软件(程序员编写的指令序列)完成的。它通常属于操作系统内核的一部分或者是硬件驱动程序。
- 关键动作:
- 保护现场:软件用 PUSH 指令把各种通用寄存器的值存入堆栈(硬件只帮存了 PC,剩下的得靠软件)。
- 设置屏蔽字(多重中断):软件修改中断屏蔽寄存器,决定哪些中断可以嵌套,哪些不可以。
- 开中断:在处理过程中允许更高优先级的程序打断(如果是多重中断)。
- 真正的业务逻辑:比如读取键盘输入、写入磁盘数据等。
- 恢复现场 & 中断返回:软件用 POP 指令恢复寄存器,最后执行一条 IRET(中断返回指令)。
- 性质:这是存放在内存里的一段代码。
12. 微内核的基本功能
1. 微内核设计理念
微内核架构的核心思想是极简主义。将操作系统内核中最核心、最必要的功能保留在内核态,而将文件系统、网络协议栈、设备驱动等非核心功能移出内核,作为独立的“服务进程”运行在用户态。
2. 微内核的核心功能
由于大量系统服务已被移至用户态,微内核仅负责维持系统运行的最底层机制:
- 进程(线程)管理与调度:
- 负责线程的创建、终止以及上下文切换。
- 实现最基础的调度算法,决定哪个线程获得 CPU 时间片。
- 低级存储管理:
- 微内核不负责复杂的内存分配逻辑(如堆管理),但负责管理**页表(Page Tables)**和 **MMU(内存管理单元)**的设置。
- 实现虚拟地址到物理地址的映射,确保进程间的内存隔离。
- 进程间通信(IPC)—— 最关键功能:
- 由于各系统服务(如文件服务器、驱动程序)运行在独立地址空间,它们之间的交互必须通过微内核。
- 机制:通常采用**消息传递(Message Passing)**机制。微内核负责消息的传递、同步和缓存。
- 低级中断与异常处理:
- 直接接收硬件中断信号。
- 将中断转换为消息,并发送给运行在用户态的对应设备驱动程序进行处理。
3. 微内核架构的特点总结
维度 特征描述 内核大小 极小,仅包含数千至数万行代码,易于形式化验证。 安全性 某一服务进程(如磁盘驱动)崩溃不会导致整个内核瘫痪。 灵活性 系统功能扩展无需修改内核,只需在用户态增加服务进程。 性能瓶颈 由于频繁在用户态和内核态之间切换,以及多次 IPC 调用,其性能开销通常高于宏内核(Monolithic Kernel)。 4. 宏内核与微内核功能对比简表
功能模块 宏内核 (如 Linux) 微内核 (如 QNX, L4, 鸿蒙) 进程调度 内核态执行 内核态执行 内存映射 内核态执行 内核态执行 设备驱动 内核态执行 用户态服务 文件系统 内核态执行 用户态服务 通信机制 直接调用函数 通过内核进行消息传递 (IPC) 5. 典型应用场景
- 嵌入式系统:对实时性和可靠性要求极高的场景(如航空航天、医疗器械)。
- 分布式系统:方便跨机器通信。
- 现代操作系统组件:许多现代系统采用“混合内核”,吸收微内核的模块化优点。
13.外核是什么
外核(Exokernel)体系结构笔记
1. 外核的定义与核心哲学
外核(Exokernel)是一种极端简化的操作系统架构设计,由麻省理工学院(MIT)实验室提出。其核心思想是:取消对硬件资源的抽象,直接向应用程序暴露物理资源。
- 传统内核(宏/微内核):提供抽象接口(如文件、套接字、虚拟内存)。应用程序无法直接干预磁盘块的存放位置或物理内存的分配。
- 外核:不提供抽象。它仅负责验证访问权限并确保资源安全,而将资源的具体管理逻辑完全交给应用程序。
2. 外核的基本功能
外核的功能极其有限,主要集中在资源的安全性管理上:
- 资源暴露(Resource Exposure):
- 直接将物理资源(物理内存页、磁盘块、网卡缓冲区、CPU 时间片)公开给用户层的库操作系统(LibOS)。
- 资源保护与多路复用(Protection and Multiplexing):
- 确保一个进程不能非法访问另一个进程持有的物理资源。
- 利用“绑定”(Binding)和“访问控制列表”(ACL)来管理硬件配额。
- 资源分配与回收:
- 记录资源分配状态,处理资源的撤销请求,但不决定资源该如何使用。
3. 库操作系统(Library Operating System, LibOS)
外核架构下,原本属于内核的资源管理功能(如文件系统、TCP/IP 协议栈)被移动到了用户空间的LibOS中。
- 定制化:不同的应用程序可以链接不同的 LibOS。例如,数据库程序可以使用专门针对大文件优化的 LibOS,而网络服务器可以使用针对高并发优化的 LibOS。
- 直接访问:应用程序通过调用 LibOS 直接操作物理资源,跳过了传统内核复杂的系统调用层。
4. 外核与宏内核、微内核的对比
特征 宏内核 (Monolithic) 微内核 (Microkernel) 外核 (Exokernel) 内核职能 管理所有抽象和策略 提供基础机制与通信 仅负责资源保护与授权 硬件抽象层 高度抽象 中度抽象 无抽象(直接暴露) 资源管理 内核决定 内核/服务器进程决定 应用程序 (LibOS) 决定 灵活性 低 中 极高 安全性实现 硬件隔离/特权指令 进程间隔离 (IPC) 物理资源所有权验证 5. 外核的优势与应用场景
- 极致性能:减少了内核抽象层的开销。由于应用程序最了解自身的行为,它可以实现比通用内核更高效的资源调度(如自定义页面替换算法)。
- 灵活性:开发者可以为特定任务构建最适合的系统服务,无需受限于内核提供的通用接口。
- 研究与高性能计算:常见于高性能数据库、实时系统及特定的科研实验环境。
6. 总结
外核代表了“端到端”原则在操作系统设计中的体现。它将**“资源保护”(由内核完成)与“资源管理”(由应用层完成)彻底分离。外核不再是一个管理者的角色,而是一个公正的、极简的硬件资源仲裁者**。
16.为什么mac电脑可以运行win和mac系统,他们硬件架构不一样为什么可以使用
Mac 能够运行 Windows 并非因为硬件始终一致,而是经历了从**“硬件同源”到“软件模拟/版本适配”**的转变。
- 过去:架构相同,仅需补齐驱动即可直接运行。
- 现在:架构不同,通过使用ARM 版 Windows解决底层指令匹配问题,再通过虚拟化技术在 macOS 内部开辟运行环境。
17.第一类vmm虚拟机操作系统直接运行在硬件上,那为什么linux和windows架构不一样还能运行
1. 核心概念辨析:内核
≠=架构
- 内核 (Kernel):是操作系统的核心代码(软件),负责管理进程、内存、驱动等。
- 架构 (Architecture/ISA):是 CPU 能够理解的指令规范(硬件),如 x86、ARM、RISC-V。
- 关系:软件(内核)需要被“编译”成特定的硬件“语言(指令集)”才能运行。
2. Linux 的跨平台特性
Linux 并不是只属于 ARM,它是世界上适配硬件架构最多的内核。
- x86 版 Linux:绝大多数云服务器、数据中心、台式机运行的都是 x86 架构的 Linux(如 Ubuntu、CentOS、Debian)。
- ARM 版 Linux:所有的安卓手机内核、树莓派、以及现在的 M 系列 Mac 运行的是 ARM 架构的 Linux。
- 其他:它还运行在 RISC-V、MIPS、PowerPC 等数十种架构上。
结论:当在 x86 服务器上使用第一类 VMM 时,安装的是x86 版本的 Linux;当在 ARM 开发板上使用时,安装的是ARM 版本的 Linux。
3. Windows 的跨平台特性
Windows 同样不仅仅只有 x86 版本。
- x86 版 Windows:个人电脑上最常见的版本。
- ARM 版 Windows:如 Surface Pro 早期型号、华为 MateBook E Go 以及在 M1/M2 Mac 虚拟机里运行的版本。
4. VMM 运行的底层逻辑(针对你的疑问)
书上说“第一类 VMM 直接运行在硬件上”,它的前提条件通常是同构虚拟化:
- 物理硬件:假设是一台 Intel x86 服务器。
- VMM:安装的是 x86 版本的 VMM(如 VMware ESXi)。
- 虚拟机 OS:
- 你想跑 Windows?你必须提供x86 版本的 Windows镜像。
- 你想跑 Linux?你必须提供x86 版本的 Linux镜像。
为什么能同时跑?
因为 Windows 和 Linux 厂商都针对 x86 架构写了代码。VMM 只是给这两个x86 版本的内核各自分配了一块区域,它们说的都是 x86 指令,所以物理 CPU 都能听懂。
5. 总结:跨架构的限制
同架构虚拟化(常用):物理机是 x86 运行 x86 VMM 运行x86 Windows和x86 Linux。这是第一类 VMM 极其高效的原因(指令直接执行)。
→→→→异构模拟(极少):如果你想在 x86 物理机上跑ARM 版的 Linux,这不叫虚拟化,叫“模拟(Emulation)”。这需要把每一条 ARM 指令转换成多条 x86 指令,速度会慢 10-100 倍。第一类 VMM(如 ESXi)通常不支持这种跨架构的操作。
归纳笔记:
- Linux/Windows 都有多个“语言版本”(x86, ARM...)。
- 第一类 VMM 能够同时运行它们,是因为你给它们选了“同一种语言版本”。
- 架构是底层的指令规范,内核是上层的管理逻辑。
18.微内核模式是基于客户/服务器的模式,这里服务器指的是什么意思
1. 核心定义
在微内核架构中,“服务器(Server)”并不是指机房里的物理服务器硬件,而是指运行在用户态(User Mode)的、负责提供特定系统服务的独立进程。
- 客户(Client):通常指请求服务的用户应用程序或其他系统模块。
- 服务器(Server):指将传统宏内核功能(如文件系统、网络协议栈、设备驱动)剥离出来后,在用户空间独立运行的服务进程。
2. “服务器”的具体种类与职责
在微内核系统中,原本由内核负责的各项任务被划分为多个专门的服务器进程:
- 文件服务器(File Server):负责管理磁盘上的文件结构、目录访问及读写请求。
- 进程服务器(Process Server):负责进程的创建、销毁及状态管理。
- 网络服务器(Network Server):负责处理 TCP/IP 等网络协议栈。
- 设备驱动服务器(Device Driver Server):每个驱动程序作为一个独立的服务器运行(例如:磁盘驱动服务器、显卡驱动服务器)。
3. 运行机制:基于消息传递的交互
微内核中的 C/S 模式通过进程间通信(IPC)机制实现:
- 请求过程:当用户程序(客户)需要读取文件时,它不会直接调用内核函数,而是构造一个“读取请求消息”。
- 中转过程:该消息发送给微内核,微内核根据消息目标,将其转发给运行在用户态的“文件服务器”。
- 处理过程:文件服务器处理请求,通过微内核将结果(数据)以消息形式回传给用户程序。
4. 为什么称为“服务器”模式?
这种设计模仿了网络服务的架构:
- 解耦:客户不需要知道服务器内部是如何实现的,只需要知道通信接口(消息格式)。
- 独立性:服务器进程之间相互隔离。如果“网络服务器”崩溃,只会导致网络中断,而不会导致整个内核或“文件服务器”瘫痪。
- 动态扩展:可以在系统运行时启动或关闭某个服务器进程,从而动态增减系统功能。
5. 宏内核与微内核 C/S 模式对比
维度 宏内核 (如 Linux) 微内核 (如 QNX, Minix) 系统服务位置 集成在内核态中 分散在用户态的独立进程中 调用方式 系统调用 (System Call) 消息传递 (Message Passing) 身份角色 函数调用关系 客户/服务器 交互关系 安全性 一个模块崩溃可能导致全机宕机 某个服务器崩溃不影响其他服务 6. 总结
在微内核语境下,“服务器”即“系统服务进程”。微内核自身只作为一个消息中转站(机制),而真正的系统管理逻辑(策略)全部由这些运行在用户态的“服务器”来完成。
