虚拟化介绍资料收集-1
以下内容节选自胡伟武等编著的《计算机体系结构基础》
所谓虚拟化,就是“用起来是这样的,实际上是那样的”,或者“逻辑上是这样的,物理上是
那样的”。计算机为什么好用?因为体系结构设计者宁愿自己多费点事,也要尽量为用户提供一
个友好界面的用户接口。虚拟化是体系结构设计者为用户提供友好界面的一个基本方法,虚拟化
的本质就是在不好用的硬件和友好的用户界面之间架一座 “桥梁”。
架得最成功的一座“桥梁” 是20世纪60年代工艺的发展使处理器中可以包含像TLB这样较为
复杂的结构,操作系统可以支持虚拟空间,大大解放了程序员的生产力。早期的计算机程序员编
程的时候要直接跟物理内存和外存打交道,非常麻烦,虚拟存储解决了这个问题。每个进程都使
用一个独立的、很大的存储空间,具体物理内存的分配和数据在内存和外存的调入调出都由操作
系统自动完成。这座桥架得太漂亮了,给它评分肯定是 “特优”。
如果说虚拟存储技术 “虚拟” 了内存,那么多线程和虚拟机技术则 “虚拟” 了 CPU。多线程
技术,尤其是同时多线程(Simultaneous Multi‑Threading,简称 SMT)技术,通过微结构的硬件支持,
如设立多组通用寄存器等,使得在同一个 CPU 中实现两个或多个线程中的指令在流水线中混合地
执行,或在同一个 CPU 中实现线程的快速切换,使用户在一个 CPU 上 “同时” 执行多个线程。虚
拟机技术则通过微结构的硬件增强,如设立多组控制寄存器和系统状态等,实现多个操作系统的
快速切换,达到在同一台计算机上 “同时” 运行多个操作系统的目的。这座桥架得也不错,作用
没有虚拟存储那么明显,给它评分可以得 “优”。
流水线和多发射结构也是架得很成功的一座 “桥梁”。20 世纪七八十年代以来,工艺的发展
使得像流水线和多发射这样的结构得以实现,在维持串行编程模型的情况下提高了速度。但由于
程序中相关性的存在,流水线和多发射的效率难以做得很好,例如在单发射结构中 IPC 达到 0.5 就
不错了,在四发射结构中 IPC 达到 1.5 就不错了。流水线和多发射这座桥的评分可以得 “优”。
另外一座比较成功的 “桥梁” 是 Cache 技术。CPU 速度越来越快,内存大但是慢,通过 Cache
技术可以使程序员看到一个像 Cache 那么快、像内存那么大的存储空间,不用改应用程序就能提
高性能。这座桥也对程序员屏蔽了结构细节(虽然程序员往往针对 Cache 结构进行精雕细刻的程
序设计以增加局部性),但代价太大,现代处理器往往 80% 以上的晶体管都用在 Cache 上了,所以
Cache 这座桥的评分只能得 “良好”。
还有一座比较典型的 “桥梁” 是分布式共享存储系统中的 Cache 一致性协议。Cache 一致性协
议可以在分布式存储的情况下给程序员提供一个统一的编程空间,屏蔽了存储器物理分布的细节;
但Cache一致性协议并不能解决程序员需要并行编程、原有的串行程序不能并行运行的问题。因此
Cache 一致性协议这座桥评分可以得 “及格”。如果哪天编译技术发展到程序员只要写串行程序,
计算机能够自动并行化并在成千上万个处理器中运行该程序,那这座桥的评分可以得 “特优”。
虚拟技术:计算机资源的重新分配
按虚拟的对象分类
- 硬件虚拟化
- 虚拟机(Virtual machine或VM),可以像真实机器一样运行程序的计算机的软件实现:
- 平台虚拟化,将操作系统和硬件平台资源分割开
- 完全虚拟化,敏感指令在操作系统和硬件之间被捕捉处理,客户操作系统无需修改,所有软件都能在虚拟机中运行,例如IBM CP/CMS,VirtualBox,VMware,QEMU
硬件辅助虚拟化,利用硬件(主要是CPU)辅助处理敏感指令以实现完全虚拟化的功能,客户操作系统无需修改,例如VMware,Xen,KVM,Hyper-V- 部分虚拟化,针对部分应用程序进行虚拟,而不是整个操作系统
- 准虚拟化/超虚拟化(paravirtualization),为作业系统提供与底层硬件相似但不相同的软件接口,客户操作系统需要进行修改。例如Xen的半虚拟化模式,Hyper-V,KVM的VirtIO。
- 操作系统级虚拟化,使操作系统内核支持多用户空间实体,例如Parallels Virtuozzo Containers、OpenVZ、LXC以及类Unix系统上的chroot,Solaris上的Zone,FreeBSD上的FreeBSD jail。
- 应用程序虚拟化,在操作系统和应用程序间建立虚拟环境
- 便携式应用程序,允许程序在便携式设备中运行而不用在操作系统中安装
- 跨平台虚拟化,允许针对特定CPU或者操作系统的软件不做修改就能运行在其他平台上,例如Wine
- 虚拟设备,运行于虚拟化平台之上,面向应用的虚拟机映像
- 模拟器
- 虚拟内存,将不相邻的内存区,甚至硬盘空间虚拟成统一连续的内存地址
- 存储虚拟化,将实体存储空间(如硬盘)分隔成不同的逻辑存储空间
- 网络虚拟化,将不同网络的硬件和软件资源结合成一个虚拟的整体
- 虚拟专用网络(VPN),在大型网络(通常是Internet)中的不同计算机(节点)通过加密连接而组成的虚拟网络,具有类似局域网的功能
- 存储器虚拟化,将网络系统中的随机存储器聚合起来,形成统一的虚拟内存池
- 桌面虚拟化,在本地计算机显示和操作远程计算机桌面,在远程计算机执行程序和储存信息
- 数据库虚拟化
- 软件虚拟化
- 服务虚拟化
- 数据虚拟化 (data virtualization), 数据虚拟化是一种统一来自多个来源的数据的方法,这样应用程序,报告工具和最终用户就可以访问数据,而不需要有关原始来源,位置和数据结构的详细信息。
参考资料:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现