计算机存储器

1、当计算机上电初始化时,物理内存被设置成从地址0开始的连续区域。除了地址0xA0000到0xFFFFF(640K到1M

共384K)和0xFFFE0000到0xFFFFFFFF(4G处的最后一64K)范围以外的所有内存都可用作系统内存。这两个特定

范围被用于I/O设备和BIOS程序。Linux内核不适用BIOS功能,也不使用BIOS设置的中断向量表。640K——1M

之间的384K仍然保留用作图中指明的用途。其中0xA0000开始的128K用作显示内存缓冲区,随后部分用于其他

控制卡的ROM BIOS或其映射区域,而0xF0000到1M范围用于高端系统ROM BIOS的映射区。1M——16M将被

内核用于作为任何分配的主内存区。另外高速缓冲区和内存虚拟盘也会占用内核代码和数据后面的一部分内存区

域,该区域通常会跨越640K——1M的区域。

2、存放在ROM中的系统BIOS程序主要用于计算机开机时执行系统各部分的自检,建立起操作系统需要使用的各种

配置表,例如中断向量表、硬盘参数表。并且把处理器和系统其余部分初始化到一个已知状态,而且还为DOS等

操作系统提供硬件设备接口服务。但是由于BIOS提供的这些服务不具备可重入性(即其中程序不可并发运行),并且

从访问效率方面考虑,因此除了在初始化时会利用BIOS提供一些系统参数以外,Linux操作系统在运行时并不适用

BIOS中的功能。

3、当计算机系统上电开机时或按复位按钮时,CPU会自动把代码段寄存器CS设置为0xF000,其段基地址则被设置

为0xFFFF0000,段长度设置为64KB。而IP被设置为0xFFF0,因此此时CPU代码指针指向0xFFFFFFF0处,即4G

空间最后一个64KB的最后16字节处。由上图可知,这里正是系统ROM BIOS存放的位置。并且BIOS会在这里存放

一条跳转指令JMP跳转到BIOS代码中64KB范围内的某一条指令开始执行。由于之前PC机中BIOS容量大多有1MB

到2MB,并存储在闪存(FLash Memory)ROM中,为了能够执行或访问BIOS中超过64KB范围并且又远远不在

0——1M地址空间中的其他BIOS代码或数据,BIOS程序会首先使用一种32位模式技术把数据段寄存器的访问范围

设置成4G,这样就可以在0到4G范围内执行和操作数据,此后,BIOS在执行了一系列硬件检测和初始化操作之后,

就会把与原来PC机兼容的64KB BIOS代码和数据复制到内存低端1M末端的64K处,然后跳转到这个地方并且让

CPU进入真正的实地址模式工作,见下图。最后BIOS就会从硬盘或其他块设备把操作系统引导程序加载到内存

0x7c00处,并跳转到这个地方继续执行引导程序。

计算机存储器_第1张图片

4、在PC机中,除需要使用内存和ROM BIOS外,还是用只有很少存储容量的(64byte或128byte)或CMOS存储器来

存放计算机的实时时钟信息和系统硬件配置信息。这部分内存通常和实时时钟芯片做在一块集成块中。CMOS内存

的地址空间在基本内存地址空间之外,需要使用I/O指令访问。

5、硬盘是由盘片和驱动器组成,硬盘中通常起码包括2张或者更多张金属盘片,因此具有很多个读写磁头。例如,

对于包含2个盘片的硬盘中就具有4个人物理磁头,含有4个盘片的硬盘中有8个读写磁头。如下图所示。硬盘旋转

速率很快通常在4500转/分钟到10000转/分钟,因此硬盘数据的传输速度通常可达几十兆比特/秒。

6、位于磁盘表面的磁头上有分别有一个读线圈和写线圈。在读数据操作过程中,磁头首先移动到旋转着的磁盘某个

位置上。由于磁盘在旋转,磁介质对磁头作匀速运动,因此磁头实际上在切割磁介质上的磁力线。从而在读线圈中

因感应产生电流。根据磁盘表面剩磁状态方向的不同,在线圈中产生的电流方向也不同,因此磁盘上记录着的0和1

数据就被读出,从而可从磁盘上顺序读出比特数据流。由于磁头读取的每个磁道上都有存放信息的特定格式,因此

通过识别所读比特数据流中的格式,磁盘电路就可以区分并读取磁道上个扇区中的数据,见下图所示。其中,GAP

是间隔字段,用于起隔离作用。通常GAP是12字节的0.每个扇区地址场的地址字段存放着相关扇区的柱面号、磁头

号(面号)和扇区号,因此通过读取地址场中的地址信息就可以唯一地确定一个扇区。

7、为了读取磁盘上的数据,就必须使用磁盘控制器。磁盘控制器是CPU与驱动器之间的逻辑接口电路,它从CPU

接收请求命令,向驱动器发送寻道、读/写和控制信号,并且控制和转换数据流形式。控制器与驱动器之间传输的

数据包括如上图中的扇区地址信息以及定时和时钟信息。控制器必须从实际读/写数据中分离出这些地址信息和一些

编码、解码等控制信息。另外,与驱动器之间的数据传输是串行比特数据流,因此控制器需要在并行字节数据和串

行比特流数据之间进行转换。对磁盘控制器的编程过程就是通过I/O端口设置控制器中的相关寄存器内容,并通过

寄存器获取操作的结果信息。

 

 

 

你可能感兴趣的:(linux,内存,内核,存储器,磁盘)