2026/4/18 0:19:58
网站建设
项目流程
产品型网站,网站建设招代理,wordpress视频博客,哪里可以做网站教程在 1.3 节中#xff0c;我们拆解了计算机的硬件骨架#xff08;总线、I/O、主存、处理器#xff09;#xff1b;在 1.4 节中#xff0c;我们展望了异构计算#xff08;GPU、FPGA#xff09;如何打破传统算力的边界。今天#xff0c;我们要进入 section 1.5。我们要探讨…在 1.3 节中我们拆解了计算机的硬件骨架总线、I/O、主存、处理器在 1.4 节中我们展望了异构计算GPU、FPGA如何打破传统算力的边界。今天我们要进入 section 1.5。我们要探讨的是计算机科学中最伟大、最核心甚至可以说具有哲学意味的概念——抽象Abstraction。如果你理解了底层硬件的“笨拙”和“繁琐”你就会明白如果没有操作系统Operating System, OS提供的抽象编写软件将是一场噩梦。第一部分核心定义的哲学——“由于复杂所以撒谎”计算机科学中有一句名言“计算机科学中的任何问题都可以通过增加一个中间层Indirection来解决。”操作系统就是硬件和应用程序之间那个巨大的“中间层”。它的核心任务是通过三个关键的抽象来“欺骗”应用程序让它们活在一个简单、完美的世界里。抽象1文件假象应用程序看到一个线性的、可持久化的、结构化的字节序列。现实底层是磁盘上分散的、易失的、原始的物理块sectors。硬件支持磁盘控制器将物理磁道/扇区抽象为逻辑块号LBA中断与DMA磁盘I/O完成时通过中断通知CPUDMA实现数据直传内存免于CPU参与MMUMemory Management Unit文件系统缓存Page Cache依赖虚拟内存机制实现磁盘数据到内存页的映射抽象2虚拟内存假象每个进程拥有从0开始的、连续、私有的巨大内存空间。现实物理内存是有限、共享的碎片集合且可能被换出到磁盘。OS 的谎言“应用程序 A你拥有独占的、从地址 0 开始的 4GB 连续内存空间。”硬件机制CPU特权级用户程序运行在Ring 3无法直接访问物理地址MMU 页表将虚拟地址转换为物理地址的关键硬件TLBTranslation Lookaside Buffer加速地址转换的专用缓存缺页中断当访问的页不在内存时触发Page Fault异常中断14操作系统从磁盘载入页面抽象3进程假象每个程序独占CPU、内存按顺序连续执行。现实多个程序并发执行于少量CPU核心且被频繁中断和切换。OS 的谎言“你是世界上唯一的程序CPU 也是你独占的。”硬件支撑定时器中断固定时间间隔如10ms触发中断强制CPU进入内核上下文切换硬件save/restore寄存器的专用指令如x86的fxsave/fxrstor进程控制块PCB的硬件关联进程状态由寄存器组、程序计数器等硬件状态组成第二部分OS 内部机制Deep Dive——谎言是如何维持的要维持上述“独占”的假象操作系统必须拥有至高无上的权力。这就引入了硬件支持的特权级机制。1. 核心态与用户态Kernel Mode vs. User Mode我们在 1.3 讲过 CPU 的指令集。硬件如 x86 架构提供了一个“模式位Mode Bit”寄存器用户态Ring 3你的应用程序在这里运行。你被禁止执行危险指令如“关闭中断”、“直接访问物理内存”、“直接操作 I/O 端口”。内核态Ring 0操作系统内核在这里运行。它可以执行任何 CPU 指令访问任何内存地址。2. 系统调用System Call从平民到上帝的跃迁当你的程序用户态想要读取文件或分配内存时它必须请求 OS 帮忙。机制程序执行一条特殊的指令如 x86 的syscall或旧的int 0x80。硬件动作这条指令会触发一个硬件异常Trap。CPU 暂停当前指令流自动将权限从用户态切换到内核态并跳转到预先设定好的“异常处理程序Exception Handler”——即 OS 的内核代码。结果OS 检查你的请求是否合法。如果合法它替你执行然后用return-from-interrupt指令切回用户态把结果交给你。用户态程序 → 触发软中断int 0x80/syscall指令 → CPU切换至内核态 → 执行中断处理程序 → 查找系统调用表 → 执行内核服务 → 返回结果并切回用户态3. 上下文切换Context Switch控制流的魔术这是实现“进程”抽象的关键。假设我们从进程 A 切换到进程 B这个过程在毫秒级发生用户毫无察觉。让我们用慢动作回放这个步骤中断触发硬件定时器Timer Interrupt每隔几毫秒向 CPU 发送一个信号。冻结现场CPU 收到中断硬件逻辑强制控制权回到 OS 内核。OS 决定“进程 A 的时间片到了该让进程 B 上场了。”保存上下文Save ContextOS 将进程 A 的当前状态PC 程序计数器、寄存器值、条件码写入到内存中的一块区域PCB进程控制块。恢复上下文Restore ContextOS 从进程 B 的 PCB 中读取它上次暂停时的寄存器值填回 CPU 寄存器。修改 MMUOS 通知 MMU“现在开始请使用进程 B 的页表。”切换虚拟地址空间。重启OS 执行返回指令CPU 指针PC指向进程 B 的下一条指令。进程 B 复活了。第三部分从 OS 到 VM 的跃迁——抽象的递归如果在操作系统下面再垫一层呢这就是虚拟机Virtual Machine。虚拟机是在物理硬件抽象之上再创建一层虚拟的、与真实硬件相同或相似的硬件接口。这是“抽象的平方”——不仅隐藏了硬件的复杂性还隐藏了操作系统的独占性。如果说 OS 是对资源处理器、内存、磁盘的抽象那么虚拟机就是对整个计算机硬件的抽象。假设你这套房子是现代风格比如是苹果 Mac 系统 但你的一个远房亲戚比如一个只能在 Windows 上运行的老软件要来住。 他的生活习惯极其古怪必须要住中式复古风的房子否则他一步都动不了。 你不想把现在的房子拆了重装重装系统也不想专门为他买套新房买新电脑。怎么办 解决方案 你在现在的客厅里用木板搭了一个完全封闭的、独立的小木屋。 你在小木屋里铺了中式的地板装了中式的窗户模拟硬件。 你在小木屋里完全按照他的习惯装修了一遍安装 Guest OS比如 Windows。 那个亲戚住进去以为自己真住在一个中式房子里。这就是虚拟机它是一个软件但它假装自己是一台真电脑有假的 CPU、假的内存、假的硬盘。你可以在这个“假电脑”里装 Windows、Linux想干嘛干嘛。缺点极极其笨重。你想想在客厅里盖个真房子得费多少砖头内存和水电CPU这就是为什么开虚拟机电脑会变卡。2. 什么是容器 (Container) 核心概念 “胶囊旅馆” 或者 “特百惠保鲜盒”。 后来大家发现“房中房”太浪费了。很多时候我只是想让那个亲戚有个地方睡觉 不需要给他盖个完整的厕所、厨房和客厅因为他可以用我房子里现成的啊 但我又不想让他把我的客厅弄乱或者偷看我的东西。怎么办 解决方案 你给他一个透明的、带锁的玻璃罩子容器。 他可以直接坐在你家客厅的地板上共享宿主机的内核不用模拟硬件。 但是透过罩子他看到的只能是你允许他看到的东西。 他以为自己独占了一个房间其实他只是被隔离在了一个盒子里。 他在盒子里吃喝拉撒产生的垃圾都在盒子里拿走盒子家里干干净净。这就是容器比如 Docker它不模拟电脑硬件它只是把一个软件和它运行需要的东西代码、库文件打包进一个盒子里。这个盒子直接运行在你的系统上所以速度飞快就像普通软件一样快。优点轻便。以前开个虚拟机要几分钟盖房子现在启动个容器只要几毫秒拿个盒子罩住。为了彻底懂了想象我们要去旅行部署软件。 物理机不用虚拟化 这就好比你搬家。 你得把家具、电器、衣服全部扛到新地方到了还得重新接电线、重新装修。 如果新地方插座不一样你的电器就烧了。软件换个电脑环境经常报错。 虚拟机 (VM) 这就好比你开了一辆巨大的房车去旅行。 好处 房车里有床、有厕所、有发电机。不管外面下雨还是下雪你在车里生活完全一样。 坏处 车太重了油耗高跑不快。你想多带几个人就得开好几辆房车路都被堵死了。 容器 (Docker) 这就好比你带了一个万能帐篷。 好处 极轻背包一背就走。到了目的地你直接用当地的土地共享内核 把帐篷一支启动容器你的私密空间就有了。 坏处 帐篷毕竟不如房车隔离得彻底安全性稍差 而且帐篷不能像房车那样自带发电机容器极其依赖宿主机的内核版本。1. 虚拟机的本质虚拟机让你可以跨越指令集架构ISA或操作系统限制。它将“硬件”变成了一个软件对象。痛点你看中间那层[ Guest OS ]。即使你只想运行一个只有 10MB 的小程序你也必须启动一个几 GB 大小的操作系统。这就好比为了喝一杯牛奶跑个应用你养了一整头牛启动个 OS。2. Type 1 vs. Type 2 Hypervisor虚拟机监视器Type 2 (Hosted, e.g., VMware Workstation, VirtualBox):运行在传统 OS如 Windows/Linux之上。抽象路径App - Guest OS - Hypervisor - Host OS - Hardware。效率较低因为中间层太多。Type 1 (Bare Metal, e.g., VMware ESXi, Xen, Microsoft Hyper-V):Hypervisor 直接取代了 Host OS直接运行在硬件上。它将硬件切分给上层的 Guest OS。硬件支持现代 CPU如 Intel VT-x, AMD-V在硬件层面增加了新的特权级Root Mode允许 Hypervisor 不修改 Guest OS 代码就能高效截获特权指令。第四部分现代视角——异构硬件的抽象GPU/NPU联系 section 1.4现在的计算机不再是单纯的 CPU 独角戏。1. 驱动程序作为抽象层操作系统内核通常不直接包含所有硬件的控制逻辑。对于 NVIDIA GPU 或 Google TPUOS 提供了一个通用的接口如 Linux 的ioctl而厂商提供驱动程序Driver。驱动程序将 GPU 抽象为一个特殊的 I/O 设备但这个设备拥有极高的自主权。2. 绕过 OS 的抽象Kernel Bypass在高性能计算CUDA中为了追求极致速度抽象层变薄了CUDA Runtime:程序员写的是 C 扩展代码。原理CPU 负责发送指令流Kernel Launch和数据Memcpy到显存。一旦数据到达 GPUGPU 内部的调度器Hardware Scheduler直接管理成千上万个线程操作系统内核几乎不干预 GPU 内部的线程调度。这说明抽象的粒度在变化。OS 管理 CPU 线程而将 GPU 视为一个“黑盒协处理器”。第五部分容器化Container vs. 虚拟机VM最后我们必须澄清现代云原生时代最大的混淆Docker 是虚拟机吗绝对不是。特性虚拟机 (VM)容器 (Docker/Podman)抽象层次硬件级虚拟化操作系统级虚拟化内核 (Kernel)每个 VM 都有自己独立的内核Guest OS。所有容器共享宿主机的同一个内核。隔离性极强硬件辅助隔离。较强通过软件命名空间隔离。启动速度分钟级需要启动完整的 OS。毫秒级只是启动一个进程。底层机制Hypervisor 模拟硬件。Namespaces(隔离视图) Cgroups(限制资源)。