x86笔记-第 4 章 虚拟机的安装和使用

计算机的加电和复位

对于 Intel 8086 来说,复位将使代码段寄存器(CS)的内容为 0xFFFF,其他所有寄存器的内容都为 0x0000,包括指令指针寄存器(IP)。8086 之后的处理器并未延续这种设计,但毫无疑问,无论怎么设计,都是有目的的。

为了节约成本,并提高容量和集成度,在内存中,每个比特的存储都是靠一个极其微小的晶体管,外加一个同样极其微小的电容来完成的。

个人计算机中使用的内存需要定期补充电荷,这称为刷新,所以这种存储器也称为动态随机访问存储器(Dynamic Random Access Memory,DRAM)

  • 随机访问的意思是,访问任何一个内存单元的速度和它的位置(地址)无关。

在内存刷新期间,处理器将无法访问它。这还不是最麻烦的,最麻烦的是,在它断电之后,所有保存的内容都会统统消失。所以,每当处理器加电之后,它无法从内存中取得任何指令。

基本输入输出系统

Intel 8086 可以访问 1MB 的内存空间,地址范围为 0x00000 到 0xFFFFF。出于各方面的考虑,计算机系统的设计者将这 1MB 的内存空间从物理上分为几个部分。

8086 有 20 根地址线,但并非全都用来访问 DRAM,也就是内存条。事实上,这些地址线经过分配,大部分用于访问 DRAM,剩余的部分给了只读存储器 ROM 和外围的板卡,如 图 4-2 所示。

图4-2
与 DRAM 不同,只读存储器(Read Only Memory,ROM) 不需要刷新,它的内容是预先写入的,即使掉电也不会消失,但也很难改变。

在以 Intel 8086 为处理器的系统中,ROM 占据着整个内存空间顶端的 64KB,物理地址范围是 0xF0000~0xFFFFF,里面固化了开机时要执行的指令;

ROM-BIOS

这块 ROM 芯片中的内容包括很多部分,主要是进行硬件的诊断、检测和初始化。所谓初始化,就是让硬件处于一个正常的、默认的工作状态。最后,它还负责提供一套软件例程,让人们在不必了解硬件细节的情况下从外围设备(比如键盘)获取输入数据,或者向外围设备(比如显示器)输出数据。

以这块 ROM 芯片只针对那些最基本的、对于使用计算机而言最重要的设备,而它所提供的软件例程,也只包含最基本、最常规的功能。正因为如此,这块芯片又叫基本输入输出系统(Base Input & Output System,BIOS)ROM

  • 在读者缺乏基础知识的情况下讲述 ROM-BIOS的工作只会越讲越糊涂,所以这些知识将会分散在各个章节里予以讲解。

ROM-BIOS 的容量是有限的,当它完成自己的使命后,最后所要做的,就是从辅助存储设备读
取指令数据,然后转到那里开始执行。基本上,这相当于接力赛中的交接棒。

硬盘及其工作原理

有多种辅助存储设备,比如软盘、光盘、硬盘、U 盘等,相对于内存,它们就是人们常说的 “外存” ,即 外存储器(设备)

软盘(Floppy Disk) 启动计算机,这已经是过去的事了。软盘的尺寸比烟盒稍大一点,比较薄,采用塑料作为基片,上面是一层磁性物质,可以用来记录二进制位。这种塑料介质比较柔软,所以称为软盘。

在数据记录原理上和软盘很相似的设备硬盘(Hard Disk,HDD),且几乎是同一个时代的产物,但是与软盘不同,硬盘是多盘片、密封、高转速的,采用铝合金作为基片,并在表面涂上磁性物质来记录二进制位。这就使得它的盘片具有较高的硬度,故称为硬盘。

为了进一步搞清楚硬盘的内部构造,图 4-3 和图 4-4 给出了更为详细的图示。
图4-3/4

  • 硬盘可以只有一个盘片(这称为单碟),也可能有好几个盘片。但无论如何,它们都串在同一个轴上,由电动机带动着一起高速旋转。
  • 一般来说,转速可以达到每分钟 3600 转或者 7200 转,有的盘片能达到一万多转,这个参数就是我们常说的 “转/分钟”(Round Per Minute,RPM)

磁头

  • 每个盘片都有两个磁头(Head),上面和下面各一个,所以经常用磁头来指代盘面。磁头都有编号,第 1 个盘片,上面的磁头编号为 0,下面的磁头编号为 1;即从上往下磁头编号为 0、1、2、3,依次类推。
  • 每个磁头都通过磁头臂固定在同一个支架上,由步进电动机带动着一起在盘片的中心和边缘之间来回移动。也就是说, 每个磁头是同进退的。步进电动机由脉冲驱动,每次可以旋转一个固定的角度,即可以步进一次。

磁道 & 柱面

  • 盘片高速旋转时,磁头每步进一次,都会从它所在的位置开始,绕着圆心“画”出一个看不见的圆圈,这就是磁道(Track)。磁道是数据记录的轨迹。因为所有磁头都是联动的,故每个盘面上的同一条磁道又可以形成一个虚拟的圆柱,称为柱面(Cylinder)
  • 磁道,或者柱面,也要编号。编号是从盘面最边缘的那条磁道开始,向着圆心的方向,从 0 开始编号。
  • 移动磁头是一个机械动作,对处理起来说时间较为漫长。当 0 面的磁道不足以容纳要写入的数据时,应当把剩余的部分写在 1 面的同一磁道上。如果还写不下,那就继续把剩余的部分写在 2 面的同一磁道上。换句话说,在硬盘上,数据的访问是以柱面来组织的。

扇区

  • 实际上,磁道还不是硬盘数据读写的最小单位,磁道还要进一步划分为扇区(Sector)。磁道很窄,也看不见,但在想象中,它仍呈带状,占有一定的宽度。将它划分许多分段之后,每一部分都呈扇形,这就是扇区的由来。
  • 每条磁道能够划分为几个扇区,取决于磁盘的制造者,但通常为 63 个。而且,每个扇区都有一个编号,与磁头和磁道不同,扇区的编号是从 1 开始的。
  • 扇区与扇区之间以间隙(空白)间隔开来,每个扇区以扇区头开始,然后是 512 个字节的数据区。扇区头包含了每个扇区自己的信息,主要有本扇区的磁道号、磁头号和扇区号,用来供硬盘定位机构使用。现代的硬盘还会在扇区头部包括一个指示扇区是否健康的标志,以及用来替换该扇区的扇区地址。用于替换扇区的,是一些保留和隐藏的磁道。

一切从主引导扇区开始

硬盘的第一个扇区是 0 面 0 道 1 扇区,或者说是 0 头 0 柱 1 扇区,这个扇区称为主引导扇区

如果计算机的设置是从硬盘启动,那么,ROM-BIOS 将读取硬盘主引导扇区的内容,将它加载到内存地址 0x0000:0x7c00 处(也就是物理地址 0x07C00),然后用一个 jmp 指令跳到那里接着执行:

jmp 0x0000:0x7c00

  • 为什么偏偏是 0x7c00 这个地方?还不太清楚。当初定下这个方案的家伙已经被人说了很多坏话。

通常,主引导扇区的功能是继续从硬盘的其他部分读取更多的内容加以执行。像 Windows 这样的操作系统,就是采用这种接力的方法一步一步把自己运行起来的。

说到这里,我们可以想象,如果我们把自己编译好的程序写到主引导扇区,不也能够让处理器执行吗?
对于这种想法,有一个好消息和一个坏消息。

  • 好消息是,这是可以的,而且这几乎是在不依赖操作系统的情况下,让我们的程序可以执行的 唯一方法。

  • 坏消息是,如果你改写了硬盘的主引导扇区,那么,Windows 和 Linux,以及任何你正 在使用的操作系统都会瘫痪,无法启动了。

创建和使用虚拟机

书上已经很详细了,安装过程这里不再赘述。

资料参考

  • 《x86 汇编语言:从实模式到保护模式》
发布了29 篇原创文章 · 获赞 42 · 访问量 8506

猜你喜欢

转载自blog.csdn.net/qq_43068326/article/details/104298721
今日推荐