段寄存器的工作原理
- 格式:doc
- 大小:28.50 KB
- 文档页数:4
寄存器的工作原理寄存器是计算机中一种重要的存储设备,用于暂时存储和传输数据。
它通常由一组存储单元组成,每一个存储单元能够存储一个固定大小的数据。
寄存器在计算机的各个部件之间起到了桥梁的作用,可以高效地传递数据。
寄存器的工作原理可以分为存储和传输两个阶段。
1. 存储阶段:在存储阶段,寄存器接收来自处理器或者其他部件的数据,并将其存储在自身的存储单元中。
每一个存储单元由若干个二进制位组成,可以存储不同长度的数据,如8位、16位、32位或者64位。
存储单元之间通过地址进行区分,每一个存储单元都有一个惟一的地址。
2. 传输阶段:在传输阶段,寄存器将存储的数据传递给其他部件,如算术逻辑单元(ALU)、控制单元或者主存储器。
传输可以是单向的,也可以是双向的。
在单向传输中,数据只能从寄存器传输到其他部件;在双向传输中,数据可以在寄存器和其他部件之间进行双向传输。
寄存器的传输可以通过多种方式实现,常见的有并行传输和串行传输。
1. 并行传输:并行传输是指将整个寄存器的数据同时传输给其他部件。
这种传输方式速度快,但需要更多的传输路线和硬件资源。
并行传输适合于数据量较大的情况,如图象处理和高性能计算。
2. 串行传输:串行传输是指将寄存器的数据逐位地传输给其他部件。
这种传输方式速度较慢,但可以节省传输路线和硬件资源。
串行传输适合于数据量较小的情况,如通信和控制系统。
寄存器还可以根据其功能进行分类,常见的寄存器包括通用寄存器、程序计数器、指令寄存器、状态寄存器等。
1. 通用寄存器:通用寄存器用于存储暂时数据,供处理器进行运算和操作。
它们可以存储不同类型的数据,如整数、浮点数、字符等。
通用寄存器的数量和大小根据计算机的体系结构和指令集架构而定。
2. 程序计数器:程序计数器用于存储下一条要执行的指令的地址。
它在程序执行过程中不断更新,指示处理器应该执行的下一条指令。
程序计数器在分支和跳转指令中起到了关键作用,确保程序按照预期的顺序执行。
Arm cacheCache的工作原理Cache的工作原理是基于程序访问的局部性;对大量典型程序运行情况的分析结果表明,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内;指令地址的分布本来就是连续的,再加上循环程序段和子程序段要重复执行多次;因此,对这些地址的访问就自然地具有时间上集中分布的倾向;数据分布的这种集中倾向不如指令明显,但对数组的存储和访问以及工作单元的选择都可以使存储器地址相对集中;这种对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象,就称为程序访问的局部性;根据程序的局部性原理,可以在主存和CPU通用寄存器之间设置一个高速的容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,供CPU在一段时间内使用;这对提高程序的运行速度有很大的作用;这个介于主存和CPU之间的高速小容量存储器称作高速缓冲存储器 Cache;系统正是依据此原理,不断地将与当前指令集相关联的一个不太大的后继指令集从内存读到Cache,然后再与CPU高速传送,从而达到速度匹配;CPU对存储器进行数据请求时,通常先访问Cache;由于局部性原理不能保证所请求的数据百分之百地在Cache中,这里便存在一个命中率;即CPU在任一时刻从Cache中可靠获取数据的几率;命中率越高,正确获取数据的可靠性就越大;一般来说,Cache的存储容量比主存的容量小得多,但不能太小,太小会使命中率太低;也没有必要过大,过大不仅会增加成本,而且当容量超过一定值后,命中率随容量的增加将不会有明显地增长;只要Cache的空间与主存空间在一定范围内保持适当比例的映射关系,Cache的命中率还是相当高的;一般规定Cache与内存的空间比为4:1000,即128kB Cache可映射32MB内存;256kB Cache可映射64MB内存;在这种情况下,命中率都在90%以上;至于没有命中的数据,CPU只好直接从内存获取;获取的同时,也把它拷进 Cache,以备下次访问;Cache的基本结构Cache通常由相联存储器实现;相联存储器的每一个存储块都具有额外的存储信息,称为标签Tag;当访问相联存储器时,将地址和每一个标签同时进行比较,从而对标签相同的存储块进行访问;Cache的3种基本结构如下:DCACHEARM cache架构由cache存储器和写缓冲器write-buffer组成,其中写缓冲器是CACHE按照FIFO原则向主存写的缓冲处理器;一般来说CACHEABILITY和BUFFERABILITY都是可以配置的,所以,一块存储区域可以配置成下面4种方式:NCNB CNB NCB CB; 在实际应用当中,可以根据需要对主存进行配置;对I/O MAP来说,一般都需要采用NCNB方式,以保证对I/O的正确操作;而其他的存储区域一般都可以配置成CB方式,以获取最好的性能;引入CACHE和WRITE BUFFER是为了提高存储访问的速度,提供系统性能;如果CACHE打开的话,CPU读写主存的时候,都是通过CACHE进行的;进行读操作的时候,如果在CACHE里面找到了所需的内容 CACHE HIT,直接从CACHE里读取;如果要读的内容不在CACHE上的时候 CACHE MISS,先把所需的内容装载到CACHE里,在从CACHE上读取;进行写操作的时候,数据先写到CACHE上;具体又可以分为WRITE THROUGH和 WRITE BACK两种方式;如果是WRITE THROUGH方式的话,每次写操作都通过CACHE+WRITE BUFFER把数据直接写到主存当中去;如果是WRITE BACK 方式的话,数据最初只是写到CACHE上,必要的时候CACHE REPLACEMENT 在将CACHE上的数据通过WRITE BUFFER实际回写到主存当中去;DCaches使用的是虚拟地址,它的大小是16KB,它被分成512行entry,每行8个字8 words,32Bits;每行有两个修改标志位dirty bits,第一个标志位标识前4个字,第二个标志位标识后4个字,同时每行中还有一个TAG 地址标签地址和一个valid bit;与ICaches一样,系统上电或重起Reset的时候,DCaches功能是被关闭的,我们必须往Ccr bit置1去开启它,Ccr bit在CP15协处理器中控制寄存器1的第2位关闭DCaches功能则是往该位置0;与ICaches不同,DCaches功能是必须在MMU开启之后才能被使用的;我们现在讨论的都是DCaches,你可能会问那Write Buffer呢他和DCaches区别是什么呢其实DCaches和Write Buffer两者间的操作有着非常紧密的联系,很抱歉,到目前为止我无法说出他们之间有什么根本上的区别-_-,但我能告诉你什么时候使用的是 DCaches,什么时候使用的是Write Buffer.系统可以通过Ccr bit对Dcaches的功能进行开启与关闭的设定,但是在s3c2410中却没有确定的某个bit可以来开启或关闭Write Buffer…你可能有点懵…我们还是来看一张表吧,这张表说明了DCaches,Write Buffer和CCr,Ctt descriptor中的C bit,Bttdescriptor中的B bit之间的关系,其中“Ctt and Ccr”一项里面的值是 Ctt与Ccr进行逻辑与之后的值Ctt&&Ccr.从上面的表格中我们可以清楚的知道系统什么时候使用的是DCaches,什么时候使用的是Write Buffer,我们也可以看到DCaches的写回方式是怎么决定的write-back or write-througth;在这里我要对Ctt and Ccr=0进行说明,能够使Ctt and Ccr=0的共有三种情况,分别是Ctt =0, Ccr=0Ctt =1, Ccr=0Ctt =0, Ccr=1我们分别对其进行说明;情况1Ctt =0, Ccr=0:这种情况下CPU的DCaches功能是关闭的Ccr=0,所以CPU存取数据的时候不会从DCaches里进行数据地查询,CPU直接去内存存取数据;情况2Ctt =1, Ccr=0:与情况1相同;情况3Ctt =0, Ccr=1:这种情况下DCaches功能是开启的,CPU读取数据的时候会先从DCaches里进行数据地查询,若DCaches中没有合适的数据,则CPU会去内存进行读取,但此时由于Ctt =0Ctt 是descriptor中的C bit,该bit决定该descriptor所描述的内存区域是否可以被Cache,所以CPU不会把读取到的数据Cache到DCaches不发生 linefill.到此为止我们用两句话总结一下DCaches与Write Buffer的开启和使用:1.DCaches与Write Buffer的开启由Ccr决定;2.DCaches与Write Buffer的使用规则由Ctt和Btt决定;ICACHE当系统上电或重起Reset的时候,ICaches功能是被关闭的,我们必须往lcr bit置1去开启它,lcr bit在CP15协处理器中控制寄存器1的第12位关闭ICaches功能则是往该位置0;ICaches功能一般是在MMU开启之后被使用的为了降低MMU查表带来的开销,但有一点需要注意,并不是说MMU被开启了ICaches才会被开启,正如本段刚开始讲的,ICaches的开启与关闭是由lcr bit所决定的,无论MMU是否被开启,只要lcr bit被置1了,ICaches 就会发挥它的作用;大家是否还记得discriptor描述符中有一个C bit我们称之为Ctt,它是指明该描述符描述的内存区域内的内容可以是指令也可以是数据是否可以被Cache,若Ctt=1,则允许Cache,否则不允许被Cache;于是CPU读取指令出现了下面这些情况:如果CPU从Caches中读取到所要的一条指令cache hit且这条指令所在的内存区域是Cacheble的该区域所属描述符中Ctt=1,则CPU执行这条指令并从Caches中返回不需要从内存中读取;若CPU从Caches中读取不到所要的指令cache miss而这条指令所在的内存区域是Cacheble 的同第1点,则CPU将从内存中读取这条指令,同时,一个称为“8-word linefill”的动作将发生,这个动作是把该指令所处区域的8个word写进ICaches的某个entry中,这个entry 必须是没有被锁定的对锁定这个操作感兴趣的朋友可以找相关的资料进行了解若CPU从Caches中读取不到所要的指令cache miss而这条指令所在的内存区域是UnCacheble的该区域所属描述符中Ctt=0,则CPU将从内存读取这条指令并执行后返回不发生linefill通过以上的说明,我们可以了解到CPU是怎么通过ICaches执行指令的;你可能会有这个疑问,ICaches总共只有512个条目entry,当 512个条目都被填充完之后,CPU要把新读取近来的指令放到哪个条目上呢答案是CPU会把新读取近来的8个word从512个条目中选择一个对其进行写入,那CPU是怎么选出一个条目来的呢这就关系到ICaches的替换法则replacemnet algorithm了; ICaches的replacemnet algorithm有两种,一种是Random模式另一种Round-Robin模式,我们可以通过CP15协处理器中寄存器1的RR bit对其进行指定0 = Random replacement 1 = Round robin replacement,如果有需要你还可以进行指令锁定INSTRUCTION CACHE LOCKDOWN;虚拟cacheCache 位于MMU前面靠近CPU称为逻辑CACHE又叫虚拟Cache;CPU可以直接访问CACHE的数据,而ARM 11ARMV6的结构是CACHE 在MMU后面CPU访问CACHE要通过MMU地址转换在DM6446的core用的是哈佛结构,即把CACHE分为8K的D-CACHE数据CACHE和16K的I-cache指令CACHE一个完整的CACHE分为CACHE控制器和CACHE存储器例子Davinci DM6446 D-cache行应为512行 ,cache存储器主要分为三个部分:目录存储段driectory-story,状态信息段status information和数据项段data section每一行cache 都包括这三部分;Cache用目录存储段来存储主存的地址,数据项段存放的是主存的数据,在cache中用状态信息段来记录状态信息,其中v表示有效位,d表示脏位,有效位记录当前cache行是活动的,cache行的数据和主存中的数据是一致的,处理器可以读取;脏位则表示cache行的数据和主存中的数据不一致;在读写请求到达存储器前会被CACHE捕获,cache存储器将该请求分成三部分标签,组索引和数据索引域,cache通过组索引域确定可能包含地址和数据cache的行,cache存储器检查匹配的CACHE 行的状态标签,如果是V表示cache hit命中,否则cache失效cachemiss在cache失效时从主存吧cache行考到CACHE存储器主存中的部分内容存放在cache中的最简单方式是直接映射,在一个直接映射中,主存的地址唯一对应cache行,因为主存容量很大所以主存的很多地址映射到同一个cache行见下图:在DM6446 中内存为128M bootargs 设为128M8K的D-CACHE则128×1024/8 = 16384映射一个cache行;由于cache的速度大大大于低速的主存速度,因此需要写缓冲器;Cache与DRAM存取的一致性在CPU与主存之间增加了Cache之后,便存在数据在CPU和Cache及主存之间如何存取的问题;读写各有2种方式;贯穿读出式Look Through该方式将Cache隔在CPU与主存之间,CPU对主存的所有数据请求都首先送到Cache,由Cache自行在自身查找;如果命中,则切断CPU对主存的请求,并将数据送出;不命中,则将数据请求传给主存;该方法的优点是降低了CPU对主存的请求次数,缺点是延迟了CPU对主存的访问时间; 旁路读出式Look Aside在这种方式中,CPU发出数据请求时,并不是单通道地穿过Cache,而是向Cache和主存同时发出请求;由于Cache速度更快,如果命中,则 Cache在将数据回送给CPU的同时,还来得及中断CPU对主存的请求;不命中,则Cache不做任何动作,由CPU直接访问主存;它的优点是没有时间延迟,缺点是每次CPU对主存的访问都存在,这样,就占用了一部分总线时间;写穿式Write Through任一从CPU发出的写信号送到Cache的同时,也写入主存,以保证主存的数据能同步地更新;它的优点是操作简单,但由于主存的慢速,降低了系统的写速度并占用了总线的时间; 回写式Copy Back为了克服贯穿式中每次数据写入时都要访问主存,从而导致系统写速度降低并占用总线时间的弊病,尽量减少对主存的访问次数,又有了回写式;它是这样工作的:数据一般只写到Cache,这样有可能出现Cache中的数据得到更新而主存中的数据不变数据陈旧的情况;但此时可在Cache 中设一标志地址及数据陈旧的信息,只有当Cache中的数据被再次更改时,才将原更新的数据写入主存相应的单元中,然后再接受再次更新的数据;这样保证了 Cache和主存中的数据不致产生冲突;ARM cache 策略Cache的写策略分为直写策略和回写策略;同时向cache行和相应的主存位置写数据,同时更新这两个地方的数据的方法称为直写策略writethrough,把数据写入cache行,不写入主存的或者只有当cache被替换时或清理cache行时才写入主存的策略称为回写策略writeback;采用回写策略时,当处理器cache命中,只向cache存储器写数据,不写入主存,主存里的数据就和cache里不一致,cache里的数据是最新的,主存里的数据是早前的;这就用cache存储器信息状态标志位了,当向cache存储器里某行写数据时,置相应行的信息标志脏位为1,那么主控制器下次访问cache存储器就知道cache里有主存没有的数据了,把数据写回到主存中去;当一个cache访问失效时,cache控制器必须从当前有效行中取出一个cache行存储从主存中取到的信息,被选中替换的cache行称为丢弃者,如果这个cache行中脏位为1则应把该cache行中的数据回写到主存中,而替换策略决定了那个cache行会被替换,在arm926ejs中ARM支持两种策略:轮转策略和伪随机策略;轮转策略就是取当前cache行的下一行,伪随机策略是控制器随机产生一个值;当cache失效时,ARM采取两种方式分配cache行,一种是读操作read-allocate还有一种是读-写分配策略read-write-allocate,当cache未命中时对于读操作策略,在对cache存储器读操作时才会分配cache行全相联Cache在全相联Cache中,存储的块与块之间,以及存储顺序或保存的存储器地址之间没有直接的关系;程序可以访问很多的子程序、堆栈和段,而它们是位于主存储器的不同部位上;因此,Cache保存着很多互不相关的数据块,Cache必须对每个块和块自身的地址加以存储;当请求数据时,Cache控制器要把请求地址同所有地址加以比较,进行确认;这种Cache结构的主要优点是,它能够在给定的时间内去存储主存器中的不同的块,命中率高;缺点是每一次请求数据同Cache中的地址进行比较需要相当的时间,速度较慢; 直接映像Cache直接映像Cache不同于全相联Cache,地址仅需比较一次;在直接映像Cache中,由于每个主存储器的块在Cache中仅存在一个位置,因而把地址的比较次数减少为一次;其做法是,为Cache中的每个块位置分配一个索引字段,用Tag字段区分存放在Cache位置上的不同的块;单路直接映像把主存储器分成若干页,主存储器的每一页与Cache存储器的大小相同,匹配的主存储器的偏移量可以直接映像为Cache偏移量;Cache的Tag存储器偏移量保存着主存储器的页地址页号;以上可以看出,直接映像Cache优于全相联Cache,能进行快速查找,其缺点是当主存储器的组之间做频繁调用时,Cache控制器必须做多次转换;组相联Cache组相联Cache是介于全相联Cache和直接映像Cache之间的一种结构;这种类型的Cache使用了几组直接映像的块,对于某一个给定的索引号,可以允许有几个块位置,因而可以增加命中率和系统效率;。
寄存器的工作原理
寄存器是计算机中的一种存储器件,用于暂时存放指令、数据和地址等信息。
它的主要工作原理如下:
1. 存储功能:寄存器可以存储二进制数值,通常以位(bit)
为单位。
不同的计算机体系结构有不同的寄存器位数,例如8位、16位、32位或64位等。
寄存器通过内部的触发器电路来
保存数值,这些触发器的状态在电路中通过稳定的电压和电流来维持,从而实现长期存储。
2. 数据传输:寄存器用于在计算机各个部件之间传输数据。
它可以接收来自内存、输入设备、输出设备和其他寄存器的数据,也可以将数据发送给这些部件。
数据传输可以通过总线实现,寄存器与总线之间的连接允许高速数据传输。
3. 寄存器与CPU的关系:寄存器是与中央处理器(CPU)紧
密关联的硬件部件。
CPU可直接访问寄存器,能够快速读取
和写入寄存器中的数据。
寄存器可用作暂存器,存储正在运算的操作数和结果,并能够快速执行各种算术和逻辑操作。
4. 寄存器的种类:计算机中存在多种类型的寄存器,如通用寄存器、程序计数器、指令寄存器、栈指针寄存器、标志寄存器等。
不同类型的寄存器用于不同的目的和任务,有助于提高计算机的性能和功能。
总之,寄存器在计算机中起着重要的作用,它们通过存储和传
输数据来支持计算机的运算和运行。
寄存器具有高速的读写能力,在计算机的各个部件之间承担着数据交流的重要角色。
CPU寄存器的功能和说明4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI)2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP)1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要⽤来保存操作数和运算结果等信息,从⽽节省读取操作数所需占⽤总线和访问存储器的时间。
32位CPU有4个32位的通⽤寄存器EAX、EBX、ECX和EDX。
对低16位数据的存取,不会影响⾼16位的数据。
这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相⼀致。
4个16位寄存器⼜可分割成8个独⽴的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有⾃⼰的名称,可独⽴存取。
程序员可利⽤数据寄存器的这种”可分可合”的特性,灵活地处理字/字节的信息。
寄存器AX和AL通常称为累加器(Accumulator),⽤累加器进⾏的操作可能需要更少时间。
累加器可⽤于乘、除、输⼊/输出等操作,它们的使⽤频率很⾼;寄存器BX称为基地址寄存器(Base Register)。
它可作为存储器指针来使⽤;寄存器CX称为计数寄存器(Count Register)。
在循环和字符串操作时,要⽤它来控制循环次数;在位操作中,当移多位时,要⽤CL来指明移位的位数;寄存器DX称为数据寄存器(Data Register)。
在进⾏乘、除运算时,它可作为默认的操作数参与运算,也可⽤于存放I/O的端⼝地址。
在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,⽽且也可作为指针寄存器,所以,这些32位寄存器更具有通⽤性。
2、变址寄存器32位CPU有2个32位通⽤寄存器ESI和EDI。
8086cpu最小模式工作原理8086CPU是Intel公司于1978年推出的一款16位微处理器,是Intel x86架构的第一代产品。
8086CPU最小模式是指CPU在最简单的工作模式下运行,没有外部芯片的辅助,只使用CPU内部的寄存器和控制信号进行操作。
8086CPU最小模式的工作原理可以分为初始化、取指、执行、访存和写回五个阶段。
首先是初始化阶段,CPU上电后,需要进行一系列的初始化工作,包括设置寄存器的初始值、选择内部工作频率、设置中断向量表等。
这些初始化工作的目的是为了让CPU进入正常的工作状态。
接下来是取指阶段,CPU从内存中读取指令并存放到指令寄存器中。
8086CPU采用的是分段存储结构,每个段都有一个段寄存器来存放段的起始地址。
取指阶段需要根据指令寄存器中的段地址和偏移地址,计算出实际的物理地址,并从内存中读取指令。
然后是执行阶段,CPU根据取到的指令进行相应的操作。
8086CPU 支持多种指令,包括数据传输指令、算术运算指令、逻辑运算指令等。
执行阶段会根据指令的类型和操作数的地址,对寄存器和标志位进行相应的修改。
在访存阶段,CPU根据指令中的地址信息,从内存中读取或写入数据。
8086CPU的内存访问采用的是段地址加偏移地址的方式,需要根据段寄存器的值和偏移地址计算出实际的物理地址。
访存阶段还包括对I/O端口的访问,通过特定的指令和端口号,与外部设备进行数据交互。
最后是写回阶段,CPU将执行结果写回到寄存器或内存中。
在执行阶段中,CPU可能会修改一些寄存器和标志位的值,这些值需要在写回阶段进行更新。
同时,如果执行的是写内存的指令,也需要将数据写入到相应的内存地址中。
总结一下,8086CPU最小模式的工作原理是通过初始化、取指、执行、访存和写回五个阶段来完成指令的执行。
在每个阶段,CPU会根据控制信号和当前状态进行相应的操作,从而完成指令的执行和数据的读写。
这种最小模式的工作原理是8086CPU能够正常运行的基础,也是后续扩展模式的基础。
寄存器百科名片32位CPU的寄存器结构寄存器是中央处理器内的组成部分。
寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。
在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。
在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。
目录寄存器定义寄存器特点工作原理寄存器用途寄存器分类18086的寄存器指令指针IP(Instruction Pointer)1标志寄存器FR(Flag Register)1段寄存器(Segment Register)180386寄存器通用寄存器1用作内存指针的特殊寄存器1段选择器1指令指针寄存器1其他寄存器展开编辑本段寄存器定义寄存器英文名称:Register寄存器寄存器是内存阶层中的最顶端,也是系统获得操作资料的最快速途径。
寄存器通常都是以他们可以保存的位元数量来估量,举例来说,一个“8 位元寄存器”或“32 位元寄存器”。
寄存器现在都以寄存器档案的方式来实作,但是他们也可能使用单独的正反器、高速的核心内存、薄膜内存以及在数种机器上的其他方式来实作出来。
寄存器通常都用来意指由一个指令之输出或输入可以直接索引到的暂存器群组。
更适当的是称他们为“架构寄存器”。
例如,x86 指令集定义八个32 位元寄存器的集合,但一个实作x86 指令集的CPU 可以包含比八个更多的寄存器。
寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。
编辑本段寄存器特点寄存器又分为内部寄存器与外部寄存器,所谓内部寄存器,其实也是一些小的存储单元,也能存储数据。
但同存储器相比,寄存器又有自己独有的特点:①寄存器位于CPU内部,数量很少,仅十四个;②寄存器所能存储的数据不一定是8bit,有一些寄存器可以存储16bit数据,对于386/486处理器中的一些寄存器则能存储32bit数据;③每个内部寄存器都有一个名字,而没有类似存储器的地址编号。
寄存器的工作原理简介:寄存器是计算机中一种用于存储和处理数据的硬件组件。
它通常由一组二进制位组成,每一个位都可以存储一个二进制数值。
寄存器在计算机中起到了重要的作用,用于暂时存储和处理数据,支持计算机的运算和控制操作。
一、寄存器的定义和分类寄存器是计算机中的一种存储设备,用于存储和处理数据。
根据其功能和用途,寄存器可以分为以下几类:1. 通用寄存器:通用寄存器用于存储暂时数据和计算结果。
它们通常由多个二进制位组成,可以存储整数、浮点数等不同类型的数据。
2. 累加器:累加器是一种特殊的寄存器,用于存储和处理算术运算的结果。
它常用于存储加法或者减法操作的中间结果。
3. 计数器:计数器用于记录事件的发生次数。
它在计算机中广泛应用于计时、计数和控制等方面。
4. 状态寄存器:状态寄存器用于存储计算机的状态信息,例如进位标志、零标志等。
它们对于控制程序的执行和判断条件非常重要。
二、寄存器的工作原理寄存器的工作原理可以分为存储和处理两个阶段。
1. 存储阶段:在存储阶段,寄存器接收来自内存或者其他寄存器的数据,并将其存储在自身的位中。
每一个位都可以存储一个二进制数值,通过改变位的状态,寄存器可以存储不同的数据。
2. 处理阶段:在处理阶段,寄存器可以执行各种操作,如逻辑运算、算术运算和移位操作等。
这些操作可以通过改变寄存器中的位的状态来实现。
例如,两个寄存器的值可以相加,并将结果存储在另一个寄存器中。
三、寄存器的应用寄存器在计算机中有广泛的应用,下面介绍几个常见的应用场景:1. 数据存储和传输:寄存器用于存储和传输数据,可以暂时保存计算机需要处理的数据。
它们可以在不同的计算单元之间传递数据,支持计算机的运算和控制操作。
2. 程序计数器:程序计数器是一种特殊的寄存器,用于存储当前正在执行的指令的地址。
它可以指示计算机下一条要执行的指令,支持程序的顺序执行。
3. 栈指针:栈指针是一种特殊的寄存器,用于存储栈的地址。
栈是一种后进先出(LIFO)的数据结构,用于存储函数调用、局部变量和中断处理等信息。
寄存器的工作原理寄存器是计算机中的一种高速存储设备,也是计算机中最小的存储单元。
它能够快速存储和提取数据,用于暂时存储计算、操作和传输中的数据。
寄存器通常在CPU内部,可以直接被CPU访问,是计算机中最快的存储设备之一1.存储和提取数据:寄存器能够存储和提取数据。
当需要将数据存储到寄存器中时,数据会通过总线传输到寄存器内部。
同样,当需要从寄存器中提取数据时,寄存器会将数据通过总线传输到其他部件。
2.状态保持:寄存器能够在断电的情况下保持数据的状态。
这是因为寄存器是由闪存或锁存器等可靠的电子器件构成的。
断电后,寄存器内的数据仍然可以保持在存储器中,而不会丢失。
3.数据操作:寄存器能够对数据进行各种操作。
例如,寄存器可以对数据进行逻辑运算、移位操作、算术运算等。
这些操作可以通过逻辑门或运算单元实现,从而对寄存器内的数据进行处理。
4.数据传输:寄存器能够在不同部件之间传输数据。
例如,寄存器可以将数据从输入设备传输到主存储器,或者将数据从主存储器传输到输出设备。
通过寄存器实现的数据传输可以更加高效和快速。
5.控制信号:寄存器能够接收和解析控制信号,从而执行相应的操作。
例如,当CPU需要将数据从寄存器传输到运算单元进行计算时,CPU会发送相应的控制信号给寄存器,使其将数据传输到运算单元。
总之,寄存器的工作原理主要是通过电子线路、逻辑门和控制信号实现的。
寄存器能够存储和提取数据,保持数据状态以及对数据进行各种操作。
寄存器在计算机中起到了至关重要的作用,是计算机中的核心组成部分之一。
四种段寄存器的一般用途计算机中的段寄存器是一种很重要的寄存器,用来存储程序代码、数据以及堆栈等信息。
在计算机的内存管理中起着至关重要的作用。
这篇文章将介绍四种常用的段寄存器及其一般用途。
一、代码段寄存器(CS)代码段寄存器(CS)是指令地址寄存器,用来存储执行程序代码的基地址。
当CPU执行指令时,它将会从CS所指向的地址开始读取指令码,并在执行之后更新CS的值,以便继续执行下一条指令。
CS寄存器是一种非常重要的寄存器,因为它决定了CPU指令执行的起点。
在32位的x86架构计算机中,代码段寄存器是32位的。
二、数据段寄存器(DS)数据段寄存器(DS)是CPU中用来存储数据的基地址。
所有的数据引用都是基于DS来进行的,因此DS通常用来存储全局变量、数组、字符串以及其他数据类型。
数据段寄存器也是32位的,在访问数据时,CPU会自动使用DS寄存器的值来确定数据存储的地址。
三、栈段寄存器(SS)栈段寄存器(SS)是CPU中用来存储堆栈的基地址。
当CPU执行堆栈操作时,它会使用SS寄存器的值来确定当前堆栈的位置。
由于堆栈是一种特殊的数据结构,需要支持“先进后出”的原则,所以栈段寄存器也是很重要的。
在32位的x86架构计算机中,栈段寄存器也是32位的。
四、附加段寄存器(ES、FS、GS)附加段寄存器(ES、FS、GS)用来存储其他类型的数据段,通常用于存储一些特殊的变量,如复杂的数据结构、大型数组等。
这些寄存器是用来扩展内存寻址的空间,以处理一些大型数据类型。
在32位的x86架构计算机中,附加段寄存器也是32位的。
总结段寄存器是计算机中非常重要的寄存器,用于存储程序代码、数据以及堆栈等信息。
常见的段寄存器包括代码段寄存器(CS)、数据段寄存器(DS)、栈段寄存器(SS)和附加段寄存器(ES、FS、GS)。
每个寄存器都有着特定的一般用途,这些用途在计算机的内存管理中绝对是至关重要的。
只有充分理解这些寄存器的作用,才能更好地理解计算机的内部工作原理,并进行更为深入的编程和开发工作。
数码管工作原理及应用数码管是一种将数字信号转化为可视化数字显示的设备。
它通常由七段发光二极管(LED)组成,每个数码管的显示面板上有七个竖直段式的LED组成,并且有一个小圆点作为小数点。
通过对不同的LED进行点亮和熄灭,可以实现显示不同的数字和字母。
数码管工作原理是利用LED的特性。
LED是一种半导体材料,它能在逆向电压作用下发光。
一个数码管通常由7个LED(a-g)和一个小数点(dp)组成,每个LED有两个引脚,一个是正极(anode)连接到电压源,另一个是负极(cathode)连接到段寄存器。
当段寄存器输出高电平时,相应的LED点亮,显示数字或字母。
在使用数码管时,需要使用一个控制器或驱动电路来控制每个数码管的显示。
常用的驱动芯片有7447和74LS47,它们是一种集成芯片,可以方便地将数字信号转换为7段段码输入。
为了使数码管显示不同的数字和字母,需要将相应的段码输入到芯片中,从而点亮对应的LED。
数码管应用广泛,主要用于需要显示数字或字母的电子产品中。
常见的应用包括:1. 计时器和闹钟:数码管可以用于显示时间、日期和闹钟等信息。
通过控制数码管显示的数字,实现倒计时、报时等功能。
2. 电子秤:数码管可以用于显示测量到的重量。
通过控制数码管显示的数字,实现准确的重量显示。
3. 温度计:数码管可以用于显示测量到的温度值。
通过控制数码管显示的数字,实现精确的温度显示。
4. 电子仪表:数码管可以用于显示电压、电流、功率等测量值。
通过控制数码管显示的数字,实现准确的数据显示。
5. 跑马灯:数码管可以用于显示文字或图案。
通过控制数码管显示的段码,实现不同的图案效果。
6. 数字钟表:数码管可以用于显示数字时钟,包括小时、分钟和秒钟。
通过控制数码管显示的数字,实现准确的时间显示。
7. 工控系统:数码管可以用于显示各种工业参数,如压力、流量、速度等。
通过控制数码管显示的数字,实现对工业参数的监测和控制。
总之,数码管是一种功能强大、使用简便的数字显示设备。
寄存器的工作原理
寄存器是计算机中一种重要的数据存储单元,它能够暂时存储和传输数据,是CPU的重要组成部分。
寄存器的工作原理包括存储数据、传输数据和控制数据三
个方面。
首先,寄存器的工作原理之一是存储数据。
寄存器内部采用触发器等电子元件
来存储数据,这些元件能够在电平变化的作用下,保持一定的状态。
在计算机中,寄存器可以存储各种数据,如整数、浮点数、字符等,这些数据可以被CPU直接
读取和处理。
其次,寄存器的工作原理还包括传输数据。
寄存器能够将存储的数据传输到其
他部件,如ALU(算术逻辑单元)、存储器等。
在数据传输过程中,寄存器需要
根据指令控制数据的读取和输出,确保数据能够准确传输到指定的位置。
最后,寄存器的工作原理还涉及控制数据。
寄存器能够接收来自CPU的控制
信号,根据信号的指示进行数据的存储、传输和处理。
这些控制信号包括时钟信号、使能信号、写入信号等,通过这些信号的控制,寄存器能够按照指令完成数据的存储和传输操作。
综上所述,寄存器的工作原理主要包括存储数据、传输数据和控制数据三个方面。
它在计算机中起着至关重要的作用,能够提高数据的传输效率和处理速度,是计算机中不可或缺的部件之一。
通过对寄存器工作原理的深入了解,可以更好地理解计算机内部数据的存储和传输过程,为计算机的优化和性能提升提供重要的参考依据。
寄存器工作原理寄存器是计算机中一种非常重要的存储器件,它用于暂时存储指令、数据和地址等信息,是计算机中运算和控制的重要组成部分。
寄存器的工作原理是如何实现的呢?接下来我们将详细介绍寄存器的工作原理。
首先,我们来了解一下寄存器的结构。
寄存器通常由若干个触发器组成,每个触发器可以存储一个位(0或1)。
寄存器的位数取决于计算机的字长,比如一个32位的寄存器可以存储32位的信息。
在计算机中,常见的寄存器包括通用寄存器、特殊寄存器、程序计数器、指令寄存器等。
接着,我们来了解寄存器的工作原理。
当计算机执行指令时,需要将指令、数据和地址等信息暂时存储在寄存器中,以便进行运算和控制。
寄存器的工作原理可以分为存储和传输两个过程。
在存储过程中,计算机将需要暂时存储的信息通过总线传输到寄存器中,然后触发器将信息存储起来。
这样,计算机就可以在需要时随时读取寄存器中的信息进行运算和控制。
在传输过程中,计算机需要将寄存器中的信息传输到其他部件,同样是通过总线进行传输,然后其他部件就可以读取寄存器中的信息进行相应的操作。
除了存储和传输过程,寄存器还可以进行一些特殊的操作,比如清零、置位、移位等。
这些操作可以通过控制信号来实现,从而对寄存器中的信息进行处理。
总的来说,寄存器的工作原理是通过存储和传输过程来实现的,它可以暂时存储指令、数据和地址等信息,并在需要时进行传输和特殊操作,是计算机中非常重要的存储器件。
在实际应用中,不同类型的寄存器有不同的工作原理和功能,比如通用寄存器用于存储运算中的临时数据,特殊寄存器用于存储特定的信息,程序计数器用于存储下一条要执行的指令地址等。
不同类型的寄存器相互配合,共同完成计算机的运算和控制任务。
综上所述,寄存器作为计算机中重要的存储器件,其工作原理是通过存储和传输过程来实现的,它可以暂时存储指令、数据和地址等信息,并在需要时进行传输和特殊操作,是计算机中不可或缺的一部分。
CPU的工作原理一、概述CPU(中央处理器)是一台计算机的主要组成部分,它承担着执行计算机指令和控制计算机运行的任务。
CPU的工作原理可以简单地概括为取指、译码、执行和写回这四个阶段。
下面将从这四个方面详细介绍CPU的工作原理。
二、取指在取指阶段,CPU从内存中取出下一条指令。
取指是整个工作原理的第一步,它决定了后续的操作。
具体执行过程如下: 1. CPU通过总线将PC(程序计数器)中的地址发送给内存。
2. 内存将该地址上存储的指令发送给CPU。
3. CPU将指令存储在指令寄存器IR中。
三、译码在译码阶段,CPU对取指阶段取得的指令进行识别和解码。
译码的目的是将指令翻译成对应的操作。
具体执行过程如下: 1. 指令寄存器IR中存储的二进制指令被CPU识别。
2. CPU根据指令的不同类型和格式,将指令解码成具体的操作。
四、执行在执行阶段,CPU根据译码阶段解码得到的操作码进行相应的操作。
执行阶段涉及到ALU(算术逻辑单元)、寄存器和各种电路。
具体执行过程如下: 1. CPU根据操作码判断指令的类型,如算术运算、逻辑运算、分支等。
2. CPU根据指令类型执行相应的操作,可能需要使用ALU进行计算,将结果存储在寄存器或内存中。
五、写回在写回阶段,CPU将执行阶段生成的结果写回内存或者寄存器中。
具体执行过程如下: 1. CPU将执行阶段得到的结果保存在通用寄存器中。
2. 如果需要,CPU将结果写回内存中。
六、流水线技术上述的工作原理中,每个阶段的工作是依次进行的,即一个任务完成后才能进行下一个任务。
为了提高CPU的效率,引入了流水线技术。
流水线技术将CPU的工作划分成若干个独立的任务,在不同的阶段并行执行,以达到同时处理多个指令的目的。
流水线技术的核心思想是时间重叠和任务重合。
通过流水线技术,CPU的吞吐量可以得到显著提高。
七、指令级并行除了流水线技术外,指令级并行也是提高CPU效率的一种重要手段。
segment 寄存器的真实结构返 回Segment Register 也可以称作 Selector Register, 它在整个 x86/x64 体系 下实在太重要了。
这里讲解的是 user segment 寄存器,包括: Code 段寄存器:CS Data 段寄存器:ES, SS, DS, FS 以及 GS这些段寄存器由 user segment descriptor 装载进去。
我们很有必要先去了解 segment 寄存器的真实结构:上图是我画的 Segment Registers 内部结构图,这分为 4 个部分: Selector Attribute Limit Base图中已经标出灰色部分是 processor 内部使用的,仅仅只有 Selector 部 分可以由用户使用 但是在 64 位模式下,它很特别:Base 是 64 位的, 但是对于 CS, ES, DS 和 SS 来说 Base 是无效的, 而对于 FS 和 GS 来说,它们是有效的,64 位的 Base address 可 以由用户设定 Attribute 只有少数几个属性位是有效的 Limit 对于所有的 segment registers 来说都是无效的。
注意上面所说的是针对在 64 位模式下。
segment registers 结构体现了 protected mode 下的几大元素: selector descriptor descriptor table1. 提供基址Segment registers 的 base 提供基址,无论是 real mode 下还是 protected mode 下,其地址的计算方法都是:base + offset 如果有下面代码: jmp next next: 目标代码地址在 CS.base + eip2. Segment Registers 的 Attribute 部分Segment Registers 的 Attribute 是描述段的属性,它在装载 segment descriptor 的时候加载进去设置的,它包括:G 属性:segment limit 的粒度,G = 1 是 4K bytes 粒度, G = 0 是 1 byte 粒度D/B 属性:有两重意义:oD 属性: 对于 code segment 来说代表 default operands, D= 1 时 32 位 default operands,D = 0 时 16 位 default operands B 属性:对于 stack segment 来说代表 default stack size,B = 1 时 32 位 stack size, B = 0 时 16 位 stack sizeo P 属性:present 位,表示是否加载到内存中 DPL 属性:Privilege-Level(权限级别)范围从 0 - 3 级 S 属性:S = 0 是系统数据 segment, S = 1 用户 segment Type 属性:代表 segment 类别在 real mode 下 segment registers 的 Attribute 一般情况下是初始状态。
通俗易懂CPU工作原理
1.取值:CPU从内存中取出受控程序(指令段)中的指令,并将指令中需要的数据(变量和常量)取出,放在寄存器中。
2. 计算:根据取出的指令和数据,CPU进行一定的运算,并将结果放在寄存器或者内存中。
3. 存储:把计算结果存储在内存中,以供以后使用。
二、CPU功能模块
CPU由以下几个功能模块组成:
1. 指令处理模块:负责从内存中取出指令段中的指令,并将指令和数据分离。
2. 寻址模块:负责根据指令和数据中的索引,找出内存中的数据,将其取出。
3. 操作模块:负责对取出的数据进行各种运算,包括算术运算、逻辑运算、比较运算等。
4. 内存控制模块:负责将计算结果存入内存,或者从内存中取出数据。
5. 内部寄存器:负责接收取出的指令和数据,以及计算结果。
6. 控制器:负责控制上述各个模块的运行,根据指令按照正确的步骤进行运算。
三、CPU工作流程
1. 内部寄存器中存放的程序地址(Program Counter)控制CPU 从内存中取出指令。
2. 指令处理模块负责将指令分离,从而确定指令的操作类型,源地址和目标地址。
3. 寻址模块从源地址、目标地址、算术逻辑运算结果等中取出数据。
4. 操作模块根据指令进行算术、逻辑运算,得出结果。
5. 内存控制模块负责将计算结果存入内存,并将程序地址指向下一条指令。
6. 控制器负责上述各个模块的整个运行流程。
一、段寄存器的产生
段寄存器的产生源于Intel 8086 CPU体系结构中数据总线与地址总线的宽度不一致。
数据总线的宽度,也即是ALU(算数逻辑单元)的宽度,平常说一个CPU是“16位”或者“32位”指的就是这个。
8086CPU的数据总线是16位。
地址总线的宽度不一定要与ALU的宽度相同。
因为ALU的宽度是固定的,它受限于当时的工艺水平,当时只能制造出16位的ALU;但地址总线不一样,它可以设计得更宽。
地址总线的宽度如果与ALU相同当然是不错的办法,这样CPU的结构比较均衡,寻址可以在单个指令周期内完成,效率最高;而且从软件的解决来看,一个变量地址的长度可以用整型或者长整型来表示会比较方便。
但是,地址总线的宽度还要受制于需求,因为地址总线的宽度决定了系统可寻址的范围,即可以支持多少内存。
如果地址总线太窄的话,可寻址范围会很小。
如果地址总线设计为16位的话,可寻址空间是2^16=64KB,这在当时被认为是不够的;Intel最终决定要让8086的地址空间为1M,也就是20位地址总线。
地址总线宽度大于数据总线会带来一些麻烦,ALU无法在单个指令周期里完成对地址数据的运算。
有一些容易想到的可行的办法,比如定义一个新的寄存器专门用于存放地址的高4位,但这样增加了计算的复杂性,程序员要增加成倍的汇编代码来操作地址数据而且无法保持兼容性。
Intel想到了一个折中的办法:把内存分段,并设计了4个段寄存器,CS,DS,ES和SS,分别用于指令、数据、其它和堆栈。
把内存分为很多段,每一段有一个段基址,当然段基址也是一个20位的内存地址。
不过段寄存器仍然是16位的,它的内容代表了段基址的高16位,这个16位的地址后面再加上4个0就构成20位的段基址。
而原来的16位地址只是段内的偏移量。
这样,一个完整的物理内存地址就由两部分组成,高16位的段基址和低16位的段内偏移量,当然它们有12位是重叠的,它们两部分相加在一起,才构成完整的物理地址。
Base b15 ~ b12 b11 ~ b0
Offset o15 ~ o4 o3 ~ o0
Address a19 ~ a0
这种寻址模式也就是“实地址模式”。
在8086中,段寄存器还只是一个单纯的16位寄存器,而且操作寄存器的指令也不是特权指令。
通过设置段寄存器和段内偏移,程序就可以访问整个
物理内存,无安全性可言。
总之一句话,段寄存器的设计是一个权宜之计,现在看来可以说是一个临时性的解决方案,设计它的目的是为了把地址空间从64KB扩展为1MB,仅此而已。
但是它的加入却为日后Intel 系列芯片的发展带来诸多不便,也为理解i386体系带来困扰。
二、实现保护模式
到了80386问世的时候,工艺已经有了很大的进步,386的ALU有已经从16位跃升为32位,也就是说,38086是32位的CPU,而且结构也已经比较成熟,接下来的80486一直到Pentium 系列虽然速度提高了几个数量级,但并没有质的变化,所以被统称为i386结构。
对于32位的CPU来说,只要地址总线宽度与数据总线宽度相同,就可以寻址2^32=4GB的内存空间,这已经足够用,已经不再需要段寄存器来帮助扩展。
但这时Intel已经无法把段寄存器从产品中去掉,因为新的CPU也是产品系列中的一员,根据兼容性的需要,段寄存器必须保留下来。
这时,技术的发展需求Intel在其CPU中实现“保护模式”,用户程序的可访问内存范围必须受到限制,不能再任意地访问内存所有地址。
Intel决定利用段寄存器来实现他们的保护模式,把保护模式建立在段寄存器的基础之上。
对于段的描述不再只是一个20位的起始地址,而是全新地定义了“段描述项”。
段描述项的结构如下:
B31 ~ B24 DES1 (4 bit) L19 ~ L16
DES2 (8 bit) B23 ~ B16
B15 ~ B0
L15 ~ L0
每一行是两个字节,总共8个字节,64位。
DES1和DES2分别是一些描述信息,用于描述本段是数据段还是代码段,以及读写权限等等。
B0~B31是段的基地址,L0~L19是段的长度。
注意,规定段的长度是非常必要的,如果不限定段长度,“保护”就无从谈起,用户程序的访问至少不能超过段的范围。
另外,段长度只有20位,所代表的最大可能长度为2^20=1M,而整个地址空间是2^32=4GB,这样来看,段的长度是不是太短了?其实,在DES1中,有一位用于表示段长度的单位,当它被置1时(一般情况下都是如此),表示长度单位为4KB,这样,一个段的最大可能尺寸就成了1M*4K=4G,与地址空间相稳合。
4KB也正是一个内存页的大小,说明段的大小也是向页对齐的。
另外,注意到一个有趣的现象吗?段描述项的结构被设计得不连续,不论是段基地址还是段
长度,都被分成了两节表示。
这样的设计与80286的过渡有关。
上面的段描述项结构去掉第一行后剩下的三行正是286的段描述项。
286被设计为24位地址总线,所以段基址是24位,相应地段长是16位。
在386的地址总线扩展为32位之后,还必须兼容286产品的设计,所以只好在段描述项上“打补丁”。
在386中,段寄存器还是16位,那么16位的段寄存器如何存放得下64位的段描述项?段描述项不再由段寄存器直接持有。
段描述项存放在内存里,系统中可以有很多个段描述项,这些项连续存放,共同构成一张表,16位的段寄存器里只是含有这张表里的一个索引,但也并不仅是一个简单的序号,而是存储了一种数据结构,这种结构的定义如下:
index (b15 ~ b3) TI (b2) RPL (b1 ~ b0)
其中index是段描述表的索引,它指向其中的某一个段描述项。
RPL表示权限,00最高,11最低。
还有一个关键的问题,内存中的段描述表的起始地址在哪里?显然光有索引是有不够的。
为此,Intel又设计了两个新的寄存器:GDTR(global descriptor table register)和LDTR(local descriptor table register),分别用来存储段描述表的地址。
段寄存器中的TI位正是用于指示使用GDTR还是LDTR。
当用户程序要求访问内存时,CPU根据指令的性质确定使用哪个段寄存器,转移指令中的地址在代码段,取数指令中的地址在数据段;根据段寄存器中的索引值,找到段描述项,取得段基址;指令中的地址是段内偏移,与段长比较,确保没有越界;检查权限;把段基址和偏移相加,构成物理地址,取得数据。
新的设计中处处有权限与范围的限制,用户程序只能访问被授权的内存空间,从而实现了保护机制。
就这样,在段寄存器的基础上,Intel实现了自己的“保护模式”。
三、与页式存管并存
现代操作系统的发展要求CPU支持页式存储管理。
页式存管本身是与段式存管分立的,两者没有什么关系。
但对于Intel来说,同样是由于“段寄存器”这个历史的原因,它必须把页式存管建立在段式存管的基础之上,尽管这从设计的角度来说这是没有道理,也根本没有必要的。
在段式存管中,由程序发出的变量地址经映射(段基址+段内偏移)之后,得到的32位地址就是一个物理地址,是可以直接放到地址总线是去取数的。
在页式存管中,过程也是相似的,由程序发出的变量地址并不是实际的物理地址,而是一个三层的索引结构,这个地址经过一系统的映射之后才可以得到物理地址。
现在对于Intel CPU来说,以上两个映射过程就要先后各做一次。
由程序发出的变量地址称为“逻辑地址”,先经过段式映射成为“线性地址”,线性地址再做为页式映射的输入,最后得到“物理地址”。
Linux内核实现了页式存储管理,而且并没有因为两层存管的映射而变得更复杂。
Linux更关注页式内存管理,对于段式映射,采用了特殊的方式把它简化。
让每个段寄存器都指向同一个段描述项,即只设了一个段,而这个段的基地址为0,段长度设为最大值4G,这个段就与整个物理内存相重合,逻辑地址经映射之后就与线性地址相同,从而把段式存管变成“透明”的。
这,就是Intel处理器中“段寄存器”的故事。