怎么让intel芯片开启芯片虚拟化(芯片也是一个硬件实现的虚拟机)
芯片和虚拟机的相同点是什么?,下面我们就来说一说关于怎么让intel芯片开启芯片虚拟化?我们一起去了解并探讨一下这个问题吧!
怎么让intel芯片开启芯片虚拟化
芯片和虚拟机的相同点是什么?
它们都使用二进制的指令。
芯片和虚拟机的不同点是什么?
芯片是用硬件电路实现的,而虚拟机是用软件代码实现的。
从物理上来说两者的区别很大,但从数学上来说,两者没有区别。
1,计算机是一个分层次的信息处理系统,
计算机系统是分层次、分模块的,而且不同的层次和模块之间的耦合度很低。
如果耦合度高了,那说明设计的不好,例如英特尔的CISC指令集[捂脸]
指令的选择和寄存器的分配,在编译器里本来是互不干扰的两个步骤,但是intel的乘法因为使用默认寄存器(eax, edx),给软件带来了额外的复杂度。
所以,CISC指令集就不是一个好的设计,因为指令和寄存器之间的耦合度太大。
正常的设计应该是像ARM那样:指令只做指令的事,寄存器只做寄存器的事,井水不犯河水。
实际上,ARM的各个指令之间也分的很详细:
1)LDR指令只负责把数据从内存加载到寄存器,
2)STR指令只负责把数据从寄存器保存到内存,
3)其他指令只负责在寄存器内运算,不访问内存,
所以,ARM是一个层次划分的非常好的指令集。
同样是写(机器码生成的)代码,ARM的就可以用for循环,而intel的就会有更多的if else[笑哭]
if else多了之后,代码就会非常难看。
所以说,最好的代码是这样的:
for (i = 0; i < N; i ) {
int ret = layers[i]->handler(ctx);
if (ret < 0)
return ret;
}
return 0;
总之,不管分了多少层,每一层要做什么,不同的层次之间是不能互相干扰的。
这是计算机系统的设计原则。
2,在分层设计之后,更换个别层次的实现方式,不该对整个系统产生影响。
所以,Linux既可以在CPU上跑,也可以在qemu虚拟机上跑。
甚至,虚拟机都可以装在windows上,然后Linux还是一样跑。
为什么可以这样?
就是因为计算机是个分层次的、耦合度很低的系统。
每一层的实现对于其他层来说是个“黑盒”,每一层的运行也不依赖其他层的细节,只需要API。
所以,指令集就是底层系统(芯片、虚拟机)与上层软件之间的API。
至于底层系统使用虚拟机去实现,还是使用硬件电路去实现,都不会对上层软件造成干扰。
当然硬件电路的速度会更快,因为它是直接基于自然界的电磁理论的[呲牙]
但是,除了运行速度不同之外,虚拟机和硬件电路之间没有数学和哲学上的不同。
3,芯片的指令集可以做成虚拟机,虚拟机的指令集也可以做成芯片。
在信息处理的意义上,它们是等价的。
抽象代数认为,加法和乘法都是群,就是因为它们都是二元运算符,都能把集合上的两个数变成一个数。
不管是虚拟机还是芯片电路,都能把指令码跑起来。
所以从抽象的角度看,它们是相同的。
“道德经”上说,“同谓之玄”。
所以C 能做的事,java也能做[捂脸]
java就是在虚拟机上跑的,C 编译之后是在CPU上跑的。
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com