深入理解计算机系统 - 存储设备2
总线
总线是一组并行的导线,能携带地址,数据和控制信号,有的总线设计使数据和地址信号共享同一组总线;多个设备可以共享同一组总线
- 系统总线:连接CPU和I/O桥接器(其中包含内存控制器)
- 内存总线:连接I/O桥接器和主存
- I/O总线:通过I/O桥接器将I/O总线与系统总线和内存总线相连,众多I/O设备可以共享I/O总线
- 总线接口:CPU通过内部的总线接口电路在总线上发起读写事务
CPU访问主存
执行 movq A,%rax:地址A的内容被加载到rax寄存器:CPU发起读事务:如图
读步骤
- CPU将地址A放到系统总线上
- I/O桥将信号传递给内存总线
- 主存读取地址信号,从DRAM读取数据,写到内存总线
- 数据传到系统总线
- CPU从总线上读取数据,将其复制到rax寄存器
执行 movq %rax,A:将rax寄存器值加载到地址A:CPU发起写事务
写步骤
- CPU将地址A放到系统总线上
- I/O桥将信号传递给内存总线
- 主存读取地址信号,并等待数据到达
- CPU将rax寄存器数据复制到总线
- 主存读取内存总线数据,并存储到DRAM中
CPU访问磁盘
I/O端口
- CPU使用内存映射的技术来向I/O设备发送指令;
- 地址空间中有一块地址是为与I/O设备通信而保留的;
- 每个这样的地址称为一个I/O端口;
- 当一个设备与I/O总线相连时,它将被映射到一个或多个端口,即根据I/O设备,地址空间会分配一个或多个地址给这个I/O设备
读步骤
假设磁盘控制器映射到端口0XA0
- CPU发送一个命令字,告诉磁盘发起一个读,同时还会发送中断信息等
- CPU发送要读的逻辑块
- CPU发送要存储到主存的地址
- 磁盘收到来自CPU的命令
- 磁盘将逻辑块信息翻译成扇区地址,读取扇区内容
- 磁盘将扇区内容直接传送到主存
- 传送完成后,磁盘给CPU发送一个中断信息,告诉CPU已完成命令
说明
- CPU发送完指令后就立即开始做其他事情,而不是等待磁盘读取完毕,一个1Ghz的CPU处理器时钟周期为1ns,而磁盘读取的时间需要ms级的时间,若一直等待,会造成资源的浪费,故指令发送完后,即开始做其他事情,知道中断信号的到来
- 磁盘设备可以自己执行总线事务而不需要CPU干涉,这个过程就是DMA,这种数据传送称为DMA传送(Direct Memory Access transfer)
关于CPU速度问题
计算机经过这么多年的发展,各方面的速度都有很大的提升,但存储设备的访问速度一直都赶不上CPU的速度,甚至差距越来越大,而如今,CPU的主频提升也遇到了障碍;
- 原因:处理器功耗的公式:P = fCV²(f:时钟频率,C:电容,V:电压)
- 显然,频率增加,功率会增大 - 解决办法:多核处理器
- 用多个小处理器核取代单个大处理器,每个小核能独立地与其他核并行地执行程序
所以计算机速度越来越快,并不是因为时钟频率一直在增加,而是处理器地核心数量增加的结果