04.虚拟机使用

简介

虚拟机是利用软件来模拟完整的计算机系统,无需添加任何新的设备,而且与主计算机是隔离的,在虚拟机上的任何操作都不会影响到物理计算机上的操作系统和软件,还可以在装好系统的虚拟机下再克隆多个系统。虚拟机在测试病毒、频繁重启之类的软件中非常方便。

主流虚拟机

VMWare、Virtual PC 和VirtualBox 等,但是只有VirtualBox 是开源和免费的

软盘结构

每个盘片都有2个磁头,上面一个,下面一个,所以常用磁头表示盘面。第一个盘片上面磁头编 0,下面磁头编 为1;第2个盘片上面磁头编 2,下面磁头编 3,依次类推。

知道了硬盘的访问原理,完全可以使用如C语言制作一个虚拟硬盘,让虚拟机加载该文件。硬盘是一个典型的块(block)设备。采用磁道、磁头、扇区的模式访问硬盘称为CHS模式,但是很不方便,尤其是在制作虚拟硬盘文件时定位特定的磁道、磁头、扇区时。把原来的物理扇区访问方式映射为逻辑扇区(假设一个磁道共18个扇区):
逻辑0扇区对应0面0道1扇区;
逻辑1扇区对应0面0道2扇区;

逻辑17扇区对应0面0道18扇区;
逻辑18扇区对应1面0道1扇区;
逻辑19扇区对应1面0道2扇区;

故逻辑块地址(logical block address,LBA)计算方式如下:
LBA = cx磁头总数x每磁道扇区数+hx每磁道扇区数+扇区数-1

据此可以根据LBA 使用C 语言实现虚拟软盘文件如下:
floppy.c

虚拟软盘文件共1.44M 足够学习相关原理,虚拟机虚拟硬盘文件的实现原理与虚拟软盘类似,但是每个厂商虚拟机的虚拟软盘可能有相关的规范,会在硬盘末尾或开头写入特定数据,但是我们使用2进制查看器分析后依然可以制作虚拟硬盘文件。

引导扇区

0磁道、0磁头、1扇区就是引导扇区,电脑开机后cpu会将引导扇区的数据读取到0x0:0x7c00处,然后从该位置执行代码。

有了虚拟软盘制作工具floppy.c 后我们可以简单实现一个简单开机过程体验。引导扇区字符输出boot.s 汇编文件如下:

使用nasm 编译boot.s

使用main.c 虚拟软盘制作工具把boot.bin 写入虚拟软盘

gcc 或 clang 编译器生成软盘工具mf,笔者使用clang 编译器

运行 将会在当前目录下生成floppy.img 虚拟软盘文件。

VirtualBox创建虚拟机加载虚拟软盘文件floppy.img,由于我们使用的是虚拟软盘文件所以要添加虚拟软盘控制器,如下图:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年11月3日
下一篇 2018年11月3日

相关推荐