04存储器

主存储器、BIOS 和 CMOS 存储器

1. 主存储器

1981年 IBM PC 机刚推出时系统只带有 640KB 的 RAM 主存储器(简称内存)。由于所采用的 8088/8086 CPU 只有 20 根地址线,因此内存寻址范围最高为 IMB (2^20Byte) 。在当时 DOS 操作系统流行年代,640K 或者 1MB 内存容量基本上能满足普通应用程序的运行。随着计算机软件和硬件技术的高速发展,目前的计算机通常都配置有 512 MB 或者更多的物理内存容量,并且都采用 Intel 32 位 CPU,即都是 PC/AT 计算机。因此 CPU 的物理内存寻址范围已经高达 4GB (通过采用 CPU 的新特性,系统甚至可以寻址 64 GB的物理内存容量)。

但是为了与原来的 PC 机在软件上兼容,系统 1MB 以下物理内存使用分配上任然保持与原来的 PC 机基本一致,只是原来系统 ROM 中的基本输入输出程序 BIOS 一直处于 CPU 能寻址的内存最高端位置处,而 BIOS 原来所在的位置将在计算机开机初始化时被用作 BIOS 的影子 (Shadow)区域,即 BIOS 代码任然会被复制到这个区域中

image

当计算机上电初始化时,物理内存被设置成从地址 0 开始的连续区域。除了地址从 0xA0000 到 0x100000 (640K 到 1M 共 384K)和 0xFFFFE0000 到 0xFFFFFFFF (4G处的最后一 64K)范围以外的所有内存都可用作系统内存。这两个特定范围被用于 I/O 设备和 BIOS 程序。

假如我们的计算机中有 16MB 的五路内存,那么在 Linux 0.1x 系统中:

0 —— 640K		将被用作存放内核代码和数据。Linux 内核不适用 BIOS 功能,也不适用 BIOS 设置的中断向量表。
640K —— 1M		之间的 384K 仍然保留用作图中指明的用途。其中地址 0xA0000 开始的 128K 用作显示内存缓冲区,随后部分用于其他控制卡的 ROM BIOS 或其映射区域。而 0xF0000 到 1M 范围用于高端操作系统 ROM BIOS 的映射区。
1M —— 16M 		将被内核用于作为可分配的主内存区。另外高速缓冲区和内存虚拟盘也会占用内核代码和数据后面的一部分内存区域,该区域通常会跨越 640K —— 1M 的区域。
2. 基本输入/输出程序 BIOS

存放在 ROM 中的系统 BIOS 程序主要用于计算机开机时执行系统各部分的自检,建立起操作系统需要使用的各种配置表,例如中断向量表、硬盘参数表。并且把处理器和系统其余部分初始化待一个已知状态,而且还为 DOS 等操作系统提供硬件设备接口服务。但是由于 BIOS 提供的这些服务不具备可重入性(即其中程序不可并发运行),而且从访问效率方面考虑,因此除了在初始化时会利用 BIOS 提供一些系统参数以外,Linux 操作系统在运行时并不使用 BIOS 中的功能。

当计算机系统上电开机会这按了机箱上的复位按钮时,CPU 会自动把代码段寄存器 CS 设置为 0xF000,其段基地址则被设置为 0xFFFF0000,段长度设置为 64 KB。而 IP 被设置为 0xFFF0,因此此时 CPU 代码指针指向 0xFFFFFFF0 处,即 4G 空间最后一个 64K 的最后 16 字节处。由上面的内存使用区域图可知,这里正是系统 ROM BIOS 存放的位置。并且 BIOS 会在这里存放一条跳转指令 JMP 跳转到 BIOS 代码中 64KB 范围内的某一条指令开始执行。

由于目前 PC/AT 微机中 BIOS 容量大多有 1MB 到 2MB,并存储在闪存(Flash Memory) ROM 中,因此为了能够执行或访问 BIOS 中超过 64KB 范围并且又远远不在 0 —— 1M 地址空间中的其他 BIOS 代码或数据,BIOS 程序会首先使用一种称为 32 位大模式(Big Mode)技术把数据段寄存器的访问范围设置成 4G(而非原来的 64K),这样就可以在 0 到 4G 范围内执行和操作数据。此后,BIOS 在执行了一系列硬件检测和初始化操作之后,就会把与原来 PC 机兼容的 64KB BIOS 代码合数据复制到内存低端 1M 末端的 64K 处,然后跳转到这个地方并且让 CPU 进入真正的实地址模式工作。见下图。最后 BIOS 就会从硬盘或其他块设备把操作系统引导程序加载到内存 0x7C00 处,并跳转到这个地方继续执行引导程序。

image

3. CMOS 存储器

在 PC/AT 机中,除需要使用内存和 ROM BIOS 以外,还使用只有很少存储容量的(只有 64 或 128 字节)CMOS (Complementary Metal Oxide Semiconductor,互补金属氧化物半导体)存储器来存放计算机的实时时钟信息和系统硬件配置信息。这部分内存通常和实时时钟芯片(Real Time Chip)做在一块集成块中。CMOS 内存的地址空间在基本内存地址空间之外,需要使用 I/O 指令来访问。

posted @ 2018-07-02 17:08  洛克十年  阅读(394)  评论(0编辑  收藏  举报