前言
一直在做Android、Linux、虚拟化方面的工作,其中对于虚拟化技术的研究也略微摸了摸门槛。这里和大家记录分享,希望和读者通过一系列的文章进一步交流。圣贤曰: 三人行,必有我师。希望大家多批评指正,这里面也要感谢虚拟化技术的前辈,本人也是阅读了大量牛人技术文档和代码,才敢落笔。
本文的受众,主要是对虚拟化技术感兴趣的同学。如果写过几年嵌入式的代码,对程序不陌生,有一些操作系统方面的基础并且对Arm或者x86的体系又有一定的研究那理解起来应该会更加容易,老规矩虚拟化的专家请保护自己的眼睛。
虚拟化这个主题,大概会分为如下几个方面展开:
(1) 虚拟化概论: 包括虚拟化的思想、技术分类、以及Hypervisor的基础概念。
(2) 嵌入式基础: ARMv8、Linux、Android的一些基础知识。
(3) Hypervisor: CPU虚拟化、内存虚拟化、中断虚拟化。
(4) 设备虚拟化: 全虚拟化、半虚拟化、Passthrough模式。
(5) 虚拟化案例: Display,Audio,Video等子系统的设计 案例。
(6) 虚拟化性能: 工程实践中的一般架构设计思想和优化思路。
本文先介绍虚拟化概论- 虚拟化思想。
正文
1 虚拟化思想
电子信息工程专业的同学对于模拟电子和数字电子的学科应该不陌生,大学的时候天天学习和研究的微电子技术就是计算机科学的基础。对于一个简单的电路,比如一个放大器或者与或门,我们尚且能够用二极管,三极管的知识cover住,但是对于大规模的集成电路,如果一般的工程师要拘泥于这些具体的知识点那么工程实践的成本就变得极大。聪明的大神们采用了封装的思想用一个黑盒子罩住了这些复杂的电路,进而产生了芯片,于是产生了各种的xPU: MCU、CPU、GPU、NPU等等。这是搞计算机人们的第一次分层,将电路2和逻辑分开,从此人们不再关注电路电气的特性,只需要阅读芯片手册就可以通过控制芯片的引脚通电电压,达到控制芯片的行为的目的,于是机器码出现了,就是4位、8位、16位、32位、64位、128位的0和1各种组合。
机器码出现了,使计算机科学分成两个流派,硬件和软件。硬件的玩家在卷集成规模、制程、功耗、工艺、设计艺术,这里提一句笔者搞过3年的EDA软件工具的研发,深知中国的IC领域和国外的差距,中国需要重视基础科学领域的投入,尤其是数学、物理学、化学,还有哲学(这个是工科领域急需提高的重视方向),华子海思确实牛B,大家还是要支持民族品牌。软件的玩家搞出了批处理(进程)、操作系统、HAL层、应用层、虚拟化(云计算)、各种协议、各种软件的架构。
有位令人尊重的老人家说过,分工是人类前进的基石。
汇编
(1) 落实到软件领域就是分层,机器码用起来不方便,就用字符代替,于是诞生了软件的第一个层次:汇编语言,能让码农方便的控制CPU的执行和内存的访问,硬件的家伙们给了你三条线(控制总线、数据总线、地址总线),让码农去玩吧。
操作系统
(2) 随着CPU的能力越来越强大,依附于CP


1133

被折叠的 条评论
为什么被折叠?



