本系列文章为408考研计算机组成原理知识点整理仅涉及到一些重要的考研知识点并不是完全系统全面的知识,参考书目和视频资料:唐朔飞 计算机组成原理(第二版),袁春风 计算机组成与系统结构(第二版)王道考研计算机组成原理,B站王道考研计算机组成原理视频课。
3.1 存储器分类、多级存储系统、存储器性能指标
3.1.1 存储器分类
(1)按在计算机中的作用(层次)分类
- 主存储器:简称主存,又称内存;用来存放计算机运行期间所需的大量程序和数据;CPU可以直接对其进行访问,也可以和高速缓冲存诸器(Cache)及辅助存储器交换数据;特点是容量较小,存储速度较快,造价高
- 辅助存储器:简称辅存,又称外存;是主存储器的后援存储器,用来存放当前暂时不用的程序和数据,以及一些需要永久性保存的信息,它不能与CPU直接交换信息;特点是容量极大,存储速度较慢,造价低
- 高速缓冲存储器:简称Cache;它位于主存和CPU之间,用来存放正在执行的程序段和数据,以便CPU能够高速地使用它们;Cache的读取速度可以和CPU相匹配,但存储容量小,价格高,目前会被集成在CPU当中。
(2)按照存储介质分类
- 磁表面存储器:如磁盘、磁带等
- 半导体存储器:如MOS型存储器、双极型存储器
- 光存储器:如光盘
(3)按存取方式分类
- 随机存储器(RAM):存储器的任何一个存储单元的内容都可以随机存取,而且存取时间与存储单元的物理位置无关;其优点是读写方便,使用灵活,主要用作主存或高速缓冲存储器;RAM又分为静态RAM和动态RAM
- 只读存储器(ROM):存储器的内容只能随机读出而不能写入;信息一旦写入存储器就固定不变,即使断电内容也不会丢失。因此通常用它存放固定不变的程序,常数和汉字字库,甚至用于操作系统的固化。它与随机存储器可以共同作为主存的一部分,统一构成主存的地址域。
- 串行访问存储器:对存储单元进行I/O操作时,需按其物理位置的先后顺序寻址,包括顺序存取存储器(如磁带)与直接存取存储器(如磁盘)
(4)按信息的可保存性分类
- 易失性存储器:断电后,存储的信息会消失,如RAM
- 非易失性存储器:断电后,存储的信息仍然会保持,如ROM、磁表面存储器和光存储器
若某个存储单元所存储的信息被读出时,原存储信息被破坏,则称为破坏性读出:若读出时,被读单元原存储信息不被破坏,则称为非破坏性读出。具有破坏性读出性能的存储器,每次读出操作后,必须紧接一个再生的操作,以便恢复被破坏的信息。
3.1.2 存储器的性能指标
(1)存储容量
存储容量=存储字数x字长(如1M×8位)
(2)单位成本
每位价格=总成本÷总容量
(3)存储速度
数据传输率=数据的宽度÷存储周期
区分存取时间和存取周期
- 存取时间(Ta):是指从启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间
- 存取周期(Tm):存取周期又称读写周期或访问周期。它是指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立访问存储操作(读或写操作)之间所需的最小时间间隔。
存取时间不等于存取周期,通常存取周期大于存取时间。这是因为对任何一种存储器,在读写操作之后,总要有一段恢复内部状态的复原时间。对于破坏性读出的存储器,存取周期往往比存取时间大得多,甚至可达Tm=2Ta,因为存储器中的信息读出后需要马上进行再生。
3.1.3 多级存储系统
存储系统的层次结构主要体现在“Cache——主存”和“主存——辅存”这两层
“Cache——主存”:主要解决CPU和主存速度不匹配的问题
“主存——辅存”:主要解决存储系统的容量问题
- 主存和Cache之间的数据调动是由硬件自动完成的,对所有程序员透明
- 主存和辅存之间的数据调动则是由硬件和操作系统共同完成的,对应用程序员是透明
3.2 SRAM芯片和DRAM芯片
3.2.1 SRAM和DRAM比较
3.2.2 DRAM刷新和地址线复用
DRAM刷新
关于DRAM的刷新,这里有4个问题需要解释
多久刷新一次:一般为2ms
每次刷新多少存储单元:以行为单位,每次刷新一行存储单元,由芯片内部自行生成行地址。
如何刷新:有硬件支特,读出一行的信息后重新写入,占用1个读写周期
什么时候刷新:分散刷新、集中刷新和异步刷新三种模式
三种刷新模式
集中刷新:是指利用一段固定的时间,依次对存储器的所有行进行逐一再生,存储周期不变,在刷新期间内会停止对存储器的访问,因此称之为“死时间”,又称访存“死区”。
分散刷新:把对每行的刷新分散到各个工作周期当中,这样,一个存储器的系统工作周期就分为了两个部分,前半部分用于正常读写:后半部分用于刷新某一行。这种刷新方式增加了系统的存取周期。但没有“死区”。
异步刷新:它是前两种刷新方式的结合。具体做法是用刷新周期除以行数,得到两次刷新操作之间的时间间隔t,接着利用逻辑电路每隔该时间间隔t产生一次刷新请求,因比每tus内会有0.5us的死时间。所以死时间会分散在整个过程中,从根本上提高了整机工作的效率。
DRAM的刷新有几点值得注意:
- 刷新对CPU是透明的,也即刷新不依赖于外部的访问
- DRAM刷新单位是行,因此刷新操作时仅需要行地址
- 刷新操作类似于读操作,但又有所不同:刷新操作仅给栅极电容补充电荷,不需要信息输出,另外刷新时不需要进行选片,即整个存储器中的所有芯片同时被刷新
DRAM地址线复用技术
DRAM由于用于主存,容量可能较大,因此地址线可能也会更多,所以为了使地址线电路变得更简单,会采用一种地址线的复用技术,也就是分两次送。
这种技术可以使行列地址分两次前后进行传送,传送时只需要一半地址,先传送至缓冲区,再传送给译码器即可,这样会使地址线更少。
3.3 主存储器和CPU的连接、多模块存储器
3.3.1 主存储器和CPU的连接
位扩展
字扩展
字扩展是指增加存储器中字的数量,而位数不变。字扩展将芯片的地址线、数据线、读写控制线相应并联,而由片选信号来区分各芯片的地址范围。
注意:仅采用字扩展时,各芯片连接地址线的方式相同,连接数据线的方式也相同,但在某一时刻只需选中部分芯片,所以通过片选信号CS或采用译码器设计连接到相应的芯片。
字位同时扩展
注意:采用字位同时扩展时,各芯片连接地址线的方式相同,但连接数据线的方式不同,而且需要通过片选信号CS或采用译码器设计连接到相应的芯片。
存储芯片的地址分配和片选
线选法
优点:不需要地址译码器,线路简单。
缺点:地址空间不连续,选片的地址线必须分时为低电平(否则不能工作),不能充分利用系统的存储器空间,造成地址资源的浪费。
译码片选法
译码片选法用除片内寻址外的高位地址线通过地址译码器芯片产生片选信号。如用8片8K×8位的存储芯片组成64K×8位存储器(地址线为16位,数据线为8位),需要8个片选信号;若采用线选法,除去片内寻址的13位地址线,仅余高3位,不足以产生8个片选信号。因此,采用译码片选法,即用一片74LS138作为地址译码器,则A15A14A13=000时选中第一片,A15A14A13=001时选中第二片,以此类推(即3位二进制编码)。
3.3.2 双端口RAM、多模块存储器
双端口RAM
双端口RAM:是指同一个存储器有左右两个独立的端口,分别具有两组相互独立的地址线、数据线和读写控制线,允许两个独立的控制器同时异步地访问存储单元。该项技术可以优化多核CPU访问一根内存条的速度。
掌握下面4种情况:
- 两个端口不同时对同一地址单元读出数据:没有错误
- 两个端口同时对同一地址单元读出数据:没有错误
- 两个端口同时对同一地址单元写入数据:发生写入错误
- 两个端口同时对同一地址单元操作,一个写入,一个读出:发生读出错误
多体并行存储器
多体并行存储器由多体模块组成。每个模块都有相同的容量和存取速度,各模块都有独立的读写控制电路、地址寄存器和数据寄存器。它们既能并行工作,又能交叉工作。
高位交叉编址
高位地址表示体号,低位地址为体内地址。在这种编址方式下,总是把低的体内地址送到由高位体号所确定的模块内进行译码。访问一个连续的主存块时,总是先在一个模块内访问,等到该模块访问完才转到下一个模块访问,CPU总是按顺序访问存储模块存储模块不能并行问,因此不能提高存储器的吞吐率。
假设每个存储体的存取周期为T,存取时间为r,且T=4r。如果多体存储器采用高位交叉编址,那么CPU真正花在读数据上的时间只有r,但却要再花费3r的时间用来等待,效率不高。也就是说连续读取n个存储字,就要耗时nT
低位交叉编址
低位地址表示体号,高位地址为体内地址。在这种编址方式下,总是把高位的体内地址送到由低位体号所确定的模块内进行译码。程序连续存放在相邻的模块中,将采用此编址方式的存储器称为交叉存储器。采用低位交叉编址后,可在不改变每个模块存取周期的前提下,采用流水线的方式并行存取,提高存储器带宽。
设模块字长等于数据总线宽度,模块存取一个字的存取周期为T,总线传送周期为r,则采用低位交叉编址的存储器连续读取n个存储字,耗时为T+(n-1)r。CPU每经过时间r后会启动下一模块,因此交叉存储器要求其模块数必须大于等于T/r,以保证某模块后经过T时间后再次启动该模块时,其上次的存取周期已到(也就是已经恢复)
下面看看如果交叉存储器要求其模块数必须没有大于等于T/r时的情况:
3.4 外部存储器
3.4.1 磁盘存储器
概念介绍
存储区域:一块硬盘含有若干记录面,每个记录面划分为若干条磁道,每条磁道又划分为若干扇区,扇区(也称之为块)是磁盘读写的最小单位,也就是磁盘是按块存取。
磁头数:也即记录面数,表示硬盘总共有多个磁头,磁头分为读磁头和写磁头,每个磁头对应一个记录面。
柱面数:表示硬盘每一面盘片上有多少条磁道。在一个盘组中,不同记录面的相同编号(位置)的诸磁道构成一个圆柱面。
扇区数:表示每一条磁道上有多少个扇区。
性能指标
磁盘容量:一个磁盘所能存储的字节总数。磁盘容量有格式化容量和非格式化容量之分
非格式化容量:磁记录表面可以利用的磁化单元总数
格式化容量:是指按照某种特定的记录格式所能存诸信息的总量
记录密度:是指盘片单位面积上记录的二进制的信息量,通常以道密度、位密度和面密度表示
道密度:沿磁盘半径方向单位长度上的磁道数
位密度:是磁道单位长度上所能记录的二进制代码的位数
面密度:是道密度和位密度的乘积
注意:磁盘所有磁道记录的信息量一定是相等的,并不是说圆越大记录的信息就越多,越靠近里面的磁道位密度就越大
平均存取时间:一次磁盘读写花费的时间由以下三种时间决定:
①寻道时间Ts:在读写数据前,将磁头移动到指定磁道所花费时间
②延迟时间Tr:通过旋转磁盘,使磁头定位到目标扇区所需要的时间
- 磁盘转速为r(单位为“转/秒"或“转/分”,典型转速为5400r/min或7200r/min)
- 转一圈所需要时间:1/r
- 目标扇区平均需要转半圈, 总花费时间:1/2r
③传输时间Tt:从磁盘读出或向磁盘写入数据所经历的时间
磁盘地址表示
3.4.2 磁盘阵列
磁盘阵列:RAID是指将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储,并行访问,具有更好的存储性能,可靠性和安全性
RAID的分级如下。在RAID1~RAID5几种方案中,无论何时有磁盘损坏,都可随时拔出受损的磁盘再插入好的磁盘,而数据不会损坏,提升了系统的可靠性.
- RAID0:无冗余和无校验的磁盘阵列(逻辑上相邻的两个扇区在物理上存到两个磁盘),没有容错能力
- RAID1:镜像磁盘阵列(直接存两份数据),容量少了一半。
- RAID2:逻辑上连续的几个bit物理上分散存储在各个盘中,4bit信息位+3bit海明校验位,可纠正一位错误
- RAID3:位交叉奇偶校验码的磁盘阵列
- RAID4:块交叉又奇偶校验的磁盘阵列
- RAID5:无独立校验的奇偶校验磁盘阵列
总之,RAID通过同时使用多个磁盘,提高了传输率;通过在多个磁盘上并行存取来大幅提高存储系统的数据吞吐量了通过镜像功能,提高安全可靠性;通过数据校验,提高容错能力。
3.4.3 固态硬盘SSD
SSD概念 特点
固态硬盘(SSD):它是一种基于闪存技术的存储器,与U盘并无本质区别,属于电可擦除ROM,即EEPROM。
- SSD读写速度较快,随机访问性能高,用电路控制访问位置(机械硬盘则是通过移动磁臂旋转磁盘控制访问位置)
- SSD安静无噪音、耐摔抗震、能耗低、造价更高
- SSD容易出现坏块(读写次数过多可能会导致)
SSD的组成
闪存翻译层:主要作用是负责翻译逻辑块号,找到对应页。具体来说,I/O总线会给出系统所要读/写的逻辑块号,然后闪存翻译层会把逻辑块号映射为对应的物理地址
存储介质:上面SSD构造图中的黑色块状部分为闪存芯片,多个闪存芯片构成SSD的闪存芯片组。每个闪存芯片内由多个数据块组成(每个数据块大小为16KB~512KB)、每个数据块又有多个页组成(每个页大小为512B~4KB)。SSD的一个页相当于磁盘的一个扇区、SSD的一个块相当于磁盘的一个磁道。
SSD的读写
- 以页为单位进行读写
- 以块为单位进行擦除,擦干净的块,其中的每页都可以写一次,读无限次
- 支持随机访问,也即系统给定一个逻辑地址,闪存翻译层可通过电路迅速定位到对应的物理地址
- SSD读速度要快于写速度,这是因为要写的页如果有数据则需要先将块内其他页全部复制到一个新的块中,再写入新的页。
磨损均衡衡技术:由于反复写会导致闪存快磨损,所以引入磨损均衡技术,闪存翻译层有一个平均磨损逻辑试图通过将擦除平均分布在所有块上来最大化每个块的寿命。有如下两种方式:
动态磨损均衡:写入数据时,优先选择累计擦除次数少的新闪存块
静态磨损均衡:SSD监测并自动进行数据分配、迁移。让老旧的闪存块承担以读为主的储存任务,让较新的闪存块承担更多的写任务。
3.5 高速缓存存储器Cache
3.5.1 程序访问局部性原理、命中率
程序访问局部性原理
空间局部性:是指最近未来要用到的信息,很可能与现在使用的信息在存储空间上是邻近的。
时间局部性:是指最近未来要用到的信息,很可能就是现在正在使用的信息。
Cache局部性原理:可以把CPU目前正在访问的元素的邻近数据放到Cache中,之后CPU的访存操作大多数就会针对Cache进行,程序的执行速度的也会得到提升。
命中率
主存块:这是主存与Cache之间交换数据的最小单位。也即将主存的存储空间分块,比如每1KB为一块,主存与Cache之间就会以块为单位进行数据交换
命中率H:CPU欲访方问的信息已经在Cache中的比率
缺失率:CPU欲访问的信息未在Cache中的比率,为1-H
设Cache和主存同时被访问,若Cache命中则中断访问主存
设tc为命中时的Cache访问时间,tm为未命中时的访问时间,则Cache-主存系统的平均访问时间
Ta=Htc十(1-H)tm
设Cache和主存不同时访问,先访问Cache没命中后再访问主存
设tc为命中时的Cache访问时间,tm为未命中时的访问时间,则Cache-主存系统的平均访问时间
Ta=Htc十(1-H)(tm+tc)
3.5.2 Cache和主存的映射方式
把主存块放到Cache中后:
要给每个Cache块增加一个“标记位”,记录对应的主存块号
再给每个Cache块增加一个“有效位”,用于控制其是否生效,以免产生冲突
全相联映射
全相联映射:主存块可以放在Cache的任何位置
优点:Cache存储空间利用充分,命中率高
缺点:查找慢,有时可能要比对所有行的标记
直接映射
直接映射:每个主存块只能放到一个特定的位置,由主存块号%Cache总块数来确定
优点:对于任意一个位置,只需对比一个标记,速度最快
缺点:缺点就是Cache存储空间利用不充分,命中率低
组相联映射
组相联映射:将Cache块分为若干组,每个主存块可以放到特定分组中的任意一个位置,其中组号=主存块号%分组数
组相联映射的综合效果较好
3.5.3 Cache替换算法
随机算法(RAND)
随机算法(RAND):若Cache已满,则随机选择一块进行替换。随机算法十分简单,但是它完全没有考虑到局部性原理,命中率很低,实际效果很不稳定
先进先出算法(FIFO)
先进先出算法(FIFO):若Cache已满,则替换最先被调入Cache的块。
先进先出算法实现也很简单,但该算法依然没有考虑到局部性原理,因为最先被调入的Cache块也有可能是会频繁问到的。而且此算法容易产生抖动现象(一刚换上去的块又立马被换下)
近期最少使用算法(LRU)
近期最少使用算法(LRU):该算法会为每一个Cache块设置一个计数器,用于记录每个Cache块究竟有多长时间没有被访问了。在替换时直接选取计数器最大的替换即可,
LRU算法是基于局部性原理的,近期访问过的主存块,在不久的将来很有可能会被再次访问到,因此比这种淘汰机制是合理的。LRU算法的实际运行效果也很优秀,Cache命中率也高。
计数器的变化规则如下:
命中时:所命中的块的计数器清零,计数器比其低的块的计数器+1,其余不变
未命中且还有空闲块时:新装入的块的计数器置为0,其余非空闲块的计数器全+1
未命中且没有空闲块时:计数器最大的块被淘汰,新装入块的计数器置为0,其余块的计数器+1
最不经常使用算法(LFU)
最不经常使用算法(LFU):该算法会为每一个Cache块设置一个计数器用于记录每个Cache块被访问过几次。在替换时直接选取计数器最小的替换即可。
计数器的变化规则为:
新调入的块计数器为0,之后每访问一次计数器就+1。需要替换时,选择计数器最小的一行替换
若有多个计数器最小的行,可以按照行号递增或FIFO策略进行选择
3.5.4 Cache写策略
写命中
写回法(write-back)
写回法(write-back):是指当CPU写命中时,只修改Cache中的内容,而不立即写入主存,只有当此块被换出时才写回主存。
优点:减少了访存次数
缺点:存在数据不一致的隐患
这种方法需要判断Cache是否被修改过,因此在对应Cache块还会增加一个“脏位'”,用于标识是否修改过,如果对应位为1表示修改过,那么在被替换时该Cache块中的内容会被写回至标记位所定位的主存块上
全写法(write-through)
全写法(write-through):是指当CPU写命中时,必须把数据同时写入Cache和主存。当某一块需要替换时,不必把这一块写回主存,新调入的块直接覆盖即可
优点:实现简单,更能保持数据的一致性
缺点:增加了访存次数,降低了Cache的效率
为了减少全写法直接写入主存时所产生时间损耗,通常会在Cache和主存之间加入写缓冲(Write Buffer)。CPU同时写数据到Cache和写缓冲中,写缓冲再控制将内容写入主存,写缓冲是一个FIFO队列,可以解决速度不匹配的问题。
写不命中
写分配法(write-allocate)
写分配法:是指当写不命中时,会把主存的块加载到Cache中,然后更新此Cache块,通常会结合写回法使用。
非写分配法(not-write-allocate)
非写分配法:是指当写不命中时,CPU直接对主存的块进行修改,而不调入Cache中(注意只有读操作才将主存块调入Cache中),通常会结合全写法使用。
多级Cache
现代计算机的Cache一般是多级的(通常三级)。对于三级Cache,按离CPU的远近可命名为L1 Cache、L2 Cache、L3 Cache,离CPU越远,问速度就越慢,容量也越大,反之相反。其中指令Cache与数据Cache分离一般在L1级,此时通常为写分配法和写回法合用。
下图是一个含有两级的Cache系统,L1对L2使用全写法,L2对主存使用写回法,由于L2的存在,其访问速度远大于主存,因此避免了因频繁写时导致的缓冲区溢出。
3.6 虚拟存储器
3.6.1 页式存储器、页表及快表
页式存储器
页式存储系统是这样的:一个程序(操作系统中称为进程)在逻辑上被分为若干大小相同的“页面”,“页面”大小与“块”大小相同,每个页面可以离散地放入不同的主存块。
逻辑地址:程序员视角中看到的地址
物理地址:数据在主存中真实的地址
页表和地址变换
我们见到的地址均为虚拟的地址,给出逻辑地址后,操作系统必须将其转化为真实的物理地址再进行访存,其中最基本的一个操作就是把页号映射为块号,所以为了记录这样的映射关系,操作系统会建立一张页表。值得注意的是,页表中存放的数据是保存在主存中的,因此进行地址转换时还要要进行访存操作
地址的变化过程大致如下:
- 拆分逻辑地址为页号和页内地址
- CPU中的页表基址寄存器指明了页表在主存中的存放位置
- 查询页表找到逻辑页面对应的主存块
- 块号+页内地址=物理地址
- 进行访存操作(Cache未命中时访问主存)
快表(TLB)
依据程序执行的局部性原理,在一段时间内总是经常访问某些页时,若把这些页对应的页表项放在一个高速缓冲器中,称之为快表(TLB)中,则明显可以提高效率,相应地把放在主存中的页表称为慢表(Page)
相应地在进行地址转换时,首先查快表,若命中,则无需访问主存中的页表;否则查询主存中完整的页表,查询之后为了以后便于访问将其加入到快表中。
3.6.2 段式存储器
段式虚拟存储器中的段是按程序的逻辑结构划分的,各个段的长度因程序而异。把虚拟地址分为两个部分:段号和段内地址。虚拟地址到实地址之间的变换是由段表实现的。段表是程序的逻辑段和在主存中存放位置的对照表。段表的每行记录与某个段对应的段号、装入位,段起点和段长等信息。由于段的长度可变所以段表中要给出各段的起始地址和段的长度。
CPU根据虚拟地址访存时,首先根据段号与该段基地址拼接成对应的段表行,然后根据该段表行的装入位判断该段是否已调入主存。已调入主存时,从段表读出该段在主存中的起始地址与段内地址(偏移量)相加,得到对应的主存实地址。
优点:段的分界与程序的自然分界对应,因为具有逻辑独立性,使得它易于编译、管理、修改和保护,也便于多道程序的共享。
缺点:因为段长度可变,分配空间不便,容易在段间留下碎片,不好利用,造成浪费
3.6.3 段页式虚拟存储器
把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位,这样的虚拟存储器称为段页式虚拟存储器。在段页式虚拟存储器中,每个程序对应一个段表,每段对应一个页表,段的长度必须是页长的整数倍,段的起点必须是某一页的起点。
虚地址分为段号、段内页号、页内地址三部分。CPU根据虚地址访存时,首先根据段号得到段表地址;然后从段表中取出该段的页表起始地址,与虚地址段内页号合成,得到页表地址;最后从页表中取出实页号,与页内地址拼接形成主存实地址。
段页式虚拟存储器的优点是,兼具页式和段式虚拟存储器的优点,可以按段实现共享和保护。缺点是在地址变换过程中需要两次查表,系统开销较大。
3.6.4 虚拟存储器与Cache比较
相同点
1.最终目的都是为了提高系统性能,两者都有容量、速度和价格的梯度
2.都把数据分为小的信息块,并作为基本的传递单位,虚拟存储器系统的信息块更大
3.都有地址的映射、替换算法和更新策略等问题
4.依据程序的局部性原理应用“快速缓存的思想”,将活跃的数据放在相对高速的部件中
不同点
1.Cache主要为了解决系统的速度,而虚拟存储器则为了解决主存容量。
2.Cache全由硬件实现,是硬件存储器,对所有程序员透明;而虚拟存储器由OS和硬件共同实现,是逻辑上的存储器,对系统程序员不透明,但对应用程序员透明。
3.由于CPU的速度约为Cache的10倍,主存的速度约为硬盘的100倍以上,因此虚拟存储器系统不命中时对系统的性能影响很大。
4.CPU与Cache和主存都建立了直接访问的通路,而辅存与CPU没有直接通路。也就是说在Cache不命中时主存能和CPU直接通信,同时将数据调入Cache;而虚拟存诸器系统不命中时,只能先由硬盘调入内存,而不能直接和CPU通信。
Comments NOTHING