##虚拟机 ###Vitual box
虚拟机没啥好说的,就是虚拟一台电脑可以安装系统!
主要说一下虚拟硬盘格式!
因为虚拟硬盘实际上是一个文件,所以,通常来说,它的格式体现在它的文件扩展名上。virtual box 可以创建VHD 格式的,采用的就是微软公司的 VHD 虚拟硬盘规范。 VHD 规范最早起源于Connectix 公司的虚拟机软件 Connectix Virtual PC, 2003 年,微软公司收购了它并改名为 Microsoft Virtual PC。 2006 年,微软公司正式发布了 VHD 虚拟硬盘格式规范。在本书配套的源代码和工具包里,有该规范的文档! 就是Virtual Hard Disk Format Spec_10_18_06.doc
之所以要采用固定尺寸的 VHD 虚拟硬盘,是因为其简单性。我们知道,虚拟硬盘实际上是一个文件。固定尺寸的 VHD 虚拟硬盘是一个具有“.vhd”扩展名的文件,它仅包括两个部分,前面是数据区,用来模拟实际的硬盘空间,后面跟着一个 512 字节的结尾(2004 年前的规范里只有 511 字节)。
要访问硬盘,运行中的程序必须至少向硬盘控制器提供 4 个参数,分别是磁头号、磁道号、扇区号,以及访问意图(是读还是写)。 硬盘的读写是以扇区为最小单位的。所以,无论什么时候,要从硬盘读数据,或者向硬盘写数据,至少得是 1 个扇区。 你可能想,我只有 2 字节的数据,不足以填满一个扇区,怎么办呢? 这是你自己的事。你可以用无意义的废数字来填充,凑够一个扇区的长度,然后写入。读取的时候也是这样,你需要自己跟踪和把握从扇区里读到的数据,哪些是你真正想要的。换句话说,硬盘只是机械和电子的组合,它不会关心你都写了些什么。要是手机像人类一样智能,它一定会在坏人使用它的时候无法开机。 在 VHD 规范里,每个扇区是 512 字节。 VHD 文件一开始的 512 字节,就对应着物理硬盘的 0 面 0 道 1 扇区。然后, VHD 文件的第二个 512 字节,对应着 0 面 0 道 2 扇区,后面的依次类推,一直对应到 0 面 0 道 n 扇区。这里, n 等于每磁道的扇区数。 再往后,因为硬盘的访问是按柱面进行的,所以,在 VHD 文件中,紧接着前面的数据块,下一个数据块对应的是 1 面 0 道 1 扇区,就这样一直往后排列,当把第一个柱面全部对应完后,再从第二个柱面开始对应。 如图 4-16 所示,为了标志一个文件是 VHD 格式的虚拟硬盘,并为使用它的虚拟机提供该硬盘的参数,在 VHD 文件的结尾,包含了 512 字节的格式信息。为了观察这些信息,我们使用了前面已经介绍过的配书工具 HexView。 如图 4-16 所示,文件尾信息是以一个字符串“conectix”开始的。这个标志用来告诉试图打开 它的虚拟机,这的确是一个合法的 VHD 文件。该标志称为 VHD 创建者标识,就是说,该公司(conectix)创建了 VHD 文件格式的最初标准。
从这个标志开始,后面的数据包含了诸如文件的创建日期、 VHD 的版本、创建该文件的应用程序名称和版本、创建该文件的应用程序所属的操作系统、该虚拟硬盘的参数(磁头数、每面磁道数、每磁道扇区数)、 VHD 类型(固定尺寸还是动态增长)、虚拟硬盘容量等。
说到这里,也许你已经明白我为什么要在书中使用固定尺寸的 VHD。是的,因为它简单。为了学习汇编语言,我们不得不在硬盘上直接写入程序。因为 VHD 格式简单,所以我只花了很少的时间就开发了一个虚拟硬盘写入程序, 作为配书工具让大家使用,这就是下一节将要介绍的FixVhdWr!
FixVhdWr 工具向虚拟硬盘写数据
FixVhdWr 是作者提供的小工具!
FixVhdWr 只针对固定尺寸的 VHD。当它启动之后,首先需要选择要读写的 VHD 文件。如图 4-17 所示,一旦这是个合法的 VHD 文件,它将读取该文件的结尾,并显示该虚拟硬盘的信息。
注意,因为 FixVhdWr 只针对固定尺寸的 VHD,所以,如果它检测到该 VHD 是一个动态虚拟硬盘,则“下一步”按钮处于禁止状态。
第二步是选择要写入虚拟硬盘的数据文件。毕竟,在任何操作系统中,数据都是以文件的方式组织的,如图 4-18 所示。
最后一个界面,是执行写入操作, 如图 4-19 所示,你应该选择第一种写入方式,即“LBA 连续直写模式”, 并指定起始的逻辑扇区号。
通常,一个扇区的尺寸是 512 字节,可以看成一个数据块。所以,从这个意义上来说,硬盘是一个典型的块(Block)设备。
采用磁头、磁道和扇区这种模式来访问硬盘的方法称为 CHS 模式,但不是很方便。想想看,如果有一大堆数据要写,还得注意磁头号、磁道号和扇区号不要超过界限。所以,后来引入了逻辑块地址(Logical Block Address, LBA)的概念。现在市场上销售的硬盘,无论是哪个厂家生产的,都支持 LBA 模式。
LBA 模式是由硬盘控制器在硬件一级上提供支持,所以效率很高,兼容性很好。 LBA 模式不考虑扇区的物理位置(磁头号、磁道号),而是把它们全部组织起来统一编号。在这种编址方式下,原先的物理扇区被组织成逻辑扇区,且都有唯一的逻辑扇区号, 比如,某硬盘有 6 个磁头,每面有 1000 个磁道,每磁道有 17 个扇区。那么: 逻辑 0 扇区对应着 0 面 0 道 1 扇区; 逻辑 1 扇区对应着 0 面 0 道 2 扇区; …… 逻辑 16 扇区对应着 0 面 0 道 17 扇区; 逻辑 17 扇区对应着 1 面 0 道 1 扇区; 逻辑 18 扇区对应着 1 面 0 道 2 扇区; …… 逻辑 33 扇区对应着 1 面 0 道 17 扇区; 逻辑 34 扇区对应着 2 面 0 道 1 扇区; 逻辑 35 扇区对应着 2 面 0 道 2 扇区; …… 逻辑 101999 扇区对应着 5 面 999 道 17 扇区,这也是整个硬盘上最后一个物理扇区。 这里面的计算方法是: LBA = C×磁头总数×每道扇区数+H×每道扇区数+(S-1)
这里, LBA 是逻辑扇区号, C、 H、 S 是想求得逻辑扇区号的那个物理扇区所在的磁道、磁头和扇区号。
采用 LBA 模式的好处是简化了程序的操作,使得程序员不用关心数据在硬盘上的具体位置。 对于本书来说, VHD 文件是按 LBA 方式组织的,一开始的 512 字节就是逻辑 0 扇区,然后是逻辑 1 扇区;最后一个逻辑扇区排在文件的最后(最后 512 个字节除外,那是 VHD 文件的标识部分)。
主要是概念性的讲述,了解即可!