计算机基础存储、磁盘、总线

222 阅读11分钟

笔记大纲

  • 存储技术(RAM/ROM/高速缓存)
  • 磁盘(机械磁盘、固态硬盘)
  • 总线
  • I/O设备
  • 二进制
  • 编码(符号、字符集、编码)
  • 链接技术(静态链接、动态链接)

1.存储技术

计算机的信息终将需要存储设备进行时空区域内进行存储,根据不用的应用场景有大小之分、快慢之分。不同的存储技术组成了计算机的存储器层次模型,每个层次都有各自的职责和必要。

1.1 存储器层次模型

image.png

1.2 随机访问存储器 RAM

随机访问存储器 Random Access Memory简称RAM,它分为静态和动态两大类。速度上,静态RAM比动态RAM更快,访问仅需几个时钟周期,但是造价也更贵。

1.2.1 静态RAM - SRAM(高速缓存)

将每个位存储在一个双稳定态的存储单元里,存储单元使用一个六晶体管电路实现。 CPU的寄存器、L1级、L2级、L3级高速缓存使用,后续文章详细描述。// TODO

1.2.2 动态RAM - DRAM(内存/主存)

将每个位存储为对电容的充电,每一个单元由一个电容和一个访问晶体管组成。计算机主存采用DRAM实现,主存是一个临时存储数据的设备,从逻辑上讲主存就是一个线性的字节数组实现,每个字节都有唯一的内存地址。 image.png

1.2.2.1 内存模块

DRAM芯片是封装在内存模块之中,它插到主板的内存插槽上。不同的处理器架构,对内存引脚的支持数量也不尽相同,在64为操作系统上,DRAM芯片以64位为块,传送数据到内存控制器,然后通过内存控制器写出数据。

1.2.2.2 内存逻辑结构

image.png 其实,内存是一个逻辑的线性一维数组,而是将DRAM设计成一个二维阵列,以便降低芯片上地址的引脚数量,但是这也有缺点,就是寻址被分成2个步骤,增加了时钟周期。如图,如果要从内存中找到(0,2)单元的数据,DRAM会将该行数据都复制到内部缓冲区中,然后发送到内存控制器,再由内存控制器和总线交互。

1.2.2.3 内存的访问

CPU通过总线电路和内存交互数据,交互的步骤统称为总线事务读事务:从主存传输数据到CPU。 写事务:从CPU传回数据到主存。 image.png

1.2.2.4 增强DRAM

现在许多内存生产商为了将内存速度加快,会对DRAM架构进行优化,优化手段常见有快页模式FPM DRAM模式双倍速率同步DRAM等。

1.2.3 ROM(只读存储器)

image.png RAM如果断电会丢失数据,计算机需要一个在断电后仍然能够保持数据的随机存储器以便支持计算机开机启动的准备工作。 ROM的特点是非易失只读的存储设备,通常它在主板生成过程中印制在主板上。

1.3 持久存储器 - 磁盘

现代工业,RAM并不能完全支撑计算机的存储需求,磁盘的目的就是为了解决大数据量的存储问题,磁盘的存储容量比RAM大的多得多,现在的磁盘造价低廉、工业技术要求不算太高,现在磁盘容量动辄几百GB甚至数TB级别,但是磁盘的最大缺点就是访问时间长。

1.3.1 磁盘构造

image.png

           - 盘片

盘片:多个盘片组成了基本的磁盘,每个盘片有2面,其表面覆盖着精密的磁性材 料,磁盘上所有数据都存储在盘片上。计算机运行时,盘片固定在主轴上高 速运转。

           - 主轴

主轴:固定盘片旋转的中轴,主轴旋转带动盘片旋转。转速一般是5400~15000 / 分,主轴转速越快,磁盘读写效率越高,但是功耗、噪音也会上升。

           - 磁臂

磁臂:控制磁头在盘片上方进行读取数据的设备 磁臂调度算法:// TODO,后续在操作系统I/O章节详细剖析。

           - 磁头

磁头:磁臂头位置的读写数据设备,跟随磁臂附着在盘片上方,通过盘片旋转,在 盘片的磁道上读取磁信号。

           - 磁道

磁道:盘片上密密麻麻、一道一道的沟壑称之为磁道,换句话说,磁道就是一组同 心圆,一起组成了盘面,严格来说数据就是存储在一道一道磁道上的。

           - 扇区

扇区:是一个逻辑概念,将磁道细分为一段段的伪连续空间,每一段空间称之为 一个扇区,他的数据大小通常是512字节,连续扇区之间有狭窄的空隙,空隙 不存储数据,而是标识扇区的格式化位。

           - 柱面

柱面:也是逻辑概念,柱面是由多个盘片,距离主轴中心相等距离的磁道集合。 image.png

1.3.2 磁盘容量

磁盘容量由记录密度磁道密度面密度决定。

1.3.3 磁盘操作

磁盘控制器控制磁臂寻找数据道(寻道) -> 等待盘片旋转到指定位置 -> 感知磁信息 磁盘读取数据主要由3部分组成

              - 寻道时间:平均3~9ms,最大可到几十毫秒
              - 旋转时间:和转速有关,转速越快,耗时越短,通常<10ms
              - 传输时间:通常<1ms,微妙级别

1.3.4 闪存技术/固态硬盘

固态硬盘基于闪存技术实现,其内部工作逻辑和常规磁盘差别很大,其内部数据以块 为单位进行存储,因为其使用块擦除技术,所以相较之普通磁盘,读写次数大打折 扣,但是其读写效率通常比普通机械磁盘快许多,因为避免了寻道、旋转时间。

1.3.5 RAID磁盘冗余阵列技术

现代计算机为了提高磁盘的读写效率,提出了RAID磁盘阵列的概念,操作系统统一对 接RAID接口,屏蔽了具体实现。RAID是将多个磁盘进行阵列组合,达到并行读写、 数据冗余的特点。

1.4 存储技术的局部性原理

// TODO,后续在操作系统章节详细剖析

2. 总线

总线是一个贯穿整个系统的电子管道的总称,他的职责是将链接总线的设备信息进行提供信息传递的功能。通常总线会被设计成定长的字节块,简称

2.1 系统总线

CPU内部可分为2个总线结构,其中CPU本地总线负责CPU高速缓存和CPU计算单元通信,其速度较快;其叫法还有后端总线、存储总线等。

2.2 内存总线

CPU和内存交互数据的总线线路的别称,CPU通过北桥的IO桥接器设备进行和内存数据交互。

2.3 IO总线

I/O总线是基于PCI/PCIe协议的数据总线统称,计算机I/O设备均与I/O总线对接,进行数据传递。 image.png

2.4 总线按分工分类

总线根据功能可划分为:

     - 数据总线
     - 地址总线
     - 控制总线

3.I/O设备

I/O设备是系统与外部的联系通道,每个I/O设备都通过一个IO控制器/适配器与计算机的I/O总线相连。 控制器:插在电路板上的一组芯片,其功能是在IO设备和IO总线之间传递数据。

3.1 输入输出实现方式

CPU使用一种内存I/O映射技术来向I/O设备发出命令。系统地址空间和I/O设备通信对应,每一个这样的地址称之为I/O端口,当一个设备注册连接到总线时,就会与一个或多个端口相关联。 image.png

3.1.1 普通模式(数据流/忙等待)

        1. 用户程序发出一个系统调用
        1. 内核将其翻译为对应设备驱动程序的调用函数
        1. 驱动程序启动I/O,并不断轮询检查设备
        1. I/O结束,驱动程序将数据通过总线传送到指定内存地址

image.png

3.1.2 中断

同普通模式一样,只不过设备驱动程序不需要轮询检查,在I/O进行过程中,CPU可以调度其它程序,等I/O完毕时,设备驱动程序发出中断通知CPU完成操作,CPU后续进行逻辑处理。

3.1.3 DMA(直接内存访问)

DMA是一种特殊的芯片,它可以控制设备控制器和内存数据交互的数据流,无需CPU干预。

        1. CPU通过设置DMA控制器的寄存器,告诉数据需要传送到目的地址、磁盘扇区信息等。
        1. DMA控制器负责和I/O控制器进行I/O数据交互。
        1. DMA每完成一个数据块,给CPU发出一个中断来通知CPU。

image.png image.png

4. 二进制

现代计算机几乎是使用二进制的表示形式来处理数据,逢二进一,只有0和1两个数字表示,每一个数字表示一位,bit;

4.1 十进制转二进制

4.2 二进制转十进制

4.3 八进制、十六进制

4.4 计算机数据表示形式

因为计算机只有加法运算,没有减法,所谓的减法都是通过二进制位加法运算进行,所以计算机对二进制的表示有了补码。

4.4.1 原码

正数的原反补三码一致

4.4.2 反码

4.4.3 补码

对于负数而言,将其绝对值的原码取反,0变1,1变0,然后+1

5.编码/字符集

5.1 字符集

规定了计算机表示字符的集合,常见的字符集有:

     - ASCII字符集:诞生于美国,一共128个字符
     - ISO 8859系列字符集:比ASCII添加了一些西欧符合,一共256个字符
     - GB2312字符集:中国,三千多字符集
     - Unicode字符集:通用字符集

5.2 编码

基于不同的字符集,每种字符集在计算机系统中可以有不同的编码规则,目前使用广泛的Unicode字符集的编码方式极为常见:

     - UTF-8编码
     - UTF-16编码

其中,UTF8和UTF16采用变长方案,UTF-8是1个字节的码元,UTF-16使用2个字节码元。UTF-8同样兼 容ASCII码,目前UTF-8编码已经超过ASCII的使用市场。

6.链接

链接是将各种代码片段和数据片段收集、组合为一个单一的文件的过程,文件被加载到内存中可执行。现代的计算机系统是通过链接器程序工作完成。

6.1 符号/符号表

每一个可重定位目标模块都有一个符号表,包含了模块定义和引用的符号信息,其中包括3类符号:

     - `全局符号`:能够被其它模块引用的符号
     - `外部符号`:有其它模块定义,并被本模块引用的符号
     - `局部符号`:只被本模块定义和引用的符号

6.2 目标文件

     - `可重定位目标文件`:包含二进制代码和数据,在编译时与其它可重定位目标文件合并。
     - `可执行目标文件`:包含二进制代码和数据,可直接被复制到内存并执行。
     - `共享目标文件`:特殊的可重定位目标文件,可以再运行时被动态加载到内存。

6.3 静态库

静态库:编译器将相关目标模块打包成为一个单独的文件。

6.4 静态链接

以一组可重定位目标文件和命令参数为输入,生成一个可运行的可执行文件为输出,其过程有2个主要任务:

     1. 符号解析:将文件每一个符号引用和符号表定义符号关联起来。
     1. 重定位:链接器通过吧每个符号定义与内存地址相关联,以修改这些符号引用,从而指向内存地址。

6.4 动态链接

在程序运行时,加载共享库的函数代码资源,并和本程序践行链接,形成一个完整的程序。因为库函数是共享的,所以减少了程序大小,相较之静态链接,动态链接性能下降5%,但是节省了空间。