搜档网
当前位置:搜档网 › 什么是物理和物理地址

什么是物理和物理地址

什么是物理和物理地址
什么是物理和物理地址

通常就“物理”这个词而言,是指直接对应硬件存在的对象。

网络中的地址分为物理地址和逻辑地址两类,与网络层的IP地址、传输层的端口号以及应用层的用户名相比较,局域网的MAC层地址是由硬件来处理的,叫做物理地址或硬件地址.IP地址、传输层的端口号以及应用层的用户名是逻辑地址(由软件处理)。MAC地址就是物理地址.

大多数局域网通过为网卡分配一个硬件地址来标识一个联网的计算机或其他设备.所谓物理地址是指固化在网卡EPROM中的地址,这个地址应该保证在全网是唯一的.IEEE注册委员会为每一个生产厂商分配物理地址的前三字节,即公司标识.后面三字节由厂商自行分配.即一个厂商获得一个前三字节的地址可以生产的网卡数量是16777216块.即一块网卡对应一个物理地址.也就是说对应物理地址的前三字节可以知道他的生产厂商.

如果固化在网卡中的地址为002514895423,那么这块网卡插到主机A中,主机A 的地址就是002514895423,不管主机A是连接在局域网1上还是在局域网2上,也不管这台计算机移到什么位置,主机A的物理地址就是002514895423 .它是不变的,而且不会和世界上任何一台计算机相同.当主机A发送一帧时,网卡执行发送程序时,直接将这个地址作为源地址写入该帧.当主机A接收一帧时,直接将这个地址与接收帧目的地址比较,以决定是否接收.

物理地址一般记作00-25-14-89-54-23(主机A的地址是002514895423)

物理地址就是存储器的实际地址,它是指CPU和存储器进行数据交换时所使用的地址.逻辑地址是在程序中使用的地址,由段地址和偏移地址两部分组成.

物理地址

MAC(Media Access Control, 介质访问控制)地址是识别LAN(局域网)节点的标识。网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写),它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址。

也就是说,在网络底层的物理传输过程中,是通过物理地址来识别主机的,它一般也是全球唯一的。比如,著名的以太网卡,其物理地址是48bit(比特位)的整数,如:44-45-53-54-00-00,以机器可读的方式存入主机接口中。以太网地址管理机构(IEEE)将以太网地址,也就是48比特的不同组合,分为若干独立的连续地址组,生产以太网网卡的厂家就购买其中一组,具体生产时,逐个将唯一地址赋予以太网卡。

形象的说,MAC地址就如同我们身份证上的身份证号码,具有全球唯一性。

如何获取本机的MAC?

对于数量不多的几台机器,我们可以这样获取MAC地址:在Windows 98/Me中,依次单击“开始”→“运行” →输入“winipcfg”→回车。即可看到MAC地址。

在Windows 2000/XP中,依次单击“开始”→“运行”→输入“CMD”→回车→输入“ipconfig /all”→回车。即可看到MAC地址。

---------------------

逻辑地址是由:

16位段选择符

32位偏移量组成。

对逻辑地址的访问权和访问范围都要给以检查。若通过检查,则

32位偏移量+基地址→线性地址。

段描述符内包括的信息有:段在存储器中的位置、这个段的基地址、段的大小、段描述符控制信息等。段描述符保存在段描述符表中。

完整word版逻辑地址转换为物理地址

】若在一分页存储管理系统中,某作业的页表如下所示。已知页面大2【例转化为相应,5012,10112148,4000小为1024字节,试将逻辑地址的物 理地址。 块号页号20 31 12 63 分析页式存储管理的地址结构是一维的,即逻辑地址(或物理地址)只用一个数值即可表示。若给定逻辑地址A,页面的大小为L,则页号p和页内地址d可按照下式求得: p=int [A/L]d=A mod L 其中,int是取整函数(取数值的整数部分),mod是取余函数(取数值的余 数部分)。 下图显示了页式管理系统的地址转换机构。

页表的作用是实现从页号到物理块号的地址映射。以逻辑地址的页号检索页表, 得到该页的物理块号;同时将页内地址d直接送入物理地址寄存器的块内地址 字段中。这样物理块号和块内地址拼接成了实际访问内存的地址,从而完成了从逻辑地址到物理地址的转换。 所以物理地址的计算公式为: 物理地址=块的大小(即页的大小L)′块号f+页内地址d 解本题中,为了描述方便,设页号为p,页内位移为d,则: (1)对于逻辑地址1011,p=int(1011/1024)=0,d=1011 mod 1024=1011。查页表第0页在第2块,所以物理地址为1024′2+1011=3059。 (2)对于逻辑地址2148,p=int(2148/1024)=2,d=2148 mod 1024=100。查页表第2页在第1块,所以物理地址为1024+100 。1124= (3)对于逻辑地址4000,p=int(4000/1024)=3,d=4000 mod 1024=928。查页表第3页在第6块,所以物理地址为1024′6+928=7072。 (4)对于逻辑地址5012,p=int(5012/1024)=4,d=5012

逻辑地址转换为物理地址

【例2】若在一分页存储管理系统中,某作业的页表如下所示。已知页面大小为1024字节,试将逻辑地址1011,2148,4000,5012转化为相应的物理地址。 页号块号 0 1 2 32 3 1 6 分析页式存储管理的地址结构是一维的,即逻辑地址(或物理地址)只用一个数值即可表示。若给定逻辑地址A,页面的大小为L,则页号p和页内地址d 可按照下式求得: p=int [A/L]d=A mod L 其中,int是取整函数(取数值的整数部分),mod是取余函数(取数值的余数部分)。 下图显示了页式管理系统的地址转换机构。

页表的作用是实现从页号到物理块号的地址映射。以逻辑地址的页号检索页表,得到该页的物理块号;同时将页内地址d直接送入物理地址寄存器的块内地址字段中。这样物理块号和块内地址拼接成了实际访问内存的地址,从而完成了从逻辑地址到物理地址的转换。 所以物理地址的计算公式为: 物理地址=块的大小(即页的大小L)′块号f+页内地址d 解本题中,为了描述方便,设页号为p,页内位移为d,则: (1)对于逻辑地址1011,p=int(1011/1024)=0,d=1011 mod 1024=1011。查页表第0页在第2块,所以物理地址为1024′2+1011=3059。 (2)对于逻辑地址2148,p=int(2148/1024)=2,d=2148 mod 1024=100。查页表第2页在第1块,所以物理地址为1024+100=1124。

(3)对于逻辑地址4000,p=int(4000/1024)=3,d=4000 mod 1024=928。查页表第3页在第6块,所以物理地址为1024′6+928=7072。 (4)对于逻辑地址5012,p=int(5012/1024)=4,d=5012 mod 1024=916。因页号超过页表长度,该逻辑地址非法。 【例3】某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB。假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如下: 页号物理块号 05 110 24 37 则逻辑地址0A5C(H)所对应的物理地址是什么? 分析页式存储管理的逻辑地址分为两部分:页号和页内地址。 由已知条件“用户编程空间共32个页面”,可知页号部分占5位;由“每页为1KB”,1K=210,可知内页地址占10位。由“内存为16KB”,可知有16块,块号为4位。

逻辑地址与物理地址

逻辑地址与物理地址 物理地址是外部连接使用的、唯一的,它是“与地址总线相对应”;而逻辑地址是内部和编程使用的、并不唯一。在内存中的实际地址就是所谓的“物理地址”,而逻辑地址就是逻辑段管理内存而形成的。例如,你在进行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)单元。 存储单元的地址可以用段基值和段内偏移量来表示,段基值确定它所在的段居于整个存储空间的位置,偏移量确定它在段内的位置,这种地址表示方式称为逻辑地址。 8086对外连接使用一个20位的线性地址唯一确定一个存储单元,也就是说:对于每个存储器单元都有的一个唯一的20位地址,我们称为该单元的物理地址或绝对地址。 8086在内部结构中和程序设计时采用逻辑段管理内存,就形成了逻辑地址。它的表达形式 为“段基地址 : 偏移地址”。 逻辑地址=段基地址 : 偏移地址 ?段基地址(Segment)——逻辑段在主存中的起始位置,简称段地址。由于8086规定段开始于模16地址,所以省略低4位0不显式表达,段基地址就可以用16位数据表示。 ?偏移地址(Offset)——主存单元距离段起始位置的偏移量(Displacement)。由于限定每段不超过64KB(2^16),所以偏移地址也可以用16位数据表示。

什么是物理地址 逻辑地址

什么是物理地址逻辑地址 网络中的地址分为物理地址和逻辑地址两类,与网络层的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比特的不同组合,分为若干独立的连续地址组,生产以太网网卡的厂家就购买其中一组,具体生产时,逐个将唯一地址赋予以太网卡。 形象的说,MAC地址就如同我们身份证上的身份证号码,具有全球唯一性。 如何获取本机的MAC? 对于数量不多的几台机器,我们可以这样获取MAC地址:在Windows 98/Me中,依次单击“开始”→“运行” →输入“winipcfg”→回车。即可看到MAC地址。 在Windows 2000/XP中,依次单击“开始”→“运行”→输入“CMD”→回车→输入“ipconfig /all”→回车。即可看到MAC地址。 --------------------- 逻辑地址是由: 16位段选择符 32位偏移量组成。 对逻辑地址的访问权和访问范围都要给以检查。若通过检查,则 32位偏移量+基地址→线性地址。

分页存储--逻辑地址转物理地址

十六进制逻辑地址转物理地址 则相应的物理地址是多少? 解: 第一步:逻辑地址2F6AH 转为二进制变成:0010111101101010。 (“H ”不用不用转二进制) 第二步:由于页面大小为4KB 字节, (4KB=4*1KB ,4=2的2次方,1KB=1024=2的10次方,所以4KB=2的(“页内地址”,又叫“页内偏移量”,或“页内位移”) 第三步:由于逻辑地址的后12位为页内地址,所以剩下的前4位为页号: 所以页号为2(页号的二进制0010化为十进制,等于2) 16位 2 6 F A

第五步:由于页号为2,所以从页表中可以查出对应的帧号为11,而“11”的十六进制为B 第六步:所以逻辑地址对应的物理地址为: 页号 页内地址 1011 111101101010 化成十六进制为:BF6AH 。 (实际把原来逻辑地址2F6AH 的2换成B 就可以了,因为页内地址没变) 答案:物理地址为BF6AH 。 逻辑地址2F6AH 的2

十进制逻辑地址转物理地址 已知某个分页系统,页面大小为1K(即1024字节),某一个作业有4个页面,分别装入到主存的第3、4、6、8块中,求逻辑地址2100对应的物理地址。 解: 第一步:求逻辑地址的页号 = 2100 / 1024 = 2 (整除) 第二步:求页内偏移量 = 2100 % 1024 = 52 (取余) 第三步:产生页表 第四步:根据逻辑地址的页号查出物理地址的帧号: 逻辑地址的第2页对应物理地址第6页。 第五步:求出物理地址 = 6 * 1024 + 52 = 6196

页面大小 6 * 1024 + 52 = 6196 物理地址 页面大小 “虚地址”、“逻辑地址”、“相对地址”这三个概念是等价的。 “实地址”、“物理地址”、“绝对地址”这三个概念是等价的。

EMC_DMX存储的物理架构与逻辑架构

EMC DMX存储的物理架构与逻辑架构 一.DMX存储概述 DMX存储硬件的物理与逻辑架构能够实现最大限度的将一个lun 的io 最大限度分摊给硬盘,DAE盘阵的环路; 一个lun 的io 同时也平均分摊给后端的存储cpu . 从后面文档设备连接的介绍可以知晓. DMX的架构做到了最大限度的打散数据以达到性能最大化;性能最大化的硬件配置是一个控制柜加两个与控制柜存储cpu端口直连的磁盘柜; 存储卷vol 以及4个vol meta(绑定) 条带化以后就避免了热点(hot block) 读写的问题. 将任何一个lun的读写io 操作做到由最多的硬件资源来支撑. 硬件资源主要是硬盘,DAE盘阵环路,存储cpu,存储缓存. DMX存储安装配置是通过加载预先配置好的bin file 来部署的; bin file 定义了物理架构与逻辑架构的配置定义整个存储当前硬件配置如何被使用规划好,以后修改配置就得重新装载bin file 也就是重新配置整个存储. Bin file的加载以及整个存储的管理通过console服务器上的软件symmwin来操作,console服务器通过电话线moden 与EMC 支持中心连通. EMC技术人员通过电话线的拨号拨入方式可以做到完全掌控存储设备. 本文档关注存储设备架构方面,管理方面的gk盘,ecc等不做赘述. 二.E MC DMX 存储的物理架构 1.存储外观及各个模块介绍 (1)外观 DMX由一个控制柜加磁盘柜组成, 通常带2个或者5个磁盘柜 我们公司为了性能最大化,配置满配的前端后端卡,只挂2个磁盘柜.再扩展磁盘 机柜只增加空间,性能不增长.

, BAY BAY (2)物理构成模块图示: (打开机柜门前视图)

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

一、概念物理地址(physical address) 用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。 ——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。也许错误的理解更利于形而上的抽像。 虚拟内存(virtual memory) 这是对整个内存(不要与机器上插那条对上号)的抽像描述。它是相对于物理内存来讲的,可以直接理解成“不直实的”,“假的”内存,例如,一个0x08000000内存地址,它并不对就物理地址上那个大数组中0x08000000 - 1那个地址元素; 之所以是这样,是因为现代操作系统都提供了一种内存管理的抽像,即虚拟内存(virtual memory)。进程使用虚拟内存中的地址,由操作系统协助相关硬件,把它“转换”成真正的物理地址。这个“转换”,是所有问题讨论的关键。 有了这样的抽像,一个程序,就可以使用比真实物理地址大得多的地址空间。(拆东墙,补西墙,银行也是这样子做的),甚至多个进程可以使用相同的地址。不奇怪,因为转换后的物理地址并非相同的。 ——可以把连接后的程序反编译看一下,发现连接器已经为程序分配了一个地址,例如,要调用某个函数A,代码不是call A,而是call 0x0811111111 ,也就是说,函数A的地址已经被定下来了。没有这样的“转换”,没有虚拟地址的概念,这样做是根本行不通的。 打住了,这个问题再说下去,就收不住了。 逻辑地址(logical address) Intel为了兼容,将远古时代的段式内存管理方式保留了下来。逻辑地址指的是机器语言指令中,用来指定一个操作数或者是一条指令的地址。以上例,我们说的连接器为A分配的0x08111111这个地址就是逻辑地址。 ——不过不好意思,这样说,好像又违背了Intel中段式管理中,对逻辑地址要求,“一个逻辑地址,是由一个段标识符加上一个指定段内相对地址的偏移量,表示为[段标识符:段内偏移量],也就是说,上例中那个0x08111111,应该表示为[A的代码段标识符: 0x08111111],这样,才完整一些” 线性地址(linear address)或也叫虚拟地址(virtual address) 跟逻辑地址类似,它也是一个不真实的地址,如果逻辑地址是对应的硬件平台段式管理转换前地址的话,那么线性地址则对应了硬件页式内存的转换前地址。 ------------------------------------------------------------- CPU将一个虚拟内存空间中的地址转换为物理地址,需要进行两步:首先将给定一个逻辑地址(其实是段内偏移量,这个一定要理解!!!),CPU要利用其段式内存管理单元,先将为个逻辑地址转换成一个线程地址,再利用其页式内存管理单元,转换为最终物理地址。 这样做两次转换,的确是非常麻烦而且没有必要的,因为直接可以把线性地址抽像给进程。之所以这样冗余,Intel完全是为了兼容而已。

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

逻辑地址线性地址物理地址三个地址有什么联系 逻辑地址线性地址物理地址 一、逻辑地址转线性地址 我们写个最简单的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是物理页内的字节偏移量。

线性地址转物理地址

一、逻辑地址转线性地址 机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到。 我们写个最简单的hello world程序,用gccs编译,再反编译后会看到以下指令: mov 0x80495b0, %eax 这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的DS 数据段的基地址,才能构成线性地址。也就是说 0x80495b0 是当前任务的DS数据段内的偏移。 在x86保护模式下,段的信息(段基线性地址、长度、权限等)即段描述符占8个字节,段信息无法直接存放在段寄存器中(段寄存器只有2字节)。Intel 的设计是段描述符集中存放在GDT或LDT中,而段寄存器存放的是段描述符在GDT或LDT内的索引值(index)。 Linux中逻辑地址等于线性地址。为什么这么说呢?因为Linux所有的段(用户代码段、用户数据段、内核代码段、内核数据段)的线性地址都是从 0x00000000 开始,长度4G,这样线性地址=逻辑地址+ 0x00000000,也就是说逻辑地址等于线性地址了。 这样的情况下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调试程序的时候,用info reg 显示当前寄存器的值: cs 0x73 115 ss 0x7b 123 ds 0x7b 123 es 0x7b 123

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

线性地址逻辑地址和物理地址的区别: 线性地址是逻辑地址到物理地址变换之间的中间层,是处理器可寻址的内存空间(称为线性 地址空间)中的地址。程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。 如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。不过,在开启分页功能之后,一个线性地址可能没有相对映的物理地址,因为它所对应的内存可能被交换到硬盘中。32位线性地址可用于定位4GB存储单元。 所谓物理地址,就是指系统内存的真正地址。对于32 位的操作系统,它的范围为 0x00000000~0xFFFFFFFF,共有4GB。只有当CPU工作于分页模式时,此种类型的地址才会变得非常“有趣”。本质上,一个物理地址是CPU插脚上可测量的电压。操作系统通过设立页表将线性地址映射为物理地址。Windows 2K/XP所用页表布局的某些属性对于调试软件开发人员非常有用。 分页机制把线性地址空间和物理地址空间分别划分为大小相同的块。这样的块称为页。通过在线性地址空间的页与物理地址空间的页之间建立映射,分页机制可以实现线性地址到物理地址的转换。线性地址空间的页与物理地址空间的页之间的映射可根据需要来确定。 线性地址空间的任何一页,可以映射为物理地址空间中的任何一页。 逻辑地址(Logical Address)是指由程式产生的和段相关的偏移地址部分。例如,你在进行C语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel保护模式下程式执行代码段限长内的偏移地址(假定代码段、数据段如果完全相同)。应用程式员仅需和逻辑地址打交道,而分段和分页机制对你来说是完全透明的,仅由系统编程人员涉及。应用程式员虽然自己能直接操作内存,那也只能在操作系统给你分配的内存段操作。 线性地址(Linear Address)是逻辑地址到物理地址变换之间的中间层。程式代码会产生逻辑地址,或说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址能再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。Intel 80x86的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。 物理地址(Physical Address)是指出目前CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页

物理-逻辑结构

1.1、物理结构:由构成数据库的操作系统文件组成,它是从操作系统的角度来分析数据库的组成,在操作系统中可以看得到的文件,也就是说它是数据库在操作系统中的存储位置。常见的物理结构包括:控制文件、数据文件、重作日志文件、归档日志文件、初始化参数文件、还有其它文件(密码文件、报警日志文件和后台及用户跟踪文件)。 1.2、逻辑结构:描述数据库从逻辑上如何存储数据库中的数据。它是从数据库的角度来分析数据的逻辑存储。常见的逻辑结构包括:表空间、数据段、扩展区间、块构成。需要明白的是: *1、数据库逻辑上是由一个或多个表空间组成的,常见的表空间包括:系统表空间、系统辅助表空间、UNDO表空间、临时表空间、用户表空间 *2、表空间与数据文件是物理上的一对多的关系,既一个表空间对应一个或多个数据文件,但是一个数据文件只能属于一个表空间 *3、表空间将数据库的物理结构与逻辑结构相连接 2、物理结构 2.1、控制文件(Control files):主要记录数据库的物理结构及其他的一些控制信息,如数据库的名称、数据文件、日志文件的名称及位置。通常oracle会保留多个控制文件副本,并分别放在不同的物理位置,一旦其中的某个控制文件损坏,则可以通可其它的副本进行启动。 参数文件init.ora记录了控制文件的位置 控制文件包括如下主要信息 ?数据库的名字,检查点信息,数据库创建的时间戳 ?所有的数据文件,联机日志文件,归档日志文件信息 ?备份信息等 有了这些信息,Oracle就知道那些文件是数据文件,现在的重做日志文件是哪些,这些都是系统启动和运行的基本条件,所以他是Oracle运行的根本。如果没有控制文件系统是不可能启动的。控制文件是非常重要的,一般采用多个镜相复制来保护控制文件,或采用RAID 来保护控制文件。控制文件的丢失,将使数据库的恢复变的很复杂。 控制文件信息可以从v$controlfile中查询获得 SQL> select * from v$controlfile; STATUS NAME ------- -------------------------------------------------------------------------------- C:\ORACLE\ORADATA\ORCL\CONTROL01.CTL C:\ORACLE\ORADATA\ORCL\CONTROL02.CTL C:\ORACLE\ORADATA\ORCL\CONTROL03.CTL 2.2、数据文件(Data files),注意可以与后面讲到的表空间进行对比, 数据文件的详细信息记载在控制文件中。注意:SYSTEM表空间是不允许脱机的。在进行数据库恢复时,很多时候需要先将故障数据文件脱机。 可以通过如下方式查看数据文件: SQL> select name,status,enabled from v$datafile; NAME STATUS ENABLED

逻辑地址转物理地址

逻辑地址: 机器语言指令,用于指定一个操作数或一条指令的地址 表示为[段标识符:段内偏移量] 偏移量:段开始的地方到实际地址之间的距离 线性地址:也称虚拟地址,32位,0x00000000—0xffffffff 物理地址:用于内存芯片级的单元寻址,与处理器和cpu连接的地址总线相对应(与实物内存相联系) 逻辑地址转换物理地址: 内存控制单元(MMU)通过分段单元把逻辑地址转换成线性地址;接着分页单元把线性地址转换成物理地址。 段寄存器: 为了快速找到段选择符(段标识符16位)处理器提供段寄存器(cs代码段寄存器、ss栈段寄存器、ds数据段寄存器)存放段选择符 段描述符: 每个段由一个8字节的段描述符表示,放在(GDT:全局描述符表,存于gdtr;LDT局部描述符表,存于ldtr寄存器) 快速访问段描述符: 为了加速逻辑地址到线性地址的转换,8086处理器提供附加的非编程的寄存器(含8个字节的段描述符),供段寄存器使用。每当一个段选择符被装入段寄存器时,相应的段描述符就由内存装入到对应的非编程CPU寄存器。使得逻辑地址转换时无需访问主存中的GDT或LDT的。处理器可直接引用存放段描述符的CPU即可。 分段单元:

1、TI字段指明段描述符保存在哪一个描述符表中,若在GDT中,则从gdtr寄存器中取得GDT的线性基地址。 2、从段选择符的index字段计算段描述符的地址,index字段的值乘以8(一个段描述符的大小),将这个结果与gdtr或ldtr寄存器中的内容相加。 3、把逻辑地址的偏移量与段描述符Base字段的值相加就得到了线性地址 linux中的分段: 相应的段选择符由宏_KERNEL_CS,_KERNEL_DS,_USER_CS,_USER_DS分别定义。例如:对内核代码段进行寻址,只需将_KERNEL_CS宏产生的值装进cs寄存器即可。 所有的段都是从0x00000000开始,所以在linux下逻辑地址与线性地址是一致的,即逻辑地址的偏移量字段的值与相应的线性地址的值总是一致的。 当对指向指令或者数据结构的指针进行保存时,内核根本不需要为其设置逻辑地址的段选择符,因为cs寄存器就含有当前的段选择符。 分页单元: 分页单元把所有的RAM分成固定长度的页框(有时叫做物理页),每个页框包含一个页。页框是主存的一部分,是一个存储区域,而页只是一个数据块,可放于页框中。 把线性地址映射到物理地址的数据结构称为页表。页表存放在主存中。 二级模式:正在使用的页目录的物理地址存放在控制寄存器cr3中。线性地址内的directory字段决定页目录中的目录项,而目录项指向适当的页表。地址table字段依次又决定页表中的表项,而表项含有页所在页框的物理地址。offset字段决定页框内的相对位置。由于页框是12位长,故每一页含4096字节的数据;其他两个字段都是10位长,所以一个页目录可以寻址到1024*1024*4096=2^32。

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

逻辑地址(Logical Address)是指由程式产生的和段相关的偏移地址部分。例如,你在进行C语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel保护模式下程式执行代码段限长内的偏移地址(假定代码段、数据段如果完全相同)。应用程式员仅需和逻辑地址打交道,而分段和分页机制对你来说是完全透明的,仅由系统编程人员涉及。应用程式员虽然自己能直接操作内存,那也只能在操作系统给你分配的内存段操作。 线性地址(Linear Address)是逻辑地址到物理地址变换之间的中间层。程式代码会产生逻辑地址,或说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址能再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。Intel 80386的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。 物理地址(Physical Address)是指出目前CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。 虚拟内存(Virtual Memory)是指计算机呈现出要比实际拥有的内存大得多的内存量。因此他允许程式员编制并运行比实际系统拥有的内存大得多的程式。这使得许多大型项目也能够在具有有限内存资源的系统上实现。一个非常恰当的比喻是:你不必非常长的轨道就能让一列火车从上海开到北京。你只需要足够长的铁轨(比如说3公里)就能完成这个任务。采取的方法是把后面的铁轨即时铺到火车的前面,只要你的操作足够快并能满足需求,列车就能象在一条完整的轨道上运行。这也就是虚拟内存管理需要完成的任务。在Linux0.11内核中,给每个程式(进程)都划分了总容量为64MB的虚拟内存空间。因此程式的逻辑地址范围是0x0000000到0x4000000。有时我们也把逻辑地址称为虚拟地址。因为和虚拟内存空间的概念类似,逻辑地址也是和实际物理内存容量无关的。逻辑地址和物理地址的“差距”是0xC0000000,是由于虚拟地址->线性地址->物理地址映射正好差这个值。这个值是由操作系统指定的。机理逻辑地址(或称为虚拟地址)到线性地址是由CPU的段机制自动转换的。如果没有开启分页管理,则线性地址就是物理地址。如果开启了分页管理,那么系统程式需要参和线性地址到物理地址的转换过程。具体是通过设置页目录表和页表项进行的。 一、概念物理地址(physical address)

概念结构和逻辑结构

中北大学 数据库课程设计 概念结构和逻辑结构设计 2012 年 6月 3 日

一、概念结构设计 建立系统数据模型的主要工具是实体-联系图,即E-R图。E-R图的图形符号约定如表1-1所示: 表 1-1 E—R图的图形符号 系统的E-R图,如图1-1所示,每个实体及属性如下: 家庭成员:姓名、称呼、密码、出生日期 收入记录:收入项目编号、收入项目名称、收入人员、收入金额、收入日期 支出记录:支出项目编号、支出项目名称、支出人员、支出金额、支出日期 银行信息:银行账号、银行名称、开户人、存款金额、开户日期 1.家庭成员关系E-R图 2.收入记录E-R图

3.支出记录E-R图 4.银行信息E-R图 5.系统E-R图

二、逻辑结构设计 1.概述 数据库逻辑设计将概念结构转换为某个DBMS所支持的数据模型对其进行优化。 在对该家庭理财管理系统的实体关系图进行了分析之后,分别对其实体、联系作了属性的分析,得出这些实体与联系的主键与码值,为以后对该家庭理财管理系统的数据库的物理设计提供了方便与基础。 2.数据模型 2.1基本的数据模型有: 家庭成员(姓名、称呼、密码、出生日期); 收入记录(收入项目编号、收入项目名称、收入人员、收入金额、收入日期); 支出记录(支出项目编号、支出项目名称、支出人员、支出金额、支出日期); 银行信息(银行账号、银行名称、开户人、存款金额、开户日期) ; 2.2经过优化后的数据模型有: 家庭成员(ID,姓名、称呼、密码、出生日期); 银行信息(银行账号、银行名称、开户人、存款金额、开户日期); 使用者(ID,帐号,密码); 收入记录(ID,名称,收入人员,金额,日期); 支出记录(ID,名称,支出人员,金额,日期); 管理收入(家庭成员ID,收入记录ID); 管理支出(家庭成员ID,支出记录ID); 查看收入(家庭成员ID,收入记录ID); 查看支出(家庭成员ID,支出记录ID);

逻辑地址与物理地址

物理地址是外部连接使用的、唯一的,它是“与地址总线相对应”;而逻辑地址是内部和编程使用的、并不唯一。在内存中的实际地址就是所谓的“物理地址”,而逻辑地址就是逻辑段管理内存而形成的。例如,你在进行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)单元。 存储单元的地址可以用段基值和段内偏移量来表示,段基值确定它所在的段居于整个存储空间的位置,偏移量确定它在段内的位置,这种地址表示方式称为逻辑地址。 8086对外连接使用一个20位的线性地址唯一确定一个存储单元,也就是说:对于每个存储器单元都有的一个唯一的20位地址,我们称为该单元的物理地址或绝对地址。 8086在内部结构中和程序设计时采用逻辑段管理内存,就形成了逻辑地址。它的表达形式为“段基地址: 偏移地址”。

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

逻辑地址与物理地址的区别? 逻辑地址(Logical Address)是指由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明的,仅由系统编程人员涉及。应用程序员虽然自己可以直接操作内存,那也只能在操作系统给你分配的内存段操作。 线性地址(Linear Address)是逻辑地址到物理地址变换之间的中间层。程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。Intel 80386的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。 物理地址(Physical Address)是指出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。虚拟内存(Virtual Memory)是指计算机呈现出要比实际拥有的内存大得多的内存量。因此它允许程序员编制并运行比实际系统拥有的内存大得多的程序。这使得许多大型项目也能够在具有有限内存资源的系统上实现。一个很恰当的比喻是:你不需要很长的轨道就可以让一列火车从上海开到北京。你只需要足够长的铁轨(比如说3公里)就可以完成这个任务。采取的方法是把后面的铁轨立刻铺到火车的前面,只要你的操作足够快并能满足要求,列车就能象在一条完整的轨道上运行。这也就是虚拟内存管理需要完成的任务。在Linux 0.11内核中,给每个程序(进程)都划分了总容量为64MB的虚拟内存空间。因此程序的逻辑地址范围是0x0000000到0x4000000。有时我们也把逻辑地址称为虚拟地址。因为与虚拟内存空间的概念类似,逻辑地址也是与实际物理内存容量无关的。逻辑地址与物理地址的“差距”是0xC0000000,是由于虚拟地址->线性地址->物理地址映射正好差这个值。这个值是由操作系统指定的。

《计算机操作系统》辅导之二(地址转换)复习过程

关于地址转换 在计算机操作系统中,地址转换是存储管理的一个主要功能。所谓地址转换就是将用户的逻辑地址转换成内存的物理地址,完成地址重定位。需要指出的是,地址转换是操作系统的地址变换机构自行完成的,无需用户干预,这样我们使用操作系统时,才方便而可靠。 在这一章里,介绍的存储管理有分区管理(包括固定分区和可变分区)、分页管理、分段管理和段页式管理,其中分页管理的地址转换是重点和难点。下面,我们结合三个例题对地址转换作详细地分析。 【例1】考虑一个由8个页面,每页有1024个字节组成的逻辑空间,把它装入到有32个物理块的存储器中,问: (1)逻辑地址需要多少二进制位表示? (2)物理地址需要多少二进制位表示? 分析在分页存储管理中,逻辑地址结构如下图所示。 它由两个部分组成:前一部分表示该地址所在页面的页号p;后一部分表示页内地址(页内位移)d。页号的地址位数决定了页的多少,假设页号有20位,则地址空间中最多可容纳的页面数为220,即1MB个页面。页内地址位数确定了每页的大小,若页内地址为12位,则每页大小为212,即2KB。 同理,物理地址中块号的地址位数决定了块的数量。由于页式存储管理内存空间块的大小与页面大小相同,所以物理地址中块内地址与逻辑地址中的页内地址位数相同。 解因为页面数为8=23,故需要3位二进制数表示。每页有1024个字节,1024=210,于是页内地址需要10位二进制数表示。32个物理块,需要5位二进制数表示(32=25)。 (1)页的逻辑地址由页号和页内地址组成,所以需要3+10=13位二进制数表示。 (2)页的物理地址由块号和页内地址的拼接,所以需要5+10=15位二进制数表示。 【例2】若在一分页存储管理系统中,某作业的页表如下所示。已知页面大小为1024字节,试将逻辑地址1011,2148,4000,5012转化为相应的物理地址。 分析 可表示。若给定逻辑地址A,页面的大小为L,则页号p和页内地址d可按照下式求得:p=int [A/L] d=A mod L 其中,int是取整函数(取数值的整数部分),mod是取余函数(取数值的余数部分)。 下图显示了页式管理系统的地址转换机构。

相关主题