1.计算机系统概述 计算机的发展历程:
第一代计算机(电子管时代):主要特点:电子管作为开关器件,使用计算机语言,可以存储信息,输入/输出很慢 第二代计算机(晶体管时代):主要特点:晶体管代替电子管,采用磁心存储器,汇编语言取代机器语言 第三代计算机(中小规模集成电路时代):主要特点:中小规模集成电路代替晶体管,操作系统的问世。 第四代计算机(超大规模集成电路时代):主要特点:采用集成度很高的电路,微处理器问世。 第一代到第四代的计算机,计算机体系机构都是相同的,即为由控制器,存储器,运算器,输入设备和输出设备组成,成为冯诺依曼结构。
机器字长:值得是一次整数运算给能够处理多少二进制数据的位数
有关于存储器的概念解释:
存储的概念类 说明 存储元 也成为存储元件和存储基元,用来存放一位二进制信息 存储单元 由若干个存储元组成,能存放多位二进制信息 存储体 许多的存储单元构成存储体 存储字 每一个存储单元中二进制代码的组合即为存储字,可以代表数值,指令和地址等 存储字长 每一个存储单元中二进制的代码的位数是存储字长 运算器:运算器是对信息处理和运算的不见,主要功能是进行算术和逻辑运算,其核心是逻辑单元(ALU)。
控制器:控制器是整个计算机的指挥中心,它使得计算机分各个部件自动协调工作,计算机有两种信息在流动,一种是控制信息,另一种是数据信息。控制器是由程序计数器PC,指令寄存器IR,和控制单元CU组曾。PC用来存放当前的预执行指令的地址,可以自动+1形成下一条指令的地址。他与MAR之间有一条直接通路。IR用来存放当前的指令,其内容来自MDR。指令中的操作码字段OP送至CU,用以分析指令发出的各种位操作命令序列。指令中的地址码字段Ad送至MAR获取操作数。
计算机如何判断去除的是数据还是指令?因为数据和指令要送往不同的地方吗?
通常完成一条指令可以分为取址阶段和执行阶段,在取址阶段,通过访问存储器可以取出指令,在执行阶段,通过访问存储器可以取出操作数,这样,虽然指令和数据都是以二进制代码的形式放在存储器中,但是CPU可以判断在取址周期访问存储器取出的是指令,在执行阶段访问存储器取出的是数据。 编译程序,解释程序的区别:
解释程序:是高级语言翻译程序的一种,它将源语言书写的源程序作为输入,解释一句就交给计算机执行一句,并不形成目标程序。 编译程序:把高级语言的源程序作为输入,进行翻译转换,产生出机器的目标程序,然后在让计算机去执行这个目标程序,得到计算结果。 可见,编译程序于解释程序的最大区别的就是:编译程序生成目标代码,解释程序不生成。此外,编译程序产生的目标代码执行速度比解释程序的执行速度快。 CPU周期:又称为机器周期,在计算机中,为了方便管理,把一条指令的执行分为若干个阶段。每一个阶段完成一个基本操作,完成一个基本操作所需要的时间成为机器周期,通常一个指令周期由若干个CPU周期组成。CPU周期和CPU时钟周期不一样,后者是CPU主频的倒数。
2.数据的表示和运算 我猜这一块可能真不考,不写了
3.存储器的层次结构 存储器的分类:按照存取方式,可以分为随机存取存储器,只读存储器,顺序存储器和直接存储器。
随机存取存储器:随机存储器RAM,在随机存储器中存取信息,存取时间于和存储位置没有关系。优点是读写方便,使用灵活,缺点是断电后信息丢失。分为静态RAM(SRAM)和动态RAM(DRAM)静态RAM通常作为高速缓冲存储器,动态RAM常作为主存。 只读存储器:只读存储器(ROM)。顾名思义,只读存储器的内容只能随机读出但是不能写入。并且其内容断电后仍可以保留。所以把一些固定的,不变的程序放在这里,只读存储器ROM于随机存储器RAM一起构成了主存。只存储器主要包括了掩膜型只读存储器(MROM),可编程只读存储器(PROM)可擦除只读存储器(EPROM)。电可擦除只读存储器(EEPROM)和快擦除读写存储器(Flash Memory)。 串行访问存储器:串行访问存储器对存储单元进行读或者写操作时,需要按照物理位置的先后顺序一次访问,主要包括顺序存取存储器(磁带),和直接存取存储器(磁盘)。磁盘是属于半串行的,因为磁盘在寻找数据时,先要寻道,这个寻道是直接找磁道的,不需要按照顺序查找,所以属于随机访问。寻道之后要在磁道旋转,顺序寻找需要找的信息,因此有时串行访问。将这种前端直接访问,后端是穿行放问的存储器称为直接存取存储器。 ROM是采用随机存取的方式继续宁信息的访问,为什么这里将存储器分为只读存储器和随其存取存储器?随机存取是什么意思?难道ROM不是随机存取存储器吗?
随机存取是表示可以随时的访问存储器的任意单元地址,就好型数组可以通过下标来访问目标元素一样,而链表就需要一个一个的去找,因此数组是随机存取,而链表不是随机存取。 ROM确实可以算是随机存储器,因为RON就是采用随机存取的方式访问信息,但是随机存储器一般定义是必须要满足可以随机进行存取,但是ROM只能进行取操作,不能进行存操作,所以一般将ROM与RAM分开 注意,CDROM不是随机访问存储器,CDROM属于光盘,没有随机访问的特性。
读周期:指的是芯片连续两次读操作的最小时间间隔,读时间表是进行一次存储器的读操作的时间。显然小于读周期。
写周期:指的是芯片连续两次写操作的最小时间间隔,读时间表是进行一次存储器的读操作的时间。显然小于写周期。
DRAM存储器的刷新:DRAM的存储原理:采用电容的方式存储,电容中充满了电荷和电容中没有电荷正好对应了1和0的两种状态,根据电路的基础知识吗,电容中的电荷不能永久保留,而是会随着时间慢慢流逝,这是时间如果考研中没有做特殊说明,一般是2ms(即为每个基本存储单元在2ms内都要刷新一次,否则会使得电荷流逝,进而导致存储信息出错。)
通常刷新方式有三种,集中刷新,分散刷新和异步刷新。
集中刷新:一般来说,电容上的电荷基本只能维持2ms,在2ms内必须要刷新一次,将2ms看成一个刷新周期,假设存储周期为0.5us,那么在一个刷新收起里有4000个存储周期,假设该矩阵有32行,则对32行集中刷新徐娅16us,在刷新期间内是不能进行读操作或者写操作的,故程刷新时间为死时间。又称为访存的死区。这个死去的占用比例为32/4000=0.8% 分散刷新:在分散刷新中,存储周期已经不再是传统的存储周期了,也就是说,此时存储周期不再等于读(写)周期,这里对操作的定义:存储时间=读或写周期+刷新一行的时间。此处的刷新一行的时间又可以看成等于存储周期的。分散刷新将存储器的存储周期认为的延长了,因此严重的降低了系统的速度。 异步刷新:异步刷新时把存储矩阵的每一行分散到2ms内刷新,但是又不是集中刷新。而是平均分配。这能保证当刷新完第一行后,再经过2ms又可以完成对下一行的刷新。异步刷新的死时间为一个读/写周期。 对于刷新的补充:
对于集中刷新:死时间很好求,就是那一段集中刷新的时间。 对于分散刷新,刷新占据了时间,而且刷新时间内不能进行读或写对的创造,那不就是”死时间”吗?但是为什么有些教材上说分散刷新没有死时间?
死时间是存储器为的不能进行读或者写操作的刷新时间。而且这段死时间,要连续不能累积的。因此,对于分散刷新来说,由于刷新时间被存储器包含了,它在内而不在外,所以死时间是不存在的。
- 对于异步刷新来说,由于死时间是不能累加的,因此与不刷新的死时间就是一个读或者写周期。或者是没又异变的存储周期。
- 存贮芯片是按照一行一行来刷新的,不是一个一个刷新的。
闪存Flash存储器:闪存虽然是内存的一种,但是又不同于内存众所周知,如果没有电流的供应,计算机内存中的内容会立刻消失,而闪存能在没有电流的条件下长久的保存数据。其存储特性相当于硬盘,这项特性是是闪存得以成为携带数字设备的存储介质的基础。一般来说,闪存是按照块来存取数据的,不是字节。
内存类型 非易失性 可写 闪存 是 是 SRAM 不是 是 DRAM 不是 是 ROM 是 不是 PROM 是 不是 EPROM 是 是 EEPROM 是 是 存储器的扩充:存储器的扩充,假设存储器的形式位a*b的形式,表示又a个长度位b的存储单元:
位扩充:增加b,指的是扩充存储字长 字扩充:增加a。 多体并行存储器:多题并行存储器的就是采用多个模块组成的存储器,每一个模块都有相同的容量和存取速度,每个模块都有独立的地址寄存器,数据寄存器,地址寄存器和读写电路。每个模块都可以看作是一个独立的存储器。
高位交叉编址的多体寄存器:每个模块被的地址顺序是连续的,因此被称为顺序存储。(就是低位地址是存储器内的地址,高位地址是存储体的地址)。优点:有利于存储器的扩充,只要将存储单元的编号往后加即可。缺点:每一个模块都是串行工作,因此存储器的带宽受到了很大的限制。 低位交叉编址的多体存储器:低位地址表示位体号,高位地址表示位块内地址,这样连续的地址就放在不同的存储体中,而每一这存储体中的地址都是不连续的。对于连续字成块的传送,低位交叉编址的多体寄存器可以实现多模块流水线式的并行存取,可以大大的提高存储器的带宽。 低位交叉编址存储器的分析:
讨论的前提是模块的字长等于数据总线的宽度。假设模块存储周期位T,总线传输周期为t,且存储器是由m个模块组成,如果T=mt,那么要低位交叉存储器的模块数目必须大于或者等于m以保证当经过mt的时间后再次启动存储体,它的上一次的存取操作已经完成。 高速缓存Cache:在多体并行存储器中,外部设备优先级最高,这样会导致CPU等待外部设备访存的现象,导致CPU空等一段时间,甚至是等待几个主存周期,从而降低了CPU的工作效率。为了不免CPU与IO设备争抢缓存,可以在CPU与IO之间加上一个Cache。这样,如果外部设备正在和主存交换信息,CPU就可以不同等待,直接从Cache中取得信息。
Cache地址:Cache地址由两部分组成,高c标识Cache块号,低b位为块内地址。Cache一共由2^c块。 命中的概率:CPU访问信息在Cache中的比例。 平均访问时间:假设命中概率为h,tc为命中时访问Cac和的时间,tm为未命中时访问主存的时间,则Cache-主存系统的平均访问时间ta为:ta=h*tc+(1-h)*tm Cache-主存系统的效率:e=tc/ta CPU与Cache之间的数据攒送的基本单位时字,而主存与Cache之间的数据传送单位为块。 CPU访问主存时,会同时的把地址给Cache和主存,Cache的逻辑依据地址判断此字是否在Cache中,若此字在Cache中,立刻传送给CPU,否则,用主存读周期把此字从主存读出并传从到CPU,与此同时,把含有这个字的一整块数据从主存读出,并传送到Cache中。 Cache放的时主存信息的副本,所以不会增加系统的存储容量。 Cache与主存之间的映射关系:
直接映射:i=j mod C 其中,i为Cache的块号,j为主存的块号,C为Cache的块数。根据上面的公式就可以将主存中第j块的信息复制到第i个Cache块中。优点:简单,缺点:不够灵活,冲突概率高(抖动) 全相联映射:全相连映允许主存中的每一个块映射到Cache中的任何一个位置。优点:Cache的命中率高,减小了Cache中的冲突率,提高了Cache中的命中率。缺点:tag的位数增加,访问Cache时主存子块需要和Cache的全部标记进行比较,才才能判断所访问的内容是否在Cache中,这种比较通常采用按内容寻址的相连存储器来完成。 组相联映射:组相连映射时对直接映射和全相联映射的一种折中的方式,假设把Cache分成Q组,每一个组有R块,i=j mod Q其中,i为Cache中的组号,j为内存中的块号,Q为Cache中的组数。通俗的说,就是把第j块的内容复制到Cache中的第i组,至于是第i组中的那一块,就随意放即可。 组相联映射的补充:
当相连中只有一组时,此组相联映射就相当于全相连映射,当每一个组只有一块时,该组相联映射就相当于直接映射。 在组相连映射中,主存从高位到低位一共划分3部分,标记tag,组号和内存地址。块内地址=log2(块大小),组号=log2(Cache组数),标记tag=主存剩余的其他位。 假设每一组中有N块,就称为N路组相联。 Cache中的替换算法:只有使用全相联映射与组相联映射时才会使用到替换算法。一般常用的有先进先出算法,最近最少使用算法,随机算法。其中,随机算法随机的选出一个被替换的块,没有用到局部性原理,所以不能提高Cache的命中率。
Cache的写策略:由于Cache的内容是主存中的副本,所以它因该与主存保持一致,而CPU对Cache的写入改变了Cache的内容,就会导致Cache的内容与主存的内容不一致,如何让Cache与主存的内容保持一致就是写策略需要完成的事。
写回法:写回法要求当CPU写Cache命中时,只要修改Cache中的内容,而不是立刻的写会主存。这种方式可以减少访存次数,但是实现这种方式需要设置一个修改位,当某一行被换出时,根据此行的修改位是0还是1,来决定将该行的内容写回主存还是简单的弃去。注意,上面考虑的是Cache命中时,那没有命中的时候呢?如果CPU要对Cache中的某一位进行就该,但是此时此字恰好没有在Cache中,就需要从主存中找到包含该字的数据块,千万注意:CPU不会再主存中直接修改,而是找到之后直接复制到Cache中进行修改。等从Cache中换出此块时,再复制到主存中。(修改只发生再Cache中) 全写法:当写Cache命中时,Cache与主存同时修改,因而较好的保持了Cache与主存的一致性。很明显,此时的Cache不需要在每一行中都设置修改位,当写Cache未命中时,直接在主存中修改。至于在主存中修改后需不需要再复制到Cache中,这个视情况而定。可以复制也可以不复制。 写一次法:写命中与没有写命中时的处理办法与写回法基本相同,仅仅是第一次写命中时要同时写入主存。 虚拟存储器: 这个再操作系统中有比较详细的记录,和这里基本相同,这里只做一点补充:
虚拟存储器是一个逻辑模型,并不是一个实际的物理存储器。 虚拟存储器必须建立再主存-辅存的基础上,但是两者有差别,虚拟存储器允许使用比主存大得多的地址空间,虚拟存储器每一次访问时,都要进行虚实地址变换,而非虚拟存储器则不必。 虚拟存储器的作用是分割地址空间,解决主存容量问题以及实现程序的重定位。 虚拟存储器的容量由计算机地址总线的数量来决定。 两个转换关系(天勤计算机组成原理中的):
逻辑地址(虚拟地址)是由程序员给出的,经过查询快表(TLB),页表(很多书中对于这两者的先查谁还是同时查没有给出标准,编者给出的解释是,现代的电路技术已经完全可以实现同时查询,如果TLB命中,就直接输出由TLB中的页表查询所得到的物理地址,如果TLB没有命中,就根据页表输出物理地址)得到物理地址。但是现在的物理地址并不一定是最终的地址。如果Cache命中,就需要转换为Cache地址,转换后的Cache地址才是最终的物理地址。但是如果Cache没有命中,还需要经过TLB或者是页表得到的地址来直接访存。因此,再不命中的情况下,两个转换关系就变成了一个,即逻辑地址->物理地址。 TLB命中,页表必然命中,但是Cache的命中与TLB或是页表的命中没有必然关系。
CPU执行一次存储访问操作最少需要访问几次主存?
在具有Cache并采用动重定位的存储系统中,一次访存的大致操作如下: 第一步:根据虚页号查找快表,如果块表中由对应的页表项,则取出页框号形成物理地址,转到第二步,如果快表中不存在对应虚页的页表项,则发生TLB确实,转换到第三步。 第二步:判断物理地址中的标记是否和Cache中的标记相等且有效位是否为1,若为1,则Cache命中,从Cache中读出数据或者写数据到Cache中(全写的方式下,同时也要写主存。)若不为1,则发生Cache缺失,转到第四步。 第三步:当TLB缺失,根据页表基址寄存器的值和虚页号找到主存中对用的页表项,判断有效位是否为1,若是,则说明虚页存在主存中,此时把页表项转入到TLB中,并取出页框号作为物理地址,转到第二步。如果不是,说明该虚页不在主存中,即为发生了缺页异常,此时调出系统中的缺页异常处理程序,实现从磁盘中读入一个页面的功能,缺页处理后,重新执行当前的指令,这一次一定能在主存中找到。 第四步:Cache缺失时,CPU根据物理地址到主存读一块信息到Cache,然后读入CPU或者CPU写信息到Cache中。 由此可见,当CPU进行一次访存操作时,最好的情况下不需要访问主存(TLB命中,Cache命中),最坏的情况下不仅要多次访问主存,还要访问磁盘(Cache缺失,TLB缺失,缺页异常) TLB,页表,Cache,主存之间的访问关系
TLB 页表 Cache 是否可能发生 命中 命中 命中 可能 命中 命中 不命中 可能 命中 不命中 命中 不可能(因为TLB是页表的子集) 命中 不命中 不命中 不可能(因为TLB是页表的子集) 不命中 命中 不命中 可能(数据在主存,不在Cache) 不命中 命中 命中 可能 不命中 不命中 命中 不可能(因为数据不在主存) 不命中 不命中 不命中 可能(因为数据不在主存)
共 1 条回复
NB!