基本原理
e经典的操作系统书籍OperatingSystems:Three Easy Pieces从三个方面讲述了操作系统的基本原理,第一部分即是虚拟化思想,其他两部分是并行和持久化。
最简单的虚拟机是进程,这种虚拟机太过于普通,以至于很多人都没有意识到它们是虚拟机。
模拟器是另一种形式的虚拟机。进程的指令都是可以直接运行在硬件CPU上的,模拟器则不同,它可以使为一种硬件指令集(InstructionSet Architecture,ISA)编译的程序运行在另一种硬件指令集上。应用程序在源ISA(如ARM)上被编译出来,在模拟器的帮助下,运行在不同的目标ISA(比如x86)上。模拟器可以通过解释来实现,即对程序的源ISA指令一条一条进行分析,然后执行相应的ISA指令上的操作。模拟器也可以通过二进制翻译实现,即首先将程序中所有的源ISA指令翻译成目标ISA上具有同样功能的指令,然后在目标ISA指令机器上执行。模拟器的基本原理如图1-2所示。典型的模拟器有QEMU(Quick Emulator)的用户态程序模拟、Bochs模拟器等。

高级语言虚拟机在模拟器的基础上更进一步,将源ISA和目标ISA完全分离开。在高级语言虚拟机中,通常会设计一种全新的虚拟ISA,并在其中定义新的指令集、数据操作、寄存器的使用等类似于物理ISA中的规范。不同于普通程序和模拟器运行的程序,高级语言虚拟机的程序中没有任何具体物理ISA指令字节,而是自己定义虚拟的指令字节,这些指令字节通常叫作字节码。任何想要运行这种虚拟ISA指令的物理 ISA平台都需要实现一个虚拟机,该虚拟机能够执行虚拟机ISA指令到物理ISA指令的转换。程序员通过使用高级语言编写程序,不需要考虑其具体的运行平台,即可非常方便地实现程序的跨平台分发。高级语言虚拟机如图1-3所示。典型的高级语言虚拟机有JVM虚拟机、Python虚拟机等。

操作系统智慧
懒人哲学:越简单、越傻瓜、用户使用的学习成本越低越好
让困于人:当我们遇到困难时,搞不定的或者我们自己搞成本很大的,交给别人来搞(一般让操作系统来搞,其实操作系统也是别人完成的软件系统)
留有余地: 可扩展性,让系统有可扩展性
足够智能:一个系统最好能解决所有的问题,给人的感觉是一个万能的解决方案,也就是操作系统的魔术师的角色
时空转换:在一个维度遇到的瓶颈,那就改变方案把瓶颈移到另外一个维度 【内存页表太大,占用内存资源;那就页表分级,不活跃的放到磁盘】
策机分离和权利分离:一个系统或者平台在主要指定规则、提供通用化的插件即可
简单与美:苛求于简,归于永恒