逻辑地址线性地址物理地址三个地址有什么联系

合集下载

内存寻址的三种模式

内存寻址的三种模式

内存寻址的三种模型1. 地址的种类首先明确一下逻辑地址和线性地址这两个概念:1. 逻辑地址2. 线性地址3. 物理地址1.1 逻辑地址:逻辑地址是编译器生成的,我们使用在linux环境下,使用C语言指针时,指针的值就是逻辑地址。

对于每个进程而言,他们都有一样的进程地址空间,类似的逻辑地址,甚至很可能相同。

1.2 线性地址:线性地址是由分段机制将逻辑地址转化而来的,如果没有分段机制作用,那么程序的逻辑地址就是线性地址了。

1.3 物理地址物理地址是CPU在地址总线上发出的电平信号,要得到物理地址,必须要将逻辑地址经过分段,分页等机制转化而来。

2. 三种寻址模型x86体系结构下,使用的较多的内存寻址模型主要有三种:1. 实模式扁平模型real mode flat model2. 实模式分段模型real mode segment model3. 保护模式扁平模型protected mode flat model下面是对这三种模型的描述实模式和保护模式相对,实模式运行于20位地址总线,保护模式则启用了32位地址总线,地址使用的是虚拟地址,引入了描述符表;虽然二者都引入了段这样一个概念,但是实模式的段是64KB固定大小,只有16KB个不同的段,CS,DS等存储的是段的序号(想想为什么?)。

保护模式则引入了GDT和LDT段描述符表的数据结构来定义每个段。

扁平模型和分段模型相对,区别在于程序的线性地址是共享一个地址空间还是需要分成多个段,即为多个程序同时运行在同一个CS,DS的范围内还是每个程序都拥有自己的CS,DS:前者(flat)指令的逻辑地址要形成线性地址,不需要切换CS,DS;后者的逻辑地址,必须要经过段选择子去查找段描述符,切换CS,DS,才能形成线性地址。

3. 实模式扁平模型该模式只有在386及更高的处理器中才能出现!80386的实模式,就是指CPU可用的地址线只有20位,能寻址0~1MB的地址空间。

Intel80386CPU

Intel80386CPU

Intel80386CPUIntel 80386 CPU簡單了解運⾏模式⼀般CPU只有⼀种运⾏模式,能够⽀持多个程序在各⾃独⽴的内存空间中并发执⾏,且有⽤户特权级和内核特权级的区分,让⼀般应⽤不能破坏操作系统内核和执⾏特权指令。

80386处理器有四种运⾏模式:实模式、保护模式、SMM模式和虚拟8086模式。

这⾥对涉及ucore的实模式、保护模式做⼀个简要介绍。

实模式:这是个⼈计算机早期的8086处理器采⽤的⼀种简单运⾏模式,当时微软的MS-DOS操作系统主要就是运⾏在8086的实模式下。

80386加电启动后处于实模式运⾏状态,在这种状态下软件可访问的物理内存空间不能超过1MB,且⽆法发挥Intel 80386以上级别的32位CPU的4GB内存管理能⼒。

实模式将整个物理内存看成分段的区域,程序代码和数据位于不同区域,操作系统和⽤户程序并没有区别对待,⽽且每⼀个指针都是指向实际的物理地址。

这样⽤户程序的⼀个指针如果指向了操作系统区域或其他⽤户程序区域,并修改了内容,那么其后果就很可能是灾难性的。

保护模式:保护模式的⼀个主要⽬标是确保应⽤程序⽆法对操作系统进⾏破坏。

实际上,80386就是通过在实模式下初始化控制寄存器(如GDTR,LDTR,IDTR与TR等管理寄存器)以及页表,然后再通过设置CR0寄存器使其中的保护模式使能位置位,从⽽进⼊到80386的保护模式。

当80386⼯作在保护模式下的时候,其所有的32根地址线都可供寻址,物理寻址空间⾼达4GB。

在保护模式下,⽀持内存分页机制,提供了对虚拟内存的良好⽀持。

保护模式下80386⽀持多任务,还⽀持优先级机制,不同的程序可以运⾏在不同的特权级上。

特权级⼀共分0~3四个级别,操作系统运⾏在最⾼的特权级0上,应⽤程序则运⾏在⽐较低的级别上;配合良好的检查机制后,既可以在任务间实现数据的安全共享也可以很好地隔离各个任务。

內存架構地址是访问内存空间的索引。

⼀般⽽⾔,内存地址有两个:⼀个是CPU通过总线访问物理内存⽤到的物理地址,⼀个是我们编写的应⽤程序所⽤到的逻辑地址(也有⼈称为虚拟地址)。

计算机操作系统第四章-存储器管理

计算机操作系统第四章-存储器管理

第四章存储器管理第0节存储管理概述一、存储器的层次结构1、在现代计算机系统中,存储器是信息处理的来源与归宿,占据重要位置。

但是,在现有技术条件下,任何一种存储装置,都无法从速度、容量、是否需要电源维持等多方面,同时满足用户的需求。

实际上它们组成了一个速度由快到慢,容量由小到大的存储装置层次。

2、各种存储器•寄存器、高速缓存Cache:少量的、非常快速、昂贵、需要电源维持、CPU可直接访问;•内存RAM:若干(千)兆字节、中等速度、中等价格、需要电源维持、CPU可直接访问;•磁盘高速缓存:存在于主存中;•磁盘:数千兆或数万兆字节、低速、价廉、不需要电源维持、CPU 不可直接访问;由操作系统协调这些存储器的使用。

二、存储管理的目的1、尽可能地方便用户;提高主存储器的使用效率,使主存储器在成本、速度和规模之间获得较好的权衡。

(注意cpu和主存储器,这两类资源管理的区别)2、存储管理的主要功能:•地址重定位•主存空间的分配与回收•主存空间的保护和共享•主存空间的扩充三、逻辑地址与物理地址1、逻辑地址(相对地址,虚地址):用户源程序经过编译/汇编、链接后,程序内每条指令、每个数据等信息,都会生成自己的地址。

●一个用户程序的所有逻辑地址组成这个程序的逻辑地址空间(也称地址空间)。

这个空间是以0为基址、线性或多维编址的。

2、物理地址(绝对地址,实地址):是一个实际内存单元(字节)的地址。

●计算机内所有内存单元的物理地址组成系统的物理地址空间,它是从0开始的、是一维的;●将用户程序被装进内存,一个程序所占有的所有内存单元的物理地址组成该程序的物理地址空间(也称存储空间)。

四、地址映射(变换、重定位)当程序被装进内存时,通常每个信息的逻辑地址和它的物理地址是不一致的,需要把逻辑地址转换为对应的物理地址----地址映射;地址映射分静态和动态两种方式。

1、静态地址重定位是程序装入时集中一次进行的地址变换计算。

物理地址= 重定位的首地址+ 逻辑地址•优点:简单,不需要硬件支持;•缺点:一个作业必须占据连续的存储空间;装入内存的作业一般不再移动;不能实现虚拟存储。

习题7答案——精选推荐

习题7答案——精选推荐

习题7答案1、存储管理的主要功能是什么?解内存分配、存储保护、地址变换、存储共享、存储扩充2、什么是地址空间、存储空间、逻辑地址、物理地址?解:1)地址空间:⼀个程序可以访问的地址是有限的,这个程序可以访问的地址范围我们称为地址空间,或者说是指程序⽤来访问信息所⽤的地址单元的集合。

2)存储空间:所谓存储空间是指能够访问的主存的范围。

⼀个数据在主存中的位置称为物理地址或绝对地址。

3)逻辑地址:地址空间单元的编号。

4)物理地址:存储空间单元的编号。

3、采⽤可变式分区存储管理时,能否实现虚拟存储,为什么?解:不能。

可变式分区⽅式虽然分成程序的⼤⼩可以变化,但是要求整个程序都装⼊内存才能运⾏,这样⽆法进⾏逻辑上扩充内存。

4、可变分区管理有哪⼏种存储分配算法?解:1)⾸次适应算法(First-Fit)。

这种策略总是从链表的开头开始查找。

⼀旦找到了⾜够⼤的、能满⾜给定的请求的第⼀个空闲分区,就停⽌查找。

2)下次适应算法(Next-Fit)。

⼜称为循环⾸次适应算法。

对⾸次适应算法的⼀个简单改动就是每次要从上次查找停⽌的位置开始查找,也就是前次分配后的空闲分区。

3)最佳适应算法(Best-Fit)。

这种策略的直观想法是,总是给内存请求者分配最适合它⼤⼩的空闲分区,提⾼内存的利⽤率。

5、什么是地址重定位?有哪⼏种常⽤的地址重定位⽅法?解:由于将作业装⼊到与其地址空间不⼀致的存储空间所引起的对有关地址部分的调整过程称为地址重定位。

常⽤的重定位⽅法有两种,静态重定位和动态重定位。

静态重定位是指在程序运⾏之前由链接装⼊程序进⾏的重定位。

动态重定位是在程序运⾏过程中,通过重定位寄存器来进⾏地址转换。

6、在某系统中,采⽤固定分区分配⽅式,内存分区(单位:字节)情况如下图左所⽰。

现有⼤⼩为4KB、18KB、50KB、85KB的多个作业要求进⼊内存,试画出它们进⼊内存后的空间分配情况,并说明主存浪费有多⼤。

解:从图中可以看出该系统共有4个分区,第⼀个分区的⼤⼩为10KB,第⼆个分区的⼤⼩为30KB,第三个分区的⼤⼩为80KB,第四个分区的⼤⼩为100KB。

逻辑地址与物理地址

逻辑地址与物理地址

逻辑地址与物理地址物理地址是外部连接使用的、唯一的,它是“与地址总线相对应”;而逻辑地址是内部和编程使用的、并不唯一。

在内存中的实际地址就是所谓的“物理地址”,而逻辑地址就是逻辑段管理内存而形成的。

例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),不和绝对物理地址相干。

只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换),逻辑地址也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。

8086体系的CPU一开始是20根地址线, 寻址寄存器是16位, 16位的寄存器可以访问64K的地址空间, 如果程序要想访问大于64K的内存, 就要把内存分段, 每段64K, 用段地址+偏移量的方法来访问。

386CPU出来之后, 采用了32条地址线, 地址寄存器也扩为32位, 这样就可以不用分段了, 直接用一个地址寄存器来线性访问4G的内存了. 这就叫平面模式.将逻辑地址中的段地址左移4位,加上偏移地址就得到20位物理地址。

这里左移的4位是二进制位;如果用十六进制表达地址就是左移一位。

左移4位还可以表达为乘以16,即:段地址×16+偏移地址。

同一个物理地址可以对应多个逻辑地址形式。

所以物理地址转换为逻辑地址,需要明确段基地址或偏移地址,然后同上原则确定另一个地址。

逻辑地址1460H : 0100H 或1380H : 0900H物理地址14700H于是,对于主存14700H单元,我们可以描述为在1460H(或1380H)段的0100H(或0900H)单元,或者说主存1460H : 0100H(或1380H : 0900H)单元。

存储单元的地址可以用段基值和段内偏移量来表示,段基值确定它所在的段居于整个存储空间的位置,偏移量确定它在段内的位置,这种地址表示方式称为逻辑地址。

什么是物理地址 逻辑地址

什么是物理地址 逻辑地址

什么是物理地址逻辑地址网络中的地址分为物理地址和逻辑地址两类,与网络层的IP地址传输层的端口号以及应用层的用户名相比较,局域望网的MAC层地址是由硬件来处理的,叫做物理地址或硬件地址.IP地址传输层的端口号以及应用层的用户名是逻辑地址一由软件处理.我认为你说的MAC地址应该就是物理地址.大多数局域网通过为网卡分配一个硬件地址来标识一个联网的计算机或其他设备.所谓物理地址是指固化在网卡EPROM中的地址,这个地址应该保证在全网是唯一的.IEEE注册委员会为每一个生产厂商分配物理地址的前三字节,即公司标识.后面三字节由厂商自行分配.即一个厂商获得一个前三字节的地址可以生产的网卡数量是16777216块.即一块网卡对应一个物理地址.也就是说对应物理地址的前三字节可以知道他的生产厂商.如果固化在网卡中的地址为002514895423,那么这块网卡插到主机A中,主机A的地址就是002514895423,不管主机A是连接在局域网1上还是在局域网2上,也不管这台计算机移到什么位置,主机A的物理地址就是002514895423 .它是不变的,而且不会和世界上任何一台计算机相同.当主机A发送一帧时,网卡执行发送程序时,直接将这个地址作为源地址写入该帧.当主机A接收一帧时,直接将这个地址与接收帧目的地址比较,以决定是否接收.物理地址MAC(Media Access Control, 介质访问控制)地址是识别LAN(局域网)节点的标识。

网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写),它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址。

也就是说,在网络底层的物理传输过程中,是通过物理地址来识别主机的,它一般也是全球唯一的。

比如,著名的以太网卡,其物理地址是48bit(比特位)的整数,如:44-45-53-54-00-00,以机器可读的方式存入主机接口中。

以太网地址管理机构(IEEE)将以太网地址,也就是48比特的不同组合,分为若干独立的连续地址组,生产以太网网卡的厂家就购买其中一组,具体生产时,逐个将唯一地址赋予以太网卡。

进程管理_linux0.11

进程管理_linux0.11

Linux0.11的地址有3类地址需要区分清楚:1.程序(进程)的虚拟地址和逻辑地址虚拟地址(virtual address)指程序产生的有段选择符和段内偏移两部分组成的地址。

一个程序的虚拟地址空间有GDT映射的全地址空间和LDT映射的局部地址空间组成。

逻辑地址(logical address)指程序产生的段内偏移地址。

应用程序只与逻辑地址打交道,分段分页对应用程序来说是透明的。

也就是说C语言中的&,汇编语言中的符号地址,C中嵌入式汇编的”m”对应的都是逻辑地址。

2.CPU的线性地址线性地址(linear address)是逻辑地址到物理地址变换的中间层,是处理器可寻址空间的地址。

程序代码产生的逻辑地址加上段基地址就产生了线性地址。

3.实际物理内存地址物理地址(physical address)是CPU外部地址总线上的寻址信号,是地址变换的最终结果,一个物理地址始终对应实际内存中的一个存储单元。

对80386保护模式来说,如果开启分页机制,线性地址经过页变换产生物理地址。

如果没有开启分页机制,线性地址直接对应物理地址。

页目录表项、页表项对应都是物理地址。

Linux 0.11的内核数据段,内核代码段基地址都是0,所以对内核来说,逻辑地址就是线性地址。

又因为1个页目录表和4个页表完全映射16M物理内存,所以线性地址也就是物理地址。

故对linux0.11内核来说,逻辑地址,线性地址,物理地址重合。

个人总结:分段和分页的区别:分段可以给每个进程提供不同的线性地址分页可以把同一线性地址空间映射到不同的物理地址逻辑地址:线性地址:物理地址:逻辑地址-》分段单元-》线性地址-》分页单元-》物理地址Linux在使用的时候避开了Intel原先的设计意图,只是对段基址设置了0,这样逻辑地址和线性地址就一样了,再经过分页机制,就最后变成了物理地址了。

Linux2.4内核使用的空间中,虚拟地址和物理地址只是简单的相差了3G与80386段相关的宏定义set_seg_desc3123715/*****************************************************************************/ /* 功能: 设置存储段描述符,把指定属性的段描述符放入gate_addr 处 */ /* 参数: gate_addr 段描述符的目的地址 */ /* type 描述符中类型域,具体见80386基础一节中的表格 */ /* dpl 描述符中特权级 */ /* base 段基地址,这是线性地址 */ /* limit 段限长 */ /* 返回: (无) */ /*****************************************************************************/ #define _set_seg_desc(gate_addr,type,dpl,base,limit) {\ // 把段描述符的第4-7字节放入gate_addr 处 *((gate_addr)+1) = ((base) & 0xff000000) | \ // base 的31..24位放入gate_addr 的31..24位 (((base) & 0x00ff0000)>>16) | \ //base 的23..16位放入gate_addr 的7..0位 ((limit) & 0xf0000) | \ //limit 的19..16位放入gate_addr 的19..16位 ((dpl)<<13) | \ // dpl 放入gate_addr 的14..13位 (0x00408000) | \ // 把P 位和D 位设置位1,G 置为 0 ((type)<<8); \ // type 放入gate_addr 的11..8位 // 把段描述符的第0-3字节放入gate_addr+1处 *(gate_addr)= (((base) & 0x0000ffff)<<16) | \ //base 的15..0放入gate+1的31..15位 ((limit) & 0x0ffff); } //limit 的15..0位放入gate+1的15..0位set_tssldt_desc/*****************************************************************************/ /* 功能: 设置系统段描述符,把指定属性的段描述符放入GDT 中 */ /* 表项n 对应的地址处, */ /* 参数: n GDT 中表项n 对应的地址 */ /* addr 系统段的基地址,这是一个线性地址 */ /* type 描述符中类型域,具体见80386基础一节中的表格 */ /* 0x89表示386TSS 段描述符,0x82表示LDT 段 */ /* 这里8是为了设置P 位为1 */0 7 15 23 31/* 返回: (无) */ /*****************************************************************************/ // %0 寄存器eax addr// %1-%6 物理地址符号项n地址-n+7的地址#define _set_tssldt_desc(n,addr,type) \__asm__ ("movw $104,%1\n\t" \ // 把TSS的限长104字节放入n地址处,// 这样ldt的限长也定为104,这没有关系,因为linux0.11// 中一个任务的ldt只有3个表项"movw %%ax,%2\n\t" \ // 把addr的15..0位(在ax中)放入n+2处"rorl $16,%%eax\n\t" \ // 把addr的高16位(eax中)放入ax中"movb %%al,%3\n\t" \ //addr的23..16位放入n+4中"movb $" type ",%4\n\t" \ // 把type字段放入n+5中"movb $0x00,%5\n\t" \ // 把G置为0,说明粒度是字节。

微型计算机技术及应用内部习题

微型计算机技术及应用内部习题

微型计算机技术及应用内部习题第一章作业1.主板主要由哪几部分组成?CPU插座、芯片组(北桥芯片、南桥芯片等)、BIOS芯片、系统时钟发生器芯片、总线(前端系统总线FSB、QPI总线、内存总线、图形总线AGP、外围设备总线PCI-E等)、接口(集成驱动电子设备接口IDE、通用串行设备接口USB、以太网接口LAN、音频接口AC’97、超级输入输出接口SIO等)。

2.微处理器、微型计算机和微型计算机系统三者之间有什么不同?微处理器是微型计算机的核心,是微型计算机的一部分。

它是集成在一块芯片上的CPU,由运算器和控制器组成。

微型计算机包括微处理器、存储器、I/O接口和系统总线,是微型计算机系统的主体。

微型计算机系统包括微型计算机、外设及系统软件三部分。

3.微型计算机的性能指标有哪些?CPU的位数、CPU的主频、内存容量和速度、硬盘容量。

第二章习题1.若(AL)=0C0H,(B某)=03523H,则执行指令ADDAL,BL之后(AL)=_____,(BL)=_____,标志位OF,SF,ZF,AF,CF,PF的状态对应为_____.2.设(SS)=2250H,(SP)=0140H,若在堆栈中放入5个数据,则栈顶的物理地址为___,如果又从堆栈中取出3个数据,则栈顶的物理地址为____.3.两个逻辑地址分别为2003H:1009H和2101H:0029H,它们对应的物理地址是多少?说明了什么?4.在8088/8086中,逻辑地址FFFF∶0001,00A2∶37F和B800∶173F的物理地址分别是多少?物理地址=段地址某10H+偏移地址所以FFFF:0001的物理地址是FFFFH某10H+0001H=FFFF1H00A2:37F的物理地址是00A2某10H+037FH=00D9FHB800:173F的物理地址是B800某10H+173F=B973FH5.在8088/8086中,从物理地址388H开始顺序存放下列三个双字节的数据,651AH,D761H和007BH,请问物理地址388H,389H,38AH,38BH,38CH和38DH6个单元中分别是什么数据?地址388H389H38AH38BH38CH38DH内容1AH65H61HD7H7BH00H6.已知当前(DS)=7F06H,在偏移地址为0075H的存储器中连续存放6个字节的数据:11H,22H,33H,44H,55H,66H。

通俗理解物理地址、逻辑地址、线性地址、虚拟地址、有效地址的区别

通俗理解物理地址、逻辑地址、线性地址、虚拟地址、有效地址的区别

通俗理解物理地址、逻辑地址、线性地址、虚拟地址、有效地址
的区别
物理地址:物理地址就是内存单元的绝对地址,⽐如你有⼀个4G的内存条插在电脑上,物理地址0x0000就表⽰内存条的第⼀个存储单元,0x0010就表⽰内存条的第17个存储单元,不管CPU内部怎么处理地址,最终访问的都是物理地址。

在CPU实模式下“段基址+段内偏移地址”就是物理地
址,CPU可以使⽤此地址直接访问内存。

线性地址、虚拟地址:CPU在保护模式下,“段基址+段内偏移地址”叫做线性地址,注意,保护模式下段基址寄存器中存储的不是真正的段基值(和实模式的含义不⼀样),⽽是被称为“段选择⼦”的东西,通过段选择⼦在GDT(全局描述表)中找到真正的段基值。

另外,如果CPU在保护模式下没有开启分页功能,则线性地址就被当做最终的物理地址来⽤,若开启了分页功能,则线性地址就叫虚拟地址(在没开启分页功能的情况下线性地址和虚拟地址就是⼀回事)。

但是,如果开启分页功能,虚拟地址(或线性地址)还要通过页部件电路转换成最终的物理地址。

逻辑地址、有效地址:⽆论CPU在什么模式下,段内偏移地址⼜称为有效地址或者逻辑地址(只是叫法不⼀样罢了),例如实模式下 “mov ax,
[0x7c00]”,0x7c00就是逻辑地址(或有效地址),但这条指令最终操作的物理地址是DS*16+0x7c00。

微机原理及接口技术问答题

微机原理及接口技术问答题

“微机原理与接口技术”1. 微机系统的硬件由哪几部分组成?答:三部分:微型计算机(微处理器,存储器,I/0接口,系统总线),外围设备,电源。

2. 什么是微机的总线,分为哪三组?答:是传递信息的一组公用导线。

分三组:地址总线,数据总线,控制总线。

3. 8086/8088CPU的内部结构分为哪两大模块,各自的主要功能是什么?答:总线接口部件(BIU)功能:根据执行单元EU的请求完成CPU与存储器或IO设备之间的数据传送。

执行部件(EU),作用:从指令对列中取出指令,对指令进行译码,发出相应的传送数据或算术的控制信号接受由总线接口部件传送来的数据或把数据传送到总线接口部件进行算术运算。

4. 8086指令队列的作用是什么?答:作用是:在执行指令的同时从内存中取了一条指令或下几条指令,取来的指令放在指令队列中这样它就不需要象以往的计算机那样让CPU轮番进行取指和执行的工作,从而提高CPU的利用率。

5. 8086的存储器空间最大可以为多少?怎样用16位寄存器实现对20位地址的寻址?完成逻辑地址到物理地址转换的部件是什么?答:8086的存储器空间最大可以为2^20(1MB);8086计算机引入了分段管理机制,当CPU寻址某个存储单元时,先将段寄存器内的内容左移4位,然后加上指令中提供的16位偏移地址形成20位物理地址。

6. 段寄存器CS=1200H,指令指针寄存器IP=FF00H,此时,指令的物理地址为多少?指向这一物理地址的CS值和IP值是唯一的吗? 答:指令的物理地址为21F00H;CS值和IP值不是唯一的,例如:CS=2100H,IP=0F00H。

7. 设存储器的段地址是4ABFH,物理地址为50000H,其偏移地址为多少?答:偏移地址为54100H。

(物理地址=段地址*16+偏移地址)8. 8086/8088CPU有哪几个状态标志位,有哪几个控制标志位?其意义各是什么?答:状态标志位有6个: ZF,SF,CF,OF,AF,PF。

第4讲 32位微处理器Pentium

第4讲 32位微处理器Pentium
13
四、Pentium的指令流水线技术
1.组成
总线接口部件
连接CPU和其他部件,取指令和存取操作数 能接收多个总线请求,按优先级选择
指令预取部件
从存储器读取指令到指令预取队列 使用总线的优先级最低
指令译码部件
对指令译码,然后放入译码指令队列
指令执行部件
U、V流水线(分别由ALU、一系列寄存器、地址生 成电路和连接数据Cache的接口组成) 14 执行指令
30
六、Pentium的主要信号
5.系统控制信号
INIT:系统初始化信号
6.总线仲裁信号
BREQ:总线周期请求信号 BOFF:强制让出总线请求
31
七、Pentium的总线状态
1.总线状态
T1状态:地址信号有效,ADS信号也有效。 T2状态:数据出现在数据总线上,如果BRDY有效, 则当前周期为突发式总线周期,否则为单数据传输的 总线周期。 T12状态:流水线式总线周期的特有状态。此时,系 统中有两个总线周期并行进行。第一个总线周期进入 T2状态,并且BRDY有效,第二个总线周期进入T1状 态,地址和ADS有效。
1
一、Pentium的先进技术
1.先进的体系结构 2.CISC和RISC相结合的技术 3.超标量流水线技术(最重要的创新技术) 4.先进的分支预测技术
2
一、Pentium的先进技术
1.先进的体系结构
内部总线32位,而外部数据总线64位,数 据传输率提高一倍。 设置了独立的片内指令Cache和数据Cache, 处理器能同时读一个指令字和一个数据字,避 免了访存冲突导致的不命中。 使用了两条流水线并行执行指令。 内部集成了增强型浮点处理部件。 对常用指令如ADD、MUL、INC、PUSH等采用 硬件实现,大大提高了执行速度。 采用分段和分页两级存储管理机制。 ……

线性地址逻辑地址和物理地址的区别

线性地址逻辑地址和物理地址的区别

线性地址逻辑地址和物理地址的区别:线性地址是逻辑地址到物理地址变换之间的中间层,是处理器可寻址的内存空间(称为线性地址空间)中的地址。

程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。

如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。

若没有启用分页机制,那么线性地址直接就是物理地址。

不过,在开启分页功能之后,一个线性地址可能没有相对映的物理地址,因为它所对应的内存可能被交换到硬盘中。

32位线性地址可用于定位4GB存储单元。

所谓物理地址,就是指系统内存的真正地址。

对于32 位的操作系统,它的范围为0x00000000~0xFFFFFFFF,共有4GB。

只有当CPU工作于分页模式时,此种类型的地址才会变得非常“有趣”。

本质上,一个物理地址是CPU插脚上可测量的电压。

操作系统通过设立页表将线性地址映射为物理地址。

Windows 2K/XP所用页表布局的某些属性对于调试软件开发人员非常有用。

分页机制把线性地址空间和物理地址空间分别划分为大小相同的块。

这样的块称为页。

通过在线性地址空间的页与物理地址空间的页之间建立映射,分页机制可以实现线性地址到物理地址的转换。

线性地址空间的页与物理地址空间的页之间的映射可根据需要来确定。

线性地址空间的任何一页,可以映射为物理地址空间中的任何一页。

逻辑地址(Logical Address)是指由程式产生的和段相关的偏移地址部分。

例如,你在进行C语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。

只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel保护模式下程式执行代码段限长内的偏移地址(假定代码段、数据段如果完全相同)。

应用程式员仅需和逻辑地址打交道,而分段和分页机制对你来说是完全透明的,仅由系统编程人员涉及。

逻辑地址、线性地址、物理地址和虚拟地址理解

逻辑地址、线性地址、物理地址和虚拟地址理解

逻辑地址(Logical Address)是指由程式产生的和段相关的偏移地址部分。

例如,你在进行C语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。

只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel保护模式下程式执行代码段限长内的偏移地址(假定代码段、数据段如果完全相同)。

应用程式员仅需和逻辑地址打交道,而分段和分页机制对你来说是完全透明的,仅由系统编程人员涉及。

应用程式员虽然自己能直接操作内存,那也只能在操作系统给你分配的内存段操作。

线性地址(Linear Address)是逻辑地址到物理地址变换之间的中间层。

程式代码会产生逻辑地址,或说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。

如果启用了分页机制,那么线性地址能再经变换以产生一个物理地址。

若没有启用分页机制,那么线性地址直接就是物理地址。

Intel 80386的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。

物理地址(Physical Address)是指出目前CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。

如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。

如果没有启用分页机制,那么线性地址就直接成为物理地址了。

虚拟内存(Virtual Memory)是指计算机呈现出要比实际拥有的内存大得多的内存量。

因此他允许程式员编制并运行比实际系统拥有的内存大得多的程式。

这使得许多大型项目也能够在具有有限内存资源的系统上实现。

一个非常恰当的比喻是:你不必非常长的轨道就能让一列火车从上海开到北京。

你只需要足够长的铁轨(比如说3公里)就能完成这个任务。

采取的方法是把后面的铁轨即时铺到火车的前面,只要你的操作足够快并能满足需求,列车就能象在一条完整的轨道上运行。

80386微处理器

80386微处理器




每当任务切换时,处理器将把TS置为1。 MP——监控协处理器位 MP为1时,表示有协处理器在工作。 EM——模拟协处理器控制位 EM为1时,表示用软件仿真协处理器。 ET ——协处理器扩展类型 0:80287协处理器;1:80387协处理器;
2.CR2 ——控制寄存器2 CR2称为页面故障线性地址寄存器,用于发生页面 访问异常时报告出错信息。 3. CR3 ——控制寄存器3 CR3称为页组目录基址寄存器,用于存放页目录表 的物理基地址。如下图所示。(分页时用到)

物理地址 页式管理机构不工作时,物理地址 = 线性地址;
页式管理机构工作时,物理地址 = F(线性地址)
分段管理
为了实现分段管理,80386把有关段的 信息存放在一个称为段描述符(简称描述
符)的8个字节长的数据结构中,并把系统
中所有的描述符编成一张表,以便硬件查 找和识别。 80386共设置了3种描述符表,即全局 描述符表GDT、局部描述符表LDT和中断
四、80386 的三种工作模式
80386有3种工作模式:
实地址模式(Real Address Mode),简称为 实模式; 保护虚拟地址模式(Protected Virtual Address Mode),也叫保护模式; 虚拟8086模式(Virtual Address 8086 Mode),简称为V86模式。
任务寄存器(TR) (图9.6)
例3.假设GDT的基地址为00011000h,TR = 3208h,问TSS 描 述符的地址范围?
解:TR = 0011001000001000 TI = 0, TSS描述符在GDT中 索引 = 0011001000001 TSS描述符的起始地址: GDT的基地址+索引×8 = 00011000h+ 0011001000001×8 = 00014208h TSS描述符的地址范围(占8字节): 00014208h ~ 0001420Fh

0. 基础知识 三种地址

0. 基础知识 三种地址

Linux下逻辑地址-线性地址-物理地址图解一、逻辑地址转线性地址可以看到ds值为0x7b, 转换成二进制为 00000000 01111011,TI字段值为0,表示使用GDT,GDT索引值为 01111,即十进制15,对应的就是GDT内的__USER_DATA 用户数据段描述符。

从上面可以看到,Linux在x86的分段机制上运行,却通过一个巧妙的方式绕开了分段。

Linux主要以分页的方式实现内存管理。

二、线性地址转物理地址前面说了Linux中逻辑地址等于线性地址,那么线性地址怎么对应到物理地址呢?这个大家都知道,那就是通过分页机制,具体的说,就是通过页表查找来对应物理地址。

准确的说分页是CPU提供的一种机制,Linux只是根据这种机制的规则,利用它实现了内存管理。

在保护模式下,控制寄存器CR0的最高位PG位控制着分页管理机制是否生效,如果PG=1,分页机制生效,需通过页表查找才能把线性地址转换物理地址。

如果PG=0,则分页机制无效,线性地址就直接做为物理地址。

分页的基本原理是把内存划分成大小固定的若干单元,每个单元称为一页(page),每页包含4k字节的地址空间(为简化分析,我们不考虑扩展分页的情况)。

这样每一页的起始地址都是4k字节对齐的。

为了能转换成物理地址,我们需要给CPU提供当前任务的线性地址转物理地址的查找表,即页表(page table)。

注意,为了实现每个任务的平坦的虚拟内存,每个任务都有自己的页目录表和页表。

为了节约页表占用的内存空间,x86将线性地址通过页目录表和页表两级查找转换成物理地址。

32位的线性地址被分成3个部分:最高10位 Directory 页目录表偏移量,中间10位 Table是页表偏移量,最低12位Offset是物理页内的字节偏移量。

页目录表的大小为4k(刚好是一个页的大小),包含1024项,每个项4字节(32位),项目里存储的内容就是页表的物理地址。

如果页目录表中的页表尚未分配,则物理地址填0。

逻辑地址与物理地址的区别

逻辑地址与物理地址的区别

逻辑地址与物理地址的区别?逻辑地址(Logical Address)是指由程序产生的与段相关的偏移地址部分。

例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。

只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。

应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明的,仅由系统编程人员涉及。

应用程序员虽然自己可以直接操作内存,那也只能在操作系统给你分配的内存段操作。

线性地址(Linear Address)是逻辑地址到物理地址变换之间的中间层。

程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。

如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。

若没有启用分页机制,那么线性地址直接就是物理地址。

Intel 80386的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。

物理地址(Physical Address)是指出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。

如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。

如果没有启用分页机制,那么线性地址就直接成为物理地址了。

虚拟内存(Virtual Memory)是指计算机呈现出要比实际拥有的内存大得多的内存量。

因此它允许程序员编制并运行比实际系统拥有的内存大得多的程序。

这使得许多大型项目也能够在具有有限内存资源的系统上实现。

一个很恰当的比喻是:你不需要很长的轨道就可以让一列火车从上海开到北京。

你只需要足够长的铁轨(比如说3公里)就可以完成这个任务。

采取的方法是把后面的铁轨立刻铺到火车的前面,只要你的操作足够快并能满足要求,列车就能象在一条完整的轨道上运行。

微机原理知识点

微机原理知识点

《微型计算机及其接口技术》是计算机应用专业(专科)非常重要的一门专业课,也是难度较大的一门课。

考生不但要熟悉计算机硬件的功能特点,还要熟练的编制、调试软件,对考生的综合能力要求比较高。

本课程的先修课程为:1.模拟电路与数字电路2.计算机组成原理3.汇编语言程序设计《微型计算机及其接口技术》复习大纲是我根据教科书内容反复整理与总结的,剔除了教材上的冗余,精简了基本理论。

若考生在读懂、读通教科书的基础上,能全部掌握此大纲的内容(一定要全部掌握,本大纲已经很精简了),那么通过考试会很有把握的。

另外,希望考生准备一本南京大学出版的《微型计算机及其接口技术应试指导》在手边,以便查阅。

《微型计算机及其接口技术》复习大纲第1章微型计算机概论微处理器——由运算器、控制器、寄存器阵列组成微型计算机——以微处理器为基础,配以内存以及输入输出接口电路和相应的辅助电路而构成的裸机微型计算机系统——由微型计算机配以相应的外围设备及其它软件而构成的系统单片机——又称为“微控制器”和“嵌入式计算机”,是单片微型计算机单板机——属于计算机系统总线——是CPU、内存、I/O接口之间相互交换信息的公共通路,由数据总线(双向)、地址总线和控制总线组成微机系统中的三种总线:1.片总线,元件级总线2.内总线(I-BUS),系统总线3.外总线(E-BUS),通信总线第2章80X86处理器8086CPU两个独立的功能部件:1.执行部件(EU),由通用计算器、运算器和EU控制系统等组成,EU从BIU的指令队列获得指令并执行2.总线接口部件(BIU),由段寄存器、指令指针、地址形成逻辑、总线控制逻辑和指令队列等组成,负责从内存中取指令和取操作数8086CPU的两种工作方式:1.最小方式,MN/MX接+5V(MX为低电平),用于构成小型单处理机系统支持系统工作的器件:(1)时钟发生器,8284A(2)总线锁存器,74LS373(3)总线收发器,74LS245控制信号由CPU提供2.最大方式,MN/MX接地(MX为低电平),用于构成多处理机和协处理机系统支持系统工作的器件:(1)时钟发生器,8284A(2)总线锁存器,74LS373(3)总线收发器,74LS245(4)总线控制芯片,8288控制信号由8288提供指令周期、总线周期、时钟周期的概念及其相互关系:1.执行一条指令所需要的时间称为指令周期2.一个CPU同外部设备和内存储器之间进行信息交换过程所需要的时间称为总线周期3.时钟脉冲的重复周期称为时钟周期4.一个指令周期由若干个总线周期组成,一个总线周期又由若干个时钟周期组成5. 8086CPU的总线周期至少由4个时钟周期组成6.总线周期完成一次数据传输包括:传送地址,传送数据等待周期——在等待周期期间,总线上的状态一直保持不变空闲周期——总线上无数据传输操作MMX——多媒体扩展SEC——单边接口,PENTIUM2的封装技术SSE——数据流单指令多数据扩展,PENTIUM3的指令集乱序执行——不完全按程序规定的指令顺序执行(PENTIUM PRO)推测执行——遇到转移指令时,不等结果出来便先推测可能往哪里转移以便提前执行(PENTIUM PRO)8086CPU逻辑地址与物理地址的关系:1. CPU与存储器交换信息,使用20位物理地址2.程序中所涉及的都是16位逻辑地址3.物理地址==段基值* 16 +偏移地址4. 20条地址线== 1M,(00000H ~ FFFFFH);16条数据线== 64K,(0000H ~ FFFFH)5.段起始地址必须能被16整除8086的结构,各引脚功能,全部要掌握(教科书P14 ~ P18)复位(RESET)时CPU内寄存器状态:1. PSW(FR)、IP、DS、SS、ES清零2. CS置FFFFH3.指令队列变空8086CPU外部总线16位,8088CPU外部总线8位80286CPU:1. 16位CPU2.两种工作方式:(1)实地址方式,使用20条地址线,兼容8086全部功能(2)保护虚地址方式,使用24条地址线,有16M的寻址能力80386CPU:1. 32位CPU2.数据线32位3.地址线32位,直接寻址4GB4.内部寄存器32位5.三种存储器地址空间:逻辑地址,线性地址,物理地址6.三种工作方式:实方式,保护方式,虚拟8086方式80486CPU:1.采用RISC2.集成FPU和CACHE第3章存储器及其接口半导体存储器分类:1.随机存取存储器,RAM(1)静态RAM,SRAM (HM6116,2K * 8)(2)动态RAM,DRAM,需要刷新电路(2164,64K * 1)2.只读存储器,ROM(1) PROM,可编程ROM,一次性写入ROM(2) EPROM,可擦除可编程ROM (INTEL2732A,4K * 8)(3) EEPROM,电可擦除可编程ROM半导体存储器的性能指标:1.存储容量2.存取速度(用两个时间参数表示:存取时间,存取周期)3.可靠性4.性能/价格比内存条及其特点:内存条是一个以小型板卡形式出现的存储器产品,它的特点是:安装容易,便于用户进行更换,也便于扩充内存容量HM6116、2164、INTEL2732A的外特性INTEL2732A的6种工作方式:1.读2.输出禁止3.待用4.编程5.编程禁止6. INTEL标识符实现片选控制的三种方法:1.全译码2.部分译码(可能会产生地址重叠)3.线选法地址重叠——多个地址指向同一存储单元存储器芯片同CPU连接时应注意的问题:1. CPU总线的负载能力问题2. CPU的时序同存储器芯片的存取速度的配合问题16位微机系统中,内存储器芯片的奇偶分体:1. 1M字节分成两个512K字节(偶存储体,奇存储体)2.偶存储体同低8位数据总线(D7 ~ D0)相连接,奇存储体同高8位数据总线(D15 ~ D8)相连接3. CPU的地址总线A19 ~ A1同两个存储体中的地址线A18 ~ A0相连接,CPU地址总线的最低位A0和BHE(低电平)用来选择存储体4.要访问的16位字的低8位字节存放在偶存储体中,称为对准字,访存只需要一个总线周期;要访问的16位字的低8位字节存放在奇存储体中,称为未对准字,访存需要两个总线周期5. 8088CPU数据总线是8位,若进行字操作,则需要两个总线周期,第一个周期访问低位,第二个周期访问高位存储器的字位扩展,考试必考(教科书P71习题2、习题6)74LS138的综合应用必须熟练掌握,考试必考:(教科书P55 ~ P58;P71 ~ P72习题7、习题8;P231第五。

物理地址逻辑地址虚拟地址的概念

物理地址逻辑地址虚拟地址的概念

一、概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。

——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。

所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。

也许错误的理解更利于形而上的抽像。

虚拟内存(virtual memory)这是对整个内存(不要与机器上插那条对上号)的抽像描述。

它是相对于物理内存来讲的,可以直接理解成“不直实的”,“假的”内存,例如,一个0x08000000内存地址,它并不对就物理地址上那个大数组中0x08000000 - 1那个地址元素;之所以是这样,是因为现代操作系统都提供了一种内存管理的抽像,即虚拟内存(virtual memory)。

进程使用虚拟内存中的地址,由操作系统协助相关硬件,把它“转换”成真正的物理地址。

这个“转换”,是所有问题讨论的关键。

有了这样的抽像,一个程序,就可以使用比真实物理地址大得多的地址空间。

(拆东墙,补西墙,银行也是这样子做的),甚至多个进程可以使用相同的地址。

不奇怪,因为转换后的物理地址并非相同的。

——可以把连接后的程序反编译看一下,发现连接器已经为程序分配了一个地址,例如,要调用某个函数A,代码不是call A,而是call 0x0811111111 ,也就是说,函数A的地址已经被定下来了。

没有这样的“转换”,没有虚拟地址的概念,这样做是根本行不通的。

打住了,这个问题再说下去,就收不住了。

逻辑地址(logical address)Intel为了兼容,将远古时代的段式内存管理方式保留了下来。

分配DMA缓冲区时LogicalAddress与PhysicalAddress的疑问

分配DMA缓冲区时LogicalAddress与PhysicalAddress的疑问

分配DMA缓冲区时LogicalAddress与PhysicalAddress的疑惑分类:Windows 驱动开发2013-04-27 18:20 250人阅读评论(0) 收藏举报DMA操作前需要分配物理地址连续的一个Buffer,AllocateCommonBuffer函数提供了这个功能,该函数原型如下:PVOID AllocateCommonBuffer(_In_ PDMA_ADAPTER DmaAdapter,_In_ ULONG Length,_Out_ PPHYSICAL_ADDRESS LogicalAddress,_In_ BOOLEAN CacheEnabled);第三个参数有点不是很能理解,PPHYSICAL_ADDRESS LogicalAddress, 至少从定义的变量名上看,微软似乎在暗示我:逻辑地址和物理地址是相同的这样一个事实。

虚拟地址到物理地址的转化方法是与体系结构相关的。

有分段、分页两种方式。

x86 cpu下分段分页都是支持的。

MMU负责从虚拟地址到物理地址的转化。

逻辑地址是段标识+段内偏移量的形式,MMU通过查询段表,可以把逻辑地址转化为线性地址。

如果cpu没有开启分页功能,那么线性地址就是物理地址;如果cpu开启了分页功能,MMU还需要查询页表来将线性地址转化为物理地址,不同的逻辑地址可以映射到同一个线性地址上;不同的线性地址也可以映射到同一个物理地址上;所以是多对一的关系。

另外,同一个线性地址,在发生换页以后,也可能被重新装载到另外一个物理地址上。

所以这种多对一的映射关系也会随时间发生变化。

逻辑地址,线性地址,物理地址的关系总结如下:逻辑地址(段机制转换)----> 线性地址(页机制转换)---->物理地址从另一方面讲,在32位系统下使用32位的PCIe卡,即使逻辑地址和物理地址是相同的,但在64位的系统下,AllocateCommonBuffer返回的物理地址可能高于4GB,但逻辑地址肯定是低于4GB的,这种情况下逻辑地址和物理地址不可能相等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

逻辑地址线性地址物理地址三个地址有什么联系
逻辑地址线性地址物理地址
一、逻辑地址转线性地址
我们写个最简单的helloworld程序,用gcc编译,再反汇编后
会看到以下指令:
mov0x80495b0,%eax
这里的内存地址0x80495b0就是一个逻辑地址,必须加上隐含的DS数据段的基地址,才能构成线性地址。

也就是说0x80495b0是当
前任务的DS数据段内的偏移。

在x86保护模式下,段的信息(段基线性地址、长度、权限等)即段描述符占8个字节,段信息无法直接存放在段寄存器中(段寄存器
只有2字节)。

Intel的设计是段描述符集中存放在GDT或LDT中,
而段寄存器存放的是段描述符在GDT或LDT内的索引值(index)。

这样的情况下Linux只用到了GDT,不论是用户任务还是内核任务,都没有用到LDT。

GDT的第12和13项段描述符是__KERNEL_CS
和__KERNEL_DS,第14和15项段描述符是__USER_CS和__USER_DS。

内核任务使用__KERNEL_CS和__KERNEL_DS,所有的用户任务共用
__USER_CS和__USER_DS,也就是说不需要给每个任务再单独分配段
描述符。

内核段描述符和用户段描述符虽然起始线性地址和长度都
一样,但DPL(描述符特权级)是不一样的。

__KERNEL_CS和
__KERNEL_DS的DPL值为0(最高特权),__USER_CS和__USER_DS的DPL值为3。

用gdb调试程序的时候,用inforeg显示当前寄存器的值:
cs0x73115
ss0x7b123
ds0x7b123
es0x7b123
可以看到ds值为0x7b,转换成二进制为0000000001111011,TI
字段值为0,表示使用GDT,GDT索引值为01111,即十进制15,对
应的就是GDT内的__USER_DS用户数据段描述符。

从上面可以看到,Linux在x86的分段机制上运行,却通过一个
巧妙的方式绕开了分段。

Linux主要以分页的方式实现内存管理。

二、线性地址转物理地址
前面说了Linux中逻辑地址等于线性地址,那么线性地址怎么对应到物理地址呢?这个大家都知道,那就是通过分页机制,具体的说,就是通过页表查找来对应物理地址。

准确的说分页是CPU提供的一种机制,Linux只是根据这种机制
的规则,利用它实现了内存管理。

在保护模式下,控制寄存器CR0的最高位PG位控制着分页管理
机制是否生效,如果PG=1,分页机制生效,需通过页表查找才能把
线性地址转换物理地址。

如果PG=0,则分页机制无效,线性地址就
直接做为物理地址。

分页的基本原理是把内存划分成大小固定的若干单元,每个单元称为一页(page),每页包含4k字节的地址空间(为简化分析,我们
不考虑扩展分页的情况)。

这样每一页的起始地址都是4k字节对齐的。

为了能转换成物理地址,我们需要给CPU提供当前任务的线性
地址转物理地址的查找表,即页表(pagetable)。

注意,为了实现每
个任务的平坦的虚拟内存,每个任务都有自己的页目录表和页表。

为了节约页表占用的内存空间,x86将线性地址通过页目录表和
页表两级查找转换成物理地址。

32位的线性地址被分成3个部分:
最高10位Directory页目录表偏移量,中间10位Table是页表偏移量,最低12位Offset是物理页内的字节偏移量。

页目录表的大小为4k(刚好是一个页的大小),包含1024项,每个项4字节(32位),项目里存储的内容就是页表的物理地址。

如果页目录表中的页表尚未分配,则物理地址填0。

页表的大小也是4k,同样包含1024项,每个项4字节,内容为最终物理页的物理内存起始地址。

每个活动的任务,必须要先分配给它一个页目录表,并把页目录表的物理地址存入cr3寄存器。

页表可以提前分配好,也可以在用到的时候再分配。

还是以mov0x80495b0,%eax中的地址为例分析一下线性地址转物理地址的过程。

前面说到Linux中逻辑地址等于线性地址,那么我们要转换的线性地址就是0x80495b0。

转换的过程是由CPU自动完成的,Linux所要做的就是准备好转换所需的页目录表和页表(假设已经准备好,给页目录表和页表分配物理内存的过程很复杂,后面再分析)。

内核先将当前任务的页目录表的物理地址填入cr3寄存器。

线性地址0x80495b0转换成二进制后是00001000000001001001010110110000,最高10位0000100000的十进制是32,CPU查看页目录表第32项,里面存放的是页表的物理地址。

线性地址中间10位0001001001的十进制是73,页表的第73项存储的是最终物理页的物理起始地址。

物理页基地址加上线性地址中最低12位的偏移量,CPU就找到了线性地址最终对应的物理内存单元。

我们知道Linux中用户进程线性地址能寻址的范围是0-3G,那么是不是需要提前先把这3G虚拟内存的页表都建立好呢?一般情况下,物理内存是远远小于3G的,加上同时有很多进程都在运行,根本无法给每个进程提前建立3G的线性地址页表。

Linux利用CPU的一个机制解决了这个问题。

进程创建后我们可以给页目录表的表项值都填0,CPU在查找页表时,如果表项的内容为0,则会引发一个缺页异常,进程暂停执行,Linux内核这时候可以通过一系列复杂的算法给分配一个物理页,并把物理页的地址填入表项中,进程再
恢复执行。

当然进程在这个过程中是被蒙蔽的,它自己的感觉还是正常访问到了物理内存。

看过“逻辑地址线性地址物理地址三个地址有什么联系”的人还看了:。

相关文档
最新文档