《ISASystemArchitecture》读书笔记
2022-07-12 09:36:40 0 举报
AI智能生成
读书笔记,讲述ISA系统架构,以及8086、80286、80386发展,处理器寻址,实模式 保护模式
作者其他创作
大纲/内容
系统内核:提供微处理器与系统其它部分所必需的基本信号、时钟和协议
ISA的概念:ISA槽的信号分为3种:地址/控制/数据总线组ISA标准步进包含扩展连接器的结构,还必须为中断处理,直接内存访问,定时钟,错误处理,键盘接口和配置RAM提供支持逻辑
0 概述
告诉微处理器执行以下三种操作之一从外部设备读取数据写数据到外部设备执行不包括从外部读取或写入的内部操作
①指令的作用
在实模式下,微处理器总是在CS寄存器内容F000h的末尾附加一个额外的Oh,从而产生一个代码段的起始地址F0000h。然后将IP寄存器中包含的地址FFF0h偏移部分添加到段的起始地址,生成的内存地址FFFFOh
·上电后第一个读取数据的地址。从该地址获取到第一条指令后,cpu便完全由程序告诉它做什么
②第一条指令
当前指令未指定下一条指令的内存地址时微处理器默认按顺序从内存的下一个地址获取下一条指令
当前指令指定了下一条指令的内存地址时处理器,处理器便跳转到改地址获取下一条指令
③获取线性地址空间代码
除特殊情况,一般:从内存中读取下一条指令当前执行的指令指示MCU从外设读数据当前执行的指令指示MCU向外设写数据
④、MCU与外部设备通信的条件
1、微处理器的作用| 从内存读取和执行指令
指令和数据
①MCU从内存读到的数据类型
MCU只能将数据写入内存,不能写指令到内存指令由DMA控制器(直接存储器)写入到内存
②MCU写入内存的数据类型
2、内存的使用
作用:识别/找要通信外部设备,每个地址代表一个外部设备
①地址总线
作用:传输数据,半双工,可读可写,但同一时刻只能做一个操作
②数据总线
作用:识别事务类型,读或者写同步快的处理器和慢的设备,正在读或者写
③控制总线
3、总线
第一章 微处理器通信简介
MCU内部总线单元是一个状态机状态机用来定义每个状态持续时间的时钟
1、介绍
时钟输入由晶振提供,是一个固定频率的电信号。80286和80386将时钟输入的频率除以2来作为b style=\
2、系统时钟-节拍器
处理器频率(PCLK)=晶振频率/2总线周期=1/处理器频率(PCLK)
MCU读/写时,启用一系列总线周期,一个总线周期内:地址总线放设备地址,控制总线指示任务类型(读/写),数据总线放置数据
x86MCU包含一个总线单元子系统,负责运行总线周期任务
[Address time] 写地址的总线周期在地址时间内,持续一个PCLK周期,微处理器将地址放在地址总线上,并将控制数据(控制事务类型)放在控制总线上。
[Data Time] 传输数据的总线周期 处理器根据输入引脚READY#的状态来判断数据是否传完,是否该读数据了
[Wait State]等待状态处理器速度比外设快,如果外设这边没处理完,mcu会延长总线pclk周期去等待外设处理结束
0等待状态总线周期是80286、80386、80486和Pentium微处理器能够执行的最快的总线周期类型最快的x86总线周期需要两个“滴答”(周期)的PCLK
3、微处理器总线周期状态机
第二章 总线周期介绍
0 祖先: Intel 8080微处理器是整个x86微处理器家族的祖先。这个家族的许多特征都源于这个共同的祖先。
【8080】--有16根地址线,A[15::0],最大可寻址2^16=64k的地址空间so,接在上的内存不能大于64k
【8085】16根地址线,可寻址64k,加入一个新的引脚 IO/M#(将8228的功能整合到8085中font color=\"#c41230\
40pin
【8086和8088mcu】有20根地址线,可寻址1M内存空间和8085一样,也用一个引脚来指示内存或IO,但定义和8085不同,从IO/M#变成了M/IO#I/O内存地址从256增加到了64k,I/O的地址划分在内存地址的前64K位置(0000H-FFFFH)
80286图 72pin
【80286和386SX】有24根地址线,可访问16M内存I/O空间仍为64K
80386图
【386DX、486及奔腾】有32根地址线,可防汛4G内存空间I/O空间仍为64K
1、IO内存和IO地址空间的演化
将I/O映射到内存中,为防止程序与映射的I/O地址冲突通常在内存地址高地址范围内映射I/O地址
2、内存映射I/O
1.命令端口,程序员向IO设备传命令的端口
2.状态端口,查看I/O设备的当前状态。比如打印机是否有纸
3.数据端口,作为MCU与I/O互传数据的端口
I/O分类
3、I/O设备
第三章 寻址I/O和内存
每个能和MCU读写的设备都有一个地址解码器的逻辑块,当地址解码器检测到其定义范围的地址时,解码器会关联该设备
MCU能访问的内存或I/O地址是映射地址,不是内存或IO设备本身。MCU定义了设备在映射地址的哪个地方
1、地址解码器的概念
比如MCU是医院医生,叫一个号,进来了两个人,他们同时给医生讲自己的病情,最好的情况:医生听不清他们谁说的什么,最坏的情况,两个人打起来,打死一个。也就是会导致设备损坏。
系统中地址解码器的地址范围不能相同,不然会导致数据冲突。
解决方法,ISA系统中,通过在卡上配置开关or跳线帽,用户使卡检测不同的地址范围去解决冲突
2、数据总线争用(地址冲突)
因此,ROM地址解码器必须检测A[19:16]这四位,而E和F只有A16位有区别,只需要检测A16是1还是0,便能确定是选择ROM还是可选ROM
硬件设计上,通过非门和与非门来判断 BootRom的片选:CSF#=/(A16·A19-17) 来选中OptionRom的片选:CSE#=/(/A16·A19-17)A19-17必须全为1,如果其中有0,则两个ROM都不会查看A[15:0]的地址信息
例子1:PC和PC/XT ROM地址解码
138译码器
例子2:系统板I/O地址解码器
地址解码器检查MCU正输出的地址的高位部分,判断地址是不是在自己管辖范围内,如果是,则解码器的片选设备区检查地位,确定MCU寻址的具体位置。从高位开始判断,如果不同,则判断低位没有意义。
3、地址解码器工作原理
两个状态机的例子,洗碗机的经典例子
4、ISA I/O解码器
第四章 地址解码逻辑
【80286mcu由总线单元(BU)、指令单元(IU)、执行单元(EU)、地址单元(AU)组成】指令单位-在对指令进行解码,然后传递给执行单元执行。执行单元-处理指令的实际执行。地址单元-当微处理器必须寻址一个存储器位置时,地址单元形成存储器地址,在总线周期期间被总线单元驱动到地址总线上总线单元-处理与微处理器芯片外部世界的通信(通过执行总线周期)。
组成:处理器由多个功能单元组成,它们各司其职
指令单元(IU):
1. 通用寄存器AX/BX/CX/DX可存16位的信息,还可单独引用上半部/下半部的8位寄存器font color=\"#16884a\
状态和控制寄存器由三个寄存器组成
橙色为状态标志位,紫色为控制标志位,最后为系统标志位
标志寄存器有16位,可分为三组:1.状态标志位。这些位反映了先前执行指令的结果2.控制标志位。设置或清除这些位,程序员可以修改mcu的某些操作3.系统标志字段。这三个位与保护模式操作有关。与本书无关
MSW:机器状态字寄存器有16位,但只有低4位被使用当RESET持续时,FFF0h被强制写入MSW,机器运行在实模式(后面会讲实模式)
2. 状态控制寄存器(标志和机器状态字(Word)寄存器)
3. BP(基数指针寄存器)常用于形成内存地址。 (解释说明,见备注)BP寄存器通常用于访问堆栈,而不会影响SP寄存器的内容。
MOV SI,XXXX #SI是源起始地址MOV DI,YYYY #DI是目的起始地址MOV CX,ZZZZ #CX是要移动的字节数REP MOVSB #重复操作,直至移动完成
4. 索引寄存器SI:源索引寄存器 DI:目的索引器常用于操作字符串,对一串地址执行操作,典型例子就是:move string操作程序员想执行一系列内存读写操作将数据从内存的一个区域转移到另一区域代码如下:
微处理器可处理两类信息:指令和数据【指令】--总是从内存获取,然后放入指令预取队列,解码后被发送到IU的寄存器执行【数据】--要处理的数据直接直接进入EU的寄存器【寄存器】--可看作是mcu里的存储位置,有只读、只写和可读可写寄存器三种。 (EU内寄存器的作用见备注)
执行单元(EU):
定义:mcu读/写内存位置时,AU用于形成地址,在总线周期期间被放在地址总线上。
80286有四个段寄存器:CS/DS/SS/ES段寄存器的作用是指向包含特定类型信息的内存区域的起始地址。
80286源于源于当时流程的结构化编程的思想即:一个特定区域存储程序(段)一个区域存放运行中的数据一个内存的暂存区域又称为栈一个额外的数据段
1.段寄存器
每个段寄存器中的地址指向内存中段的实际起始地址,段寄存器只有16位,so理论上4个段寄存器只能访问64K的空间但实际上,段寄存器中的地址是四个高阶16进制数字,最低有效位是虚数,段寄存器中放置1000h,是指向从地址10000开始的内存段
总之,段寄存器用于告诉微处理器内存中代码、数据、堆栈和额外段的起始地址。供程序员使用
2. 段寄存器在实模式下的使用(p63-66 一句话总结↓)font color=\"#f15a23\
font color=\"#f15a23\
far jump 跳转到不同代码段中某个位置的JUMP会将新值加载到CS(已加载新代码段的起始地址)和IP中因为要跳到不同的代码段,所以称为FAR IUMP
3. CS 代码段和IP指针寄存器 (指令常被称为code)
DS寄存器指向存储与CS寄存器指向的程序相关的数据的存储器区域不能直接对DS给值,必须用通用寄存器传MOV指令若未指定哪个段,则默认为DS段[ ]内的偏移地址不能大于FFFF
4. DS 数据段寄存器
使用方式和DS一样,但有微小区别 [ ]前的ES: 称为段覆盖,用于高速微处理器,从ES寄存器提供地址的段部分
5. ES 额外段寄存器
POP --出栈POP AX处理器从8FFFD开始读2Byte,存入到AX,然后SP增加2
6. font color=\"#f15a23\
Litte-Endian 低位优先顺序规则 最低有效字节必须与最低内存地址相关联(适用于I/O访问和内存)
如果代码依旧如上如上:AH的12存在内存的00200 地址AL的34存在内存的000201 地址
BIG-Endian 大端字节排序规则 最高有效字节必须与最低地址相关联(大多使用在非X86的计算机)
6. 大/小端排序规则
8086只有20根地址,如果这么操作其无法像80286那样访问扩展地址但是是会产生地址回绕或段回绕( 段的地址空间从最高物理地址到最低物理地址回绕)从而可以访问地地址上的数据,比如中断表或者BIOS空间(为了使286以上处理器兼容这些代码,就必须截断来模拟这20根地址)
7. 扩展内存
地址单元(AU):
定义:当80286mcu必须与外设通信时,总线单元使用地址/数据/控制总线执行所需的总线周期。 总线单元由以下子单元组成:
当微处理器在地址总线上放置一个地址时,地址被锁定到(由)总线单元的内部地址锁存器。然后,地址驱动程序将锁定的地址驱动到地址总线上。
1. 地址锁存器和驱动器
2. 指令预取器和6字节预取队列
这种总线单元逻辑允许微处理器与数字协处理器通信(如果它被安装)。
3. 处理器扩展接口
它是总线单元的状态机,根据请求执行总线周期:指令预取器发出读内存的总线请求EU发出的读/写内存或IO读/写总线请求相应中断请求
4. 总线控制逻辑
5. 数据收发器
总线单元(BU)
1、80286功能单元
【组成】25根信号线组成。24根地址线:A[23::0] 和BHE# (Bus High Enable)
地址总线
技术上说:80286有16根数数据总线准确地说:80286数据总线由2个8位DB构成数据传输由3个基本规则来组织
1. 基于x86架构的处理器,每个memory或I/O存储单元存储1个字节的信息基于80286的系统中,每个存储单元包含1个字(2 个字节)的信息
2. 在每个A0为0的时候,地址是偶数A0为1的时候,地址是奇数
3. 80286读写一个偶数地址,数据被放在低数据路径上D[7:0]读写一个奇数地址,数据被放在高数据路径[15:8]
【三条规则】适用于80286/80386SX
数据总线
控制总线由除地址总线和数据总线之外的所有80286信号线组成。CBus信号线可分为以下子类:
总线周期定义线BU从外部位置读写数据时会运行一个总线周期,总线cycle期间通过在总线周期定义线上放置适当的模式来指定总线周期的类型
1. Bus Cycle Definition lines
总线掌握线 p90-94
2.Bus Mastering lines
允许慢速访问设备延长mcu总线周期,以匹配自己的慢速设备
3. Ready Line
80286有2个输入,由外部逻辑来中断cpu的程序执行,分别是INTR&NMI
INTR:可屏蔽中断请求输入 程序员不想某段程序的中断被响应,可以以CLI作为前缀清除中断启用,结束后,应执行STI,重新启用外部识别
NMI:不可屏蔽中断请求用于外部逻辑警告MCU检测到一个软/硬件故障
4. Interrupte Line
处理器扩展是数字协处理器的另一个名称。这四条信号线是用来连接数字协处理器和微处理器的
处理器扩展请求(PEREQ)是数字协处理器的输出和微处理器的输入。它被数字协处理器用来要求微处理器执行内存传输。处理器扩展确认(PEACK#)是微处理器的输出和数字协处理器的输入。微处理器使用PEACK#来响应数字协处理器发出的PEREQ。它通知数字协处理器请求的内存传输正在进行中。BUSY#是从数字协处理器到微处理器的输出。当数字协处理器开始执行从微处理器接收到的指令时,它会断言BUSY#。当断言BUSY#时,微处理器不应该再将任何指令转发给数字协处理器.ERROR#是从数字协处理器到微处理器的输出。它通知微处理器,数字协处理器在执行指令时发生了错误。在ISA机器中,数字协处理器的ERROR#的输出没有连接到微处理器的ERROR#输入。
5、Processer Extension Interface Line
常称为CLK2,这是微处理器的双频时钟输入。在内部,微处理器然后将CLK2除以2得到PCLK,即微处理器的真正心跳。
6. Clock Line
1. 在电压稳定之前阻止任何活动的发生。
2. 在让微处理器和其他系统设备开始工作之前,将它们预设到一个已知的状态。 这确保机器总是以相同的方式启动。
Mcu的RESET来自电源的PowerGood信号线,电源第一次上电电压不稳定PowerGood失效,电压稳定后PowerGood生效RESET失效。RESERT生效时,对mcu和其他系统组件有2个影响
7. Reset Line
控制总线
2、80286外部设备的硬件接口
预定的时间段已过任务需要的不是立即可用的例:见备注
1、多任务OS通常将任务运行到以下两种情况之一
1. 保护应用程序免受其他程序的攻击。即 不允许一个应用程序使用另一个应用程序的数据或代码段。 任何访问的尝试都会导致一个异常中断,这个异常中断将由操作系统软件处理
2. 保护自己不受它所监督的应用程序的影响。
3. 提供应用程序和1/0设备之间的接口。如果应用程序在操作系统不知情的情况下操作l/O设备(例如磁盘), 这可能是灾难性的。操作系统不会知道磁盘上的数据或1/0设备的状态已经改变
2、80286保护模式的功能
1. font color=\"#c41230\
3. 保护模式下 段寄存器被分成几类
1、80286的保护模式用于促进unix或OS/2等多任务操作系统的实现 其与MS-DOS的一次处理一个任务不同
保护模式和多任务操作系统介绍
font color=\"#f68b1f\
【段选择符】RPL字段:指示试图访问目标段的程序的特权级别表指示位TI:指向内存中两个表中的一个 0=描述全局表,1=描述局部表表索引部分:提供一个到TI位所指示的表的索引值
【保护模式下1】80286能生成16M(000000h-FFFFFFh)的存储地址,段寄存器(常称为段选择器)中的值包含以下信息请求者特权级别(RPL)表指示位(TI)表索引字段
【保护模式下2】除了段寄存器之外,80286还有三个寄存器,分别是:全局描述符表寄存器(GDTR)本地描述符表寄存器(LDTR)中断描述符表寄存器(IDTR)。系统程序员必须将三个表中每个表的起始存储器地址加载到这些寄存器中。
打开保护模式:1、第21条线A20。2、置位CR0的位0(Protection Enable,PE)通过将CR0即MSW寄存器中的bit0的PE bit1可以将微处理器置于保护模式(写该位之前,必须将某些信息表写入内存,否则启用保护模式后,一切都会混乱)
【保护模式下1】段寄存器在保护模式下的使用
font color=\"#f384ae\
【描述符1】从内存中读取的8字节段描述符会被加载到一个特殊的微处理器寄存器中,称为描述符缓存寄存器。这四个段寄存器中的每一个都有一个对应的缓存寄存器。
52
【描述符2】字节0和1,即描述符中的前两个字节,指定所描述的段的大小。接下来的三个字节提供内存中该段的实际起始地址。因为这是一个24位的值,所以开始地址可以是“在80286微处理器的16MB内存地址空间中的任何位置”。下一个字节称为属性字节,定义了段的以下特征:
Attribute Byte
描述符,占8个字节
图4-9。DS寄存器从全局描述符表中选择一个描述符,该例中,DS寄存器寻址段的100000H-1000FFH存储单元
全局描述符表(GDTR):由各种段描述符组成的表,包括局部表(LDT)、状态表(TSS)等等
【访问权限字节】控制对内存段的访问,该字节描述了段在系统中有哪些功能。用于全面地控制段的访问。如果是数据段,就指定增长方向,如果段长度越过了它的界限,mcu程序就被中断,表明出现了一般性错误。也可以说明一个数据段是可写的或是写保护的。代码段也以同样的姿态被控制,为了保护软件还可以禁止读取操作
访问权限字节
【保护模式的存储器寻址】实模式采用段地址+偏移地址寻址的方案,保护模式下,偏移地址仍然存在,但段地址将不复存在。在放置段地址的地方--段寄存器里放置了一个选择符,用于选择一个描述表(GDT)里的描述符。描述符描述了存储段的位置、长度和访问权限。【选择符和描述符】装在段寄存器里的选择符,用于从 全局/局部两个描述符表的一个中,选择8192个描述符中的一个,描述符描绘存储段的位置、长度、和访问权限。(用于段寄存器选择的两个描述符表:一个包括全局描述符,另一个包括局部描述符,前者适用于所有程序的段定义,后者一般适用于特定的应用程序。每个描述符表包括8192个描述符)
80386保护模式环境的段描述格式:Byte0/1: Byte0/1/和Byte6的低四位制定了段的长度,这20位,可指定0-1M的段长度, Byte6的bit7用于进一步定义段长度(粒度),详见备注Byte2/3/4/7:指定段起始地址,允许段位于4G区间的任何位置第6字节的第7位G位 用于定义段的单位长度。即粒度位。如果G = 0,长度以字节为单位。这允许一个段的长度从1到1MB。如果G =1,界限长度是4k字节的倍数,因此界限字节是4k的乘积,这允许段长从4KB字节开始,以4k字节为步长,直到4G字节。AV位用作指示段有效(AV=1)或者段无效(AV=0)font color=\"#f15a23\
80386/Pentium General Segment Descripter format
80286保护模式环境的段描述格式:Byte0和1:描述段的长度和限制Byte2/3/4:提供段的起始地址,允许段地址从80286的16M内存的任何位置开始Byte5:属性字节,描述段的特性Byte6/7:未被80286使用
80286 Segment Descripter format
每个描述符是8个字节,所以全局和局部描述符最大为64K字节。80286和80386至Pentium的描述符有少许区别,但是向上兼容的。b style=\
段寄存器在保护模式下的使用
3.、保护模式
第五章 80286微处理器
开启电源后,需要一段时间 等待电压达到适合工作的稳定水平, 再让mcu或系统组件接入(PowerGood复位,RESET置位)
在能量稳定之前阻止任何活动的发生。在让微处理器和其他系统设备开始工作之前,把它们预先设定到一个已知的状态。这确保机器总是以相同的方式启动。 【开机执行的第一个指令见备注】
RESET置位时,会对mcu或其他系统组件产生2点影响
1.、电源复位
系统提供一个物理开关,按下会强制RESET信号线被置位,相当于复位PowerGood,但电源并未关闭
2、按键复位
mcu通过串行方式处理异常,当在保护模式下出现保护冲突时,会关机并重置RESET重启
3、关机检测
子主题
子为此,必须采取以下行动:1. 程序员存储一个地址指针,它指向负责将系统恢复到以前的操作条件的实模式指令的地址。这个指针存储在位置0040:0067到0040:006A。当处理器返回到实模式时,将使用这些位置的内容来查找实模式指令驻留的内存地址。2. 在配置CMOS RAM位置(OFh)中存储一个特殊值(05h或(Ah),以指示复位的原因。CMOS RAM中复位字节的定义见表6-1。3.该系统现在已经准备好回到真实模式。现在必须向键盘/鼠标界面发出热重置命令。*这是通过写FEh到kevboard/鼠标接口的命令端口在1/0地址0064h4. 作为回应,键盘/鼠标界面脉冲它的热复位输出一次,导致硬件生成一个复位到80286。5. 当复位变成不断言,微处理器开始获取和执行指令在开机重新启动地址,就像一个powerup刚刚发生。6. 在POST开始时,程序员读取存储在配置RAM位置的值,以确定重置的原因。在本例中,这个值(05h或0Ah)表示它是由热重置导致的,以回到真实模式并继续程序执行。7. POST然后检索之前存储在位置0040:0067的实模式地址指针,并跳转到指定的地址,并从它在实模式下停止的位置拾取。
用于80286在MS-DOS系统下访问全部内存地址。帮助80286实现从保护模式到实模式的切换。(详情见备注)
MS-DOS的历史
4、热复位
功能与热复位相同,但速度更快
5、备用(快速)热复位
当三键按下,三个键的'make'代码被存入键盘缓冲区,当键盘中断服务程序检测到‘make’代码序列时,会调用软复位程序 (软复位程序见备注)
6、Ctrl+Alt+Del 软复位
第六章 复位逻辑
如图中的触发器提供一个与CLK2同步的RESET输出,它是来自电源的POWERGOOD信号的翻转。
每一个ISA PC电源会产生一个PowerGood,主板上,RESET信号由PowerGood信号驱动,在输出电压达到稳定之前,PowerGood信号由电源保持为低电平0。即RESET=1
font color=\"#c41230\
主要重置源
当系统重置时,其输出状态如上
续图7-2
当RESET=1时,mcu无法获取和执行指令这些值会强制重置到8086\\8088mcu寄存器中
重置会如何影响处理器
在实模式下,CPU基址总是在16位段寄存器CS(内容F000h)左移4位来产生20位基址,从而产生一个代码段的起始地址F0000h。然后将IP寄存器中包含的地址FFF0h偏移部分添加到段的起始地址,生成的内存地址FFFFOh
输出电压稳定时处理器的反应
mcu启动一个内存读总线周期来从内存中的上电重新启动地址取出第一个指令。开机重启地址总是位于Boot-ROM中。
jump指令机器码
直到程序执行jump指令跳到另一个代码段,mcu才会将较高地址线为1设为0; (FFFFFFF0H)(即直到一个新值加载到CS寄存器。重新加载CS和IP寄存器的跳转指令被称为“段内跳转”或“段间跳转”除非处理器被程序切换到保护模式,否则较高位的地址线就会一直保持为0。实际上,系统ROM执行的第一条指令总是一条jump指令,因此CS会在执行第一个指令时立即重新加载。mcu较高的位被设为L,他们将不会再次设置高,而处理器保持在实模式。这也意味着mcu在实模式下不能访问附加内存(大于1MB的内存)。
从开机重启地址获取的第一条指令始终是开机自检或POST的第一条指令。POST程序在Boot-ROM中,并且总是第一个要运行的程序。
mcu运行的第一个总线周期
第七章 上电运行顺序
微处理器的外部逻辑可以通过查看80286定义的总线周期输出pin来检测总线周期是否开始。当检测到SO#或S1#变低时,这表示总线周期的开始。这触发与微处理器的总线单元一起工作的总线控制逻辑的状态机在总线周期内完成数据传输。总线控制逻辑使用CLK2(双频率时钟)为其状态机定义时间插槽。在总线周期适当的时间,总线控制逻辑执行适当的动作来完成总线周期
解释了S0#和S1#的作用,是表示启动一个总线周期S1#=0,S0#=1 --开始一个读总线周期S1#=1,S0#=0 --开始一个写总线周期
图8-1 Bus Control Logic
为了完成一个总线周期所需的所有动作,80286微处理器需要外部逻辑的帮助。涉及到这个过程的主要的的逻辑被称为Bus Device Logic。参见图8-1。
1、总线控制逻辑
图8-2 The Address Latch
当mcu在一个总线周期输出地址到本地地址总线上时,总线控制逻辑信号ALE(address latch enable)命令地址锁存器保持或锁存住这个地址。一旦锁存,地址锁存输出把地址输出到系统地址总线SA[19:1],然后遍及整个系统的地址解码器会检测这个锁存的地址,去判断是否mcu尝试和他们各自的设备通信
必须包含地址锁存器和LA可锁存地址线(Latchable Address Lines)来支持80286的地址流水功能注意:地址线A[23:20]没有被锁住,这些地址线和A[19:17]通过缓冲器直接到LA。LA总线直接与ISA总线的16位槽连接。稍后讲解LA bus的作用
intel规定,每个基于80286的系统必须包含一个名为地址锁存器的外部设备。
2、地址锁存器
略
3、地址流水线(Pipelining)
解释了DT/R和Data Enable信号的作用DT/R=1 收发器处于transmit模式,数据从左往右传输DT/R=0 收发器处于read模式,数据从右往左传输Data Enable =1,允许收发器实际按照DT/R#控制线的状态所选择的方向传递数据。
4、地址总线收发器
5、数据总线控制逻辑
同下8位设备data line接在SD[7:0]上,收发都在其上
场景1--在8位设备的偶数地址读取8位
将000061H放在地址总线上&BHE#置位,先发起一个I/O read Cycle 开始,M/IO#=0 --表示I/O操作,S0#=1,S1#=0 --不是一个写操作,是一个读操作enable ALE signal --将local地址放在系统地址线SA上,整个系统的解码器去译码 片选61地址设备61设备将数据放在SD[7:0]上,但根据规则三,奇数地址数据必须放在搞数据路径SD[15:8]上。(因此在lower data bus path和Upper path之间加入了一个Hi/Lo Byte Copier)DT/R#=0,ENABLE Upper=1,Enable Coy line,Hi/Lo Byte Copier将lower data path上的数据转到upper path上SD[15:8]MCU将SD上的数据放在Local data先上,再将数据放在AL寄存器里。
场景2--从8位设备的奇数地址读取8位
同上
场景3--写8位到8位设备的奇数地址
延长 CPU READY#,在低数据路径上执行2次单独的单字节传输,(现将lower data path写入,再将High path数据转到Low path,再写入)
场景4--把16位写入到8位设备
同上,相反
场景5--从8位设备读16位
5、场景
设备的访问时间取决于设备和制造商,不同的设备(ROM/RAM/ioDevice)访问时间不同且并不是每个设备都有READY# 信号线
1、访问时间
访问慢速设备室,必须延长mcu总线周期来匹配设备速度,这就是CPU上有READY# input的原因由于I/O或内存设备没有Ready output,因此必须设计一些其他方法来取消对CPU就绪信号的评估,直到当前寻址设备准备好完成总线周期
2、获取和转换时间
ISA系统对不同类型的设备使用单个默认计时器。通常被安置在总线控制逻辑内部。如图说明了当访问1/0和内存时,默认计时器插入到总线周期中的等待状态的数量。
3、Default Ready Timer
ISA总线允许设计师灵活地选择不同的设备访问时间
通过覆盖默认计时器和延长总线周期所需的等待状态的数量来实现
延长默认计时器
缩短默认计时
4、Custem Ready Timer
6、Ready Logic
第八章 80286系统内核
总线周期事务类型
当mcu要与memory或IO地址通信时,会发起一个总线周期mcu总线单元通过addr、data、control总线去寻址设备,指示正在进行的总线周期的事务类型,再与当前地址设备传输数据。
inter定义的传送地址和数据总线周期的状态名字
mcu执行一个总线周期时,mcu的总线单元离开空闲状态和进入地址时间。在这个PCLK期间,mcu将地址和总线周期类型定义放在总线上。整个系统的地址解码器在这个时间段开始解码地址。地址时间后跟着数据时间。在state下,mcu在自身和当前寻址设备之间传输数据。
数据和地址的Revisited
略 (对时序图cycle A的解释)
Bus cycle A
略 (对时序图cyclle B的解释
Bus cycle B
读总线周期
在停止或者关闭期间,80286可以服务PEREQ(process extension request)或者HOLD request
NMI(不可屏蔽中断请求)或重置将迫使80286停止或关闭。如果中断被启用,一个INTR(可屏蔽的中断请求)也将迫使微处理器停止(但不是停止)。
总线循环结束后,通过以下标志从外部识别停止状态: S#=s1#=1 M/IO#=1 Address bit1=1
当微处理器执行HLT指令时,它将启动暂停或关闭总线周期,并停止提取和执行指令。 微处理器通过将值放置在总线周期定义线和地址位1上来指示它正在停止总线周期,注意:S0#和Sl#仅在总线周期本身为低电平。 当微处理器采样在数据时间结束时声明的READY#时,总线周期结束。
Halt
关闭总线周期和停止总线周期的标志相同,唯一不同的时Address bit1=0
Shutdown
停止和关闭总线周期
第九章 80286总线周期详细视图
本章描述了80386DX和SX处理器,它们的内部单元都是一样的,除了外围设备不同本章分成3部分:80386的内部结构和操作80386DX和外部设备的接口80386SX和外部设备的接口
Introduction
图解
80386处理器由5个功能单元组成:总线单元:处理mcu和外部设备之间的通信代码预取单元:在处理器实际请求前,从内存中获取指令指令解码单元:在将指令传递到执行单元执行之前对指令进行解码。执行单元:进行指令的实际执行内存管理单元(MMU):当微处理器寻址一个内存位置时,MMU形成\\物理内存地址。在一个总线周期期间由总线单元驱动到地址总线上。
组成
当总线单元不为执行单元执行总线周期时,代码预取单元使用总线单元从内存中获取下一个顺序指令并将其存储在16字节预取队列中。代码预取单元总是试图通过一次取整个双字(四个字节)来最大化总线单元的吞吐量。预取指令被放置在预取队列中以等待指令解码单元的处理。
代码预取单元利用程序执行的可预测性。通常程序指令是按顺序从内存中取出的。只有遇到跳转指令才会改变程序流程,跳转到内存的另一个区域。发生流更改之后,程序继续按顺序取指令,直到遇到另一条跳转指令。
代码预取单元(CpreU)
指令解码单元从16字节预取队列获取指令,将其转换成微码并将其存储在一个三深度解码指令队列中供执行单元使用。任何即时数据和偏移量与该指令相结合的指令也从预处理队列中取出并存储在已解码的指令队列中。
指令解码单元(IDU)
指令单元本分成三个子单元。控制单元:控制单元的微码和特殊的并行硬件速乘、除和有效地址计算。数据单元:包含算术逻辑单元,或ALU,八个通用寄存器和一个64位桶移位器。数据单元执行控制单元所要求的数据操作。protection test单元:检查是否存在分段违规。
【General】EU依次执行从指令解码队列获取的指令,并和mcu的其他单元通信以完成指令
【通用寄存器】在80386微处理器中实现的通用寄存器是X86处理器家族早期寄存器的超集。
Eflag寄存器时80286flag寄存器的扩展版本,包含了两个新的控制位:RF(resume flag)位:允许程序员禁用调试异常,以便在调试异常后重新启动指令,而不会立即导致另一个调试异常。VM(虚拟模式)位:,允许程序员启用或禁用虚拟8086模式。虚拟8086模式将在本章后面讨论。
控制寄存器0或CRO是80286机器状态字(MSW)寄存器的超集。 CRO包含MSW中找不到的两个新位。 扩展类型(ET)位(第4位)指示系统中存在的数字协处理器的类型(80287/80387)。当检测到80387协处理器时,ET位置1。 寻呼位PG(第31位)在该位设置为1时启用虚拟寻呼。 虚拟分页将在本章稍后的“页面转换”部分中介绍。
重置后,80386城市MSW寄存器的值是0000h。80286MSW寄存器在复位后有FFFOh。因寄存器中的高级位未被处理器使用,所以这种差异没有影响。
状态\\MSW\\指令寄存器
DR6允许程序员确定满足了哪个断点条件。DR4和DR5没有被80386使用。DRO - DR3用于指定最多四个断点地址
80386 Debug Registers
80386调试寄存器。支持设置代码断点和数据断点
Debug寄存器
TR6是TLB访问的命令寄存器,而TR7是数据寄存器。地址和命令使用命令寄存器写入TLB,而数据使用数据寄存器从TLB读取或写入TLB。
80386 test Register
80386测试寄存器用于测试分页单元的转换后备缓冲器或TLB
Test寄存器
【寄存器】EU包含以下寄存器:通用寄存器状态和控制寄存器debug寄存器test寄存器
执行单元(EU)
当微处理器必须访问内存时,段单元通过将目标段内的偏移量加到包含在相应段寄存器内的段起始地址来形成内存地址。最后得到的32位内存地址,称为线性地址,然后要么提交给分页单元(如果分页启用),要么在最终的内存总线周期中输出到地址总线上。
实模式下,程序员可以使用所有的段寄存器,包括FS和GS。在实模式下,程序员还可以访问调试、控制和测试寄存器。
微处理器必须在下列情况下访问内存:为代码预取单元获取下一条指令。当执行单元必须从内存中读取数据以满足MOV输入时结构式。当执行单元必须向内存写入数据以满足MOV指令时。在保护模式下,当段寄存器加载了一个新值时,从内存中获取段描述符。从内存中获取页目录或页表项。
Segmention单元(SU)
后面的Page Translate章节对Page页有详细描述
Page单元(PU)
内存管理单元(MMU)
80386功能单元
80386以后的mcu的分页机制允许把任何物理存储单元分配给任何线性地址,线性地址是由存储器程序产生的。以存储器分页为单位,线性地址透明地转换为物理地址。32位物理地址被放在地址总线上
分页单位由mcu控制寄存器的内容来控制,Pentium处理器另加了一个CR4,其中一个特性用CR4 bit4打开一个4MB的页
图4.11 微处理器的控制寄存器结构
对分页单位至关重要的寄存器是CR0和CR3CR0 的bit31(PG)=1时,就选择分页,PG位为0时,程序产生的线性地址就是物理地址,用于寻址存储器。GP=1时,则线性地址通过分页机制变换为物理地址。实模式和保护模式下分页机制都能正常工作CR3的内容包括页索引基地址和PCD、PWT位,这两位控制mcu上的PCD和PWT管脚,PCD=1时,PCD脚在缺页的总线周期变为逻辑1,这就允许外部硬件取控制2级高速缓冲存储器。PWT位是缺页的总线周期在PWT管脚上出现的信号标志,以便控制通写系统中的高速缓冲存储器。页索引基地址装载为页转换单位的页索引。(注意,这个地址找出存储器内在任何4k范围的页索引,因为它在内部增添一个000H,页索引包含1024个索引项,每项4个字节,每个页索引项寻址一个页表,包含1024项)
线性地址(32位)font color=\"#5c5c5c\
分业管理 看第一段就行
分页寄存器
系统中只有一个页目录,页目录包含1024个双子地址,最多可装1024个页表,页目录和每个页表为4K字节长
页目录和页表
分业管理机制
存储器分页
见书 p164-170
虚拟 Paging
如果微处理器每次访问内存时都必须访问两级基于内存的表,性能将大幅下降。为了解决这个问题,80386微处理器维护了最近访问过的页表项的片上高速缓存。这个缓存被称为转换后备缓冲区(TLB )。80486中,最近的32个页表转换被存在TLB中,若某个存储区被访问,而地址已在TLB中,就不需要再去访问页目录和页表,加速了程序的执行。若TLB中没有,则必须访问页目录和页表,这就会要增加执行时间
详细解释TLB的链接
Translation Look-aside Buffer(TLB)
Page Translation
1、从tss(任务状态实例)加载的Eflags寄存器中的VM标志位将正在运行的任务的虚拟处理器定义为8086或80386,当80386从其VM标志位已设置的TSS加载其寄存器时, 处理器进入虚拟8086模式。 在随后的任务切换上,当处理器从TSS加载VM清除的TSS寄存器时,它将离开虚拟8086模式。 因此,在逐个任务的基础上,处理器根据VM位的值模拟80386或8086。 80386在引发异常或被中断时也会离开虚拟8086模式,从而使体系结构的全部资源可用于中断和异常处理程序。 从虚拟8086模式下调用的处理程序返回时,当从堆栈中重新加载Eflags寄存器时,80386将自动重新进入虚拟8086模式。
2、因为8086的地址空间是1兆字节,所以虚拟8086模式任务生成的逻辑地址属于80386线性地址空间的第一个兆字节。多个虚拟8086模式任务可能会相互干扰,因为它们都将共享线性地址空间的低兆字节。操作系统可以使用80386分页将虚拟8086模式任务的线性地址空间重定位到物理地址空间的不同区域。以这种方式使用分页不仅可以防止虚拟8086模式任务之间的干扰,而且可以使虚拟内存操作系统像交换80386任务一样交换虚拟8086模式任务的页面。
3、从tss(任务状态段)加载的Eflags寄存器中的VM标志位将正在运行的任务的虚拟处理器定义为8086或80386,当80386从其VM标志位已设置的TSS加载其寄存器时, 处理器进入虚拟8086模式。 在随后的任务切换上,当处理器从TSS加载VM清除的TSS寄存器时,它将离开虚拟8086模式。 因此,在逐个任务的基础上,处理器根据VM位的值模拟80386或8086。 80386在引发异常或被中断时也会离开虚拟8086模式,从而使体系结构的全部资源可用于中断和异常处理程序。 从虚拟8086模式下调用的处理程序返回时,当从堆栈中重新加载Eflags寄存器时,80386自动重新进入虚拟8086模式
80386可在两种模式中执行8086代码:实模式和虚拟8086模式
虚拟8086模式
Automatic Self-Test
80386外部接口
接口信号的差异
80386SX外部接口
第十章 80386DX和SX微处理器
第十一章 80386系统内核
第一部分 System Kernel
第二部分
第三部分
1. ISA (Industry Standard Architecture)2. MCA (Micro Channel Architecture)3. EISA (Extended Industry Standard Architecture)4. VLB (VESA Local Bus)5. PCI (Peripheral Component Interconnect)6. PCI-X (Peripheral Component Interconnect eXtended)7. AGP (Accelerated Graphics Port)8. PCI Express (Peripheral Component Interconnect Express)
总线的发展
版本信息:v1.4作者:金靖淋时间:2020.11.1-2020.11.30进度:第一部分/第十章/第二节 386功能单元之内存管理U
版本信息:v1.3作者:金靖淋时间:2020.10.9-2020.10.30进度:第一部分/第八章/第二节 地址锁存器
版本信息:v1.2作者:金靖淋时间:2020.9.21-2020.9.25进度:第一部分/第六章/完结
版本信息:v1.1作者:金靖淋时间:2020.9.14-2020.9.18进度:第一部分/第五章/第二节 地址总线
版本信息:v1.0作者:金靖淋时间:2020.9.7-2020.9.11进度:第一部分/第五章/第一节-通用寄存器
ISA System Architecture
收藏
0 条评论
下一页