段寄存器的工作原理
寄存器的工作原理

寄存器的工作原理寄存器是计算机中一种重要的存储设备,用于暂时存储和传输数据。
它通常由一组存储单元组成,每一个存储单元能够存储一个固定大小的数据。
寄存器在计算机的各个部件之间起到了桥梁的作用,可以高效地传递数据。
寄存器的工作原理可以分为存储和传输两个阶段。
1. 存储阶段:在存储阶段,寄存器接收来自处理器或者其他部件的数据,并将其存储在自身的存储单元中。
每一个存储单元由若干个二进制位组成,可以存储不同长度的数据,如8位、16位、32位或者64位。
存储单元之间通过地址进行区分,每一个存储单元都有一个惟一的地址。
2. 传输阶段:在传输阶段,寄存器将存储的数据传递给其他部件,如算术逻辑单元(ALU)、控制单元或者主存储器。
传输可以是单向的,也可以是双向的。
在单向传输中,数据只能从寄存器传输到其他部件;在双向传输中,数据可以在寄存器和其他部件之间进行双向传输。
寄存器的传输可以通过多种方式实现,常见的有并行传输和串行传输。
1. 并行传输:并行传输是指将整个寄存器的数据同时传输给其他部件。
这种传输方式速度快,但需要更多的传输路线和硬件资源。
并行传输适合于数据量较大的情况,如图象处理和高性能计算。
2. 串行传输:串行传输是指将寄存器的数据逐位地传输给其他部件。
这种传输方式速度较慢,但可以节省传输路线和硬件资源。
串行传输适合于数据量较小的情况,如通信和控制系统。
寄存器还可以根据其功能进行分类,常见的寄存器包括通用寄存器、程序计数器、指令寄存器、状态寄存器等。
1. 通用寄存器:通用寄存器用于存储暂时数据,供处理器进行运算和操作。
它们可以存储不同类型的数据,如整数、浮点数、字符等。
通用寄存器的数量和大小根据计算机的体系结构和指令集架构而定。
2. 程序计数器:程序计数器用于存储下一条要执行的指令的地址。
它在程序执行过程中不断更新,指示处理器应该执行的下一条指令。
程序计数器在分支和跳转指令中起到了关键作用,确保程序按照预期的顺序执行。
Cache的工作原理

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寄存器的功能和说明

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。
中断系统 计算机原理

统板上RAM奇偶错,I/O通道奇偶错和8087异常中断。
中断屏蔽寄存器
(IMR)
计算机原理讲义
8259内部结构说明
※ 内部结构说明 IRR — 中断请求寄存器,保存 8个输入端IR0~IR7的中断申请状态,输入可 高电平有效,也可上升沿有效; ISR — 中断服务寄存器,保存CPU正在处理的中断请求; IMR — 中断屏蔽寄存器,对中断申请进行屏蔽控制;
操作命令寄存器组: OCW1~OCW3 INT 中断申请输出,高电平有效,可连接8086 INTR引脚 /INTA 中断响应输入,接收8086发出的中断响应信号,有效时8259应输 出中断类型码
计算机原理讲义
※ 内部结构说明
D7~D0 双向三态数据线,传送数据 /RD 读信号,低电平有效
CS WR RD /CS 片选信号,低有效,给8259分配地 D7 D6 址 D5 D4 A0 用于选择8259内部不同的寄存器。 D3 D2 CAS2~CAS0 级联信号线,当8259为主 D1 D0 片时为输出,从片时为输入 CAS0 CAS1 SP/EN 在非缓冲工作方式时,用作输入, GND
计算机原理讲义
8086 中断结构
二. 软件中断
1. 除法溢出中断( DIV和IDIV)(INT 0)
若除数为0或商超过寄存器所能表达的范围,则产生类型为0的软件中断
2. 单步中断 (INT 1) 若TF=1,则CPU每执行完一条指令后便产生类型码为1的软件中断 3. 执行 INT 指令引起的中断 (INT n) 执行INT n指令则会引起中断类型码为n的软件中断 4. 执行 INTO 指令引起的中断(INT 4) 若OF=1,则指令INTO引起中断类型码为4的软件中断
寄存器CPU工作原理

考虑:CPU如何产生20位的物理地址呢?
整理课件
3
16位结构的CPU
8位机:8080,8085 16位机:8086 32位机:80386,80486 N位结构的含义:
运算器一次最多可以处理N位数据; 寄存器的最大宽度为N位 寄存器和运算器之间的通路是N位
IP:指令指针寄存器 CS和IP就指示了CPU当前要读取指令的地
址 设8086机中CS中内容为M,IP中内容为N,
则8086CPU将从内存M*16+N单元开始, 读取一条指令来执行 我们又可以表示成CS:IP
整理课件
12
8086CPU的工作过程
初始状态
整理课件
13
8086CPU的工作过程(续)
了解CPU的组成; 掌握各种寄存器,尤其是通用寄存器; 理解字在寄存器中的存储; 掌握几条简单的汇编指令; 掌握8086CPU的物理地址的形成; 了解段寄存器,掌握CS和IP的合用; 掌握jmp指令; 熟悉Debug调试工具;
整理课件
29
作业
检测点2.2,2.3
整理课件
30
Debug命令
整理课件
31
D命令——Display
使用D命令查看内存中的内容
格式1:d 段地址:偏移地址
• 功能:列出从指定内存单元开始的128个内存单元 的内容
格式2:d 段地址:起始偏址 结尾偏址
使用多种不同的段地址和偏移地址来查看 同一个物理地址的内容
整理课件
32
E命令——Enter
改写内存中的内容 格式:e 起始地址 数据 数据 数据……… 或者可以用E命令提问的方式来逐个修改从
(07)80486的三种工作方式及转换2.2.3

2.2.3 80486的三种工作方式及转换
三种工作方式:
1.实地址方式 Real Address Mode 2.保护虚地址方式 Protected Virtual Mode 也叫保护方式或本性方式 3.虚拟8086方式 Virtual 8086 Mode(V86)
386,486均有这三种方式,何以要采用三种工作方式?
第4页
电气工程学院
2)实地址方式下,各个段的特权都是0(最高级); 在V86下,都是3级(最低级)。
三种方式的相互转换
实地址方式
复位 信号
保护方式
LMSW指令,修改CR0的PE 复位信号或修改CR0
Real
Protected Virtual
IRETD指令 复位信号 或任务转换
中断
Virtual8086
物理地址=描述符提供的段基址+有效地址(偏移地址)
段寄存器提供选择符——寻找描述符的索引值
第3页
电气工程学院
4)提供保护: (1)对存储器的保护,它要求通过描述符访问存储器 (2)给每一个任务分配不同的虚拟空间,使任务之间完全隔离, 实现任务之间的保护。 (3)任务内的保护机制,保护操作系统存储段及其专用处理寄存器 不被应用程序所破坏
3.虚拟8086方式
在保护方式下能够与8086兼容的一种方式 一种新的工作方式。它支持存储器管理,保护及多任务环 境中执行8086程序。CPU与保护虚拟地址方式下的工作原理相 同,但程序中指定的逻辑地址按8086方式解释。 与实地址的区别: 1)实地址是整个CPU的工作方式,CPU只执行8086程序; 而V86还可以执行286、386/486程序规定的其它任务。
2)通过修改控制寄存器CR0中的控制位(PE)使CPU从 实地址方式 转换到保护方式(或反方向操作)
8086cpu最小模式工作原理

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能够正常运行的基础,也是后续扩展模式的基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、段寄存器的产生
段寄存器的产生源于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处理器中“段寄存器”的故事。