为了方便起见,我尝试在 Windows 7 主机上的 VirtualBox 中以客户机身份运行 Gentoo Linux 的“常规”安装。我甚至使用 VirtualBox 引导安装。但现在,经过大约一年的时间,我不可避免地在编译器标志中使用 -march=native 重建了 Portage 上的所有软件包,我发现所有非平凡程序(平凡 = ls、cd、cat、非平凡 = vim、man,基本上任何链接到 c++ 标准库的程序)在启动时几乎立即被终止。内核日志表明它捕获了非法指令,就好像该程序是使用主机 CPU 不支持的 CPU 扩展编译的。但事实确实如此!我对 VirtualBox 等虚拟机管理程序的理解是,程序应该仍然基本上在裸机上运行,它最大的作用是将客户操作系统及其用户空间与主机操作系统及其用户空间的虚拟内存分开。
我的问题是,这到底是怎么回事?虚拟机是否只允许使用主机 CPU 上可用的部分指令?或者这是一个完全不同的问题?