我理解的逻辑地址、线性地址、物理地址和虚拟地址
内存寻址的三种模式
内存寻址的三种模型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的地址空间。
微机原理及接口技术问答题
“微机原理与接口技术”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。
逻辑地址与物理地址
逻辑地址与物理地址物理地址是外部连接使用的、唯一的,它是“与地址总线相对应”;而逻辑地址是内部和编程使用的、并不唯一。
在内存中的实际地址就是所谓的“物理地址”,而逻辑地址就是逻辑段管理内存而形成的。
例如,你在进行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)单元。
存储单元的地址可以用段基值和段内偏移量来表示,段基值确定它所在的段居于整个存储空间的位置,偏移量确定它在段内的位置,这种地址表示方式称为逻辑地址。
操作系统——文件系统概述、文件逻辑地址、目录、物理地址
操作系统——⽂件系统概述、⽂件逻辑地址、⽬录、物理地址⼀、⽂件系统概述软件资源管理信息长期保存的需要存储介质:磁盘、光盘、磁带…完成外存信息的管理和存取在前⾯的学习中,我们知道⽂件也是⼀种系统资源。
这⾥先给出⽂件和⽂件系统的定义。
1、⽂件外存中具有符号名的⼀组有逻辑意义的信息项的集合。
2、⽂件系统指OS中管理⽂件的那⼀部分软件。
它负责管理⽂件的存储、检索、更新,提供安全可靠的共享和保护⼿段,并为⽤户提供⼀整套⽅便有效的⽂件使⽤和操作⽅法。
它在OS接⼝中占⽐例最⼤,是I/O系统的上层软件。
⽂件系统⾯向⽤户的主要任务是实现⽂件的“按名存取”。
按名存取是⽂件系统最为主要的任务3、⽂件的属性主要属性有:⽂件名、识别符、类型、位置、⼤⼩、创建时间、上次修改时间、⽂件所有者和保护信息等。
UNIX系统中⽂件属性:-普通⽂件d ⽬录⽂件p 管道⽂件c 字符型设备⽂件b 块设备⽂件4、⽂件的分类按性质和⽤途分:系统⽂件、库⽂件、⽤户⽂件按数据形式:源⽂件、⽬标⽂件、可执⾏⽂件按对⽂件实施的保护级别分:只读⽂件、读写⽂件、执⾏⽂件按逻辑结构分:有结构⽂件、⽆结构⽂件按⽂件中物理结构分:顺序⽂件、链接⽂件、索引⽂件⼆、⽂件的逻辑结构⽂件的结构指⽂件中信息的配置和构造⽅式,有逻辑结构和物理结构之分。
⽤户眼中⽂件信息的组织形式叫⽂件的逻辑结构。
它包括记录式⽂件和流式⽂件两种,每种⽂件信息的逻辑单位分别是记录和字符。
UNIX系统视所有⽂件的逻辑结构为⽆结构的流式⽂件早期有结构的记录式⽂件⼜分定长和不定长两种⽂件的逻辑结构与⽂件的存储介质⽆关⽂件的逻辑结构可以分为⽆结构⽂件(流式),有结构⽂件(记录式)1、⽆结构⽂件2、有结构⽂件根据各条记录的长度(占⽤的存储空间)是否相等,⼜可以分为定长记录和可变长记录两种。
根据有结构⽂件中的各条记录如何组织,可分为三类顺序⽂件索引⽂件索引顺序⽂件这⾥进⾏检索效率的分析:多级索引顺序⽂件看完⽂件的逻辑结构的划分,是不是觉得好像在哪⾥学过类似的组织⽅式?回想⼀下在计算机组成原理中Cache的组织⽅式,是不是也是这样的?地址映像的直接映像、全相联映像、组相联映像不就对应着顺序⽂件、索引⽂件、索引顺序⽂件?3、总结三、⽂件⽬录⽂件⽬录是⽂件系统管理⽂件最为重要的依据。
什么是物理地址 逻辑地址
什么是物理地址逻辑地址网络中的地址分为物理地址和逻辑地址两类,与网络层的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比特的不同组合,分为若干独立的连续地址组,生产以太网网卡的厂家就购买其中一组,具体生产时,逐个将唯一地址赋予以太网卡。
通俗理解物理地址、逻辑地址、线性地址、虚拟地址、有效地址的区别
通俗理解物理地址、逻辑地址、线性地址、虚拟地址、有效地址
的区别
物理地址:物理地址就是内存单元的绝对地址,⽐如你有⼀个4G的内存条插在电脑上,物理地址0x0000就表⽰内存条的第⼀个存储单元,0x0010就表⽰内存条的第17个存储单元,不管CPU内部怎么处理地址,最终访问的都是物理地址。
在CPU实模式下“段基址+段内偏移地址”就是物理地
址,CPU可以使⽤此地址直接访问内存。
线性地址、虚拟地址:CPU在保护模式下,“段基址+段内偏移地址”叫做线性地址,注意,保护模式下段基址寄存器中存储的不是真正的段基值(和实模式的含义不⼀样),⽽是被称为“段选择⼦”的东西,通过段选择⼦在GDT(全局描述表)中找到真正的段基值。
另外,如果CPU在保护模式下没有开启分页功能,则线性地址就被当做最终的物理地址来⽤,若开启了分页功能,则线性地址就叫虚拟地址(在没开启分页功能的情况下线性地址和虚拟地址就是⼀回事)。
但是,如果开启分页功能,虚拟地址(或线性地址)还要通过页部件电路转换成最终的物理地址。
逻辑地址、有效地址:⽆论CPU在什么模式下,段内偏移地址⼜称为有效地址或者逻辑地址(只是叫法不⼀样罢了),例如实模式下 “mov ax,
[0x7c00]”,0x7c00就是逻辑地址(或有效地址),但这条指令最终操作的物理地址是DS*16+0x7c00。
物理地址的含义
物理地址的含义物理地址是什么?物理地址的含义是什么? 小编整理了物理地址的相关资料,下面大家跟着小编一起去了解一下吧。
物理地址的含义MAC地址也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。
IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32 位的,而MAC地址则是48位的。
MAC 地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08: 00:20:0A:8C:6D就是一个MAC地址,其中前6位16进制数08:00:20代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3位16进制数0A:8C:6D代表该制造商所制造的某个网络产品(如网卡)的系列号。
只要你不去更改自己的MAC地址,那么你的MAC地址在世界是惟一。
静态IP:在Internet上有千百万台主机,为了区分这些主机,人们给每台主机都分配了一个专门的地址,称为IP地址。
通过IP地址就可以访问到每一台主机。
IP地址由4部分数字组成,每部分数字对应于8位二进制数字,各部分之间用小数点分开。
如某一台主机的IP地址为:211.152.65.112 ,Internet IP地址由NIC(Internet Network Information Center)统一负责全球地址的规划、管理;同时由Inter NIC、APNIC、RIPE三大网络信息中心具体负责美国及其它地区的IP地址分配。
固定IP:固定IP地址是长期固定分配给一台计算机使用的IP 地址,一般是特殊的服务器才拥有固定IP地址。
动态IP:因为IP地址资源非常短缺,通过电话拨号上网或普通宽带上网用户一般不具备固定IP地址,而是由ISP动态分配暂时的一个IP地址。
普通人一般不需要去了解动态IP地址,这些都是计算机系统自动完成的。
公有地址(Public address)由Inter NIC(Internet Network Information Center 因特网信息中心)负责。
虚拟地址和物理地址
虚拟地址和物理地址虚拟地址和物理地址第⼀层理解1、每个进程都有⾃⼰独⽴的4g内存空间,每个进程的内存空间都具有类似的结构。
2、⼀个新进程建⽴的时候,将会建⽴⾃⼰的内存空间,此进程的数据,代码等数据从磁盘拷贝到⾃⼰的进程空间,哪些数据在哪⾥,都由进程控制表中的task_struck记录,task_struck中记录⼀条链表,记录内存空间的分配情况,哪些地址有数据,哪些地址没有数据,哪些可读,哪些可写,都可以通过这个链表进⾏记录。
3、每个进程已经分配的内存及空间,都与对应的磁盘空间映射。
问题:计算机明明没有那么多内存(n个进程的话需要n*4g)内存建⽴⼀个进程,就要把磁盘上的程序⽂件拷贝到进程对应的内存中,对于⼀个程序对应多个进程这种情况,浪费内存。
第⼆层理解1、每个进程的4G内存空间只是虚拟内存空间,每次访问内存空间的某个地址,都需要把地址翻译成实际物理内存地址2、所有进程共享同⼀物理内存,每个进程只需要把⾃⼰⽬前需要的虚拟内存映射并存储到物理内存上。
3、进程要知道哪些内存地址的数据在物理内存上,哪些不在,还有在物理内存上哪⾥,需要⽤页表记录4、页表的每⼀项分两部分,第⼀部分记录此页是否在物理内存上,第⼆部分记录物理内存页的地址(如果在的话)5、当进程访问每个虚拟地址,去看页表,如果发现对应的数据不在物理内存中,则缺页异常。
6、缺页异常的处理过程,就是把进程需要的数据从磁盘上拷贝到物理内存中,如果内存已经满了,没有空地⽅了,那就找⼀个页覆盖(页⾯置换算法)优点:1、既然每个进程的内存空间都是⼀致并且固定,所以连接器在链接可执⾏⽂件时,可以设定内存地址,⽽不⽤去管这些数据最终实际的内存地址,这是独⽴内存空间的好处。
2、当不同的进程使⽤同样的代码时,⽐如库⽂件的代码,物理内存中可以值存储⼀份这样的代码,不同的进程只需要把⾃⼰的虚拟内存映射过去就可以了,节省内存。
3、在程序员需要分配连续的内存空间的时候,只需要在虚拟内存空间分配连续空间,⽽不需要实际物理内存的连续空间,可以利⽤内存碎⽚。
微机原理及接口技术问答题
“微机原理与接口技术”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。
逻辑地址线性地址物理地址三个地址有什么联系
逻辑地址线性地址物理地址三个地址有什么联系逻辑地址线性地址物理地址一、逻辑地址转线性地址我们写个最简单的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显示当前寄存器的值:cs0x73115ss0x7b123ds0x7b123es0x7b123可以看到ds值为0x7b,转换成二进制为0000000001111011,TI字段值为0,表示使用GDT,GDT索引值为01111,即十进制15,对应的就是GDT内的__USER_DS用户数据段描述符。
从上面可以看到,Linux在x86的分段机制上运行,却通过一个巧妙的方式绕开了分段。
线性地址逻辑地址和物理地址的区别
线性地址逻辑地址和物理地址的区别:线性地址是逻辑地址到物理地址变换之间的中间层,是处理器可寻址的内存空间(称为线性地址空间)中的地址。
程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。
如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。
若没有启用分页机制,那么线性地址直接就是物理地址。
不过,在开启分页功能之后,一个线性地址可能没有相对映的物理地址,因为它所对应的内存可能被交换到硬盘中。
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公里)就能完成这个任务。
采取的方法是把后面的铁轨即时铺到火车的前面,只要你的操作足够快并能满足需求,列车就能象在一条完整的轨道上运行。
逻辑地址与物理地址的区别
逻辑地址与物理地址的区别?逻辑地址(Logical Address)是指由程序产生的与段相关的偏移地址部分。
例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。
只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。
应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明的,仅由系统编程人员涉及。
应用程序员虽然自己可以直接操作内存,那也只能在操作系统给你分配的内存段操作。
线性地址(Linear Address)是逻辑地址到物理地址变换之间的中间层。
程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。
如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。
若没有启用分页机制,那么线性地址直接就是物理地址。
Intel 80386的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。
物理地址(Physical Address)是指出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。
如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。
如果没有启用分页机制,那么线性地址就直接成为物理地址了。
虚拟内存(Virtual Memory)是指计算机呈现出要比实际拥有的内存大得多的内存量。
因此它允许程序员编制并运行比实际系统拥有的内存大得多的程序。
这使得许多大型项目也能够在具有有限内存资源的系统上实现。
一个很恰当的比喻是:你不需要很长的轨道就可以让一列火车从上海开到北京。
你只需要足够长的铁轨(比如说3公里)就可以完成这个任务。
采取的方法是把后面的铁轨立刻铺到火车的前面,只要你的操作足够快并能满足要求,列车就能象在一条完整的轨道上运行。
虚拟地址与物理地址的转换
虚拟地址与物理地址的转换虚拟地址转换为物理地址的第一步是将从处理器得到的虚拟地址和TLB中的虚拟地址进行比较。
,今天店铺与大家分享下虚拟地址与物理地址的转换,有需要的朋友不妨了解下。
虚拟地址与物理地址的转换已知一个虚拟地址0x01AF5518, 则转换的过程如下:注意: *这里讨论的以Windows下普通模式分页的情况, 也就是2级页表的情况*1.首先把虚拟地址拆分成3个部分(低12位, 中10位, 高10位), 换成2进制如下:-> 0000 0001 1010 1111 0101 0101 0001 1000按照10, 10, 12的位数重新排列后-> (页目录索引)00 000 00110, (页表项索引)10 1111 0101, (偏移)0101 0001 1000换算成十六进制后可以得到如下结果页目录索引 = 6, 页表项索引 = 0x2f5 , 偏移 = 0x5182. 根据当前的CR3寄存器中的物理地址定位页目录表基址Cr3中存放的是物理地址, 这个物理地址指向进程的页目录表基址, 由此可以得到页目录表基址(PDE) = Cr3 = 0xAA0E50003. 计算页表项的地址页表地址存放在页目录表(PDE)中的第6个项目中, 也就是[0xAA0E5000 + 4 * 6] = [0xAA0E5018] = 0x3D955867, 其中0x00000867为该页表属性值, PTE = 0x3D9550003. 计算页面物理地址我们要找的页面在这个页表中的第0x2f5项, 所以虚拟地址所在的页的物理地址为[0x3D955000 + 0x2f5 * 4] = [0x3D955BD4] =假设[0x3D955BD4] = 0x7095e847, 页面的物理地址x0x7095e000, 0x00000847表示的是页面属性4. 计算最终的物理地址由虚拟地址分离的偏移可以计算出最终的物理地址为0x7095E000 + 0x00000518 = 0x7095E518.虚拟地址和物理地址的概念CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Address,以下简称PA),如下图所示。
微机原理与接口技术期末考试试题及答案
微机原理与接口技术期末考试题库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。
浅析操作系统中的虚拟地址与物理地址
浅析操作系统中的虚拟地址与物理地址⽬录⼀、前⾔⼆、你看到的所有地址都不是真的三、物理寻址 Physical Addressing四、虚拟寻址 Virtual Addressing⼀、前⾔先解释下⼀个困扰了我很久的问题:虚拟地址(vitural address)和逻辑地址(logical address)的区别。
⼤部分操作系统的书籍要么写的是虚拟地址,要么写的是逻辑地址,看的我⼀脸懵逼。
在《深⼊理解 Linux 内核》这本书中终于找到了确切的答案,这⾥我就不写出来了,扣概念的话这俩确实是有些区别的,不过对于我们⽇常使⽤以及理解操作系统来说的话,暂且可以把虚拟地址和逻辑地址理解为同⼀个意思。
⼆、你看到的所有地址都不是真的下⾯这段 C 代码摘录⾃《操作系统导论 - [美] 雷姆兹·H.阿帕希杜塞尔》,依次打印出 main 函数的地址,由 malloc(类似于 Java 中的 new 操作)返回的堆空间分配的值,以及栈上⼀个整数的地址:得到以下输出:我们需要知道的是,所有这些打印出来的地址都是虚拟的,在物理内存中这些地址并不真实存在,它们最终都将由操作系统和 CPU 硬件翻译成真正的物理地址,然后才能从真实的物理位置获取该地址的值。
OK,上述就当作⼀个引⼦,让各位对物理地址和虚拟地址有个直观的理解,下⾯正⽂开始。
三、物理寻址 Physical Addressing物理地址的概念很好理解,你可以把它称为真正的地址。
《深⼊理解计算机系统 - 第 3 版》中给出的物理地址(physical address)的定义如下:计算机系统的主存被组织成⼀个由 M 个连续的字节⼤⼩的单元组成的数组。
每字节都有⼀个唯⼀的物理地址。
⽐如说,第⼀个字节的物理地址是 0,接下来的字节地址是 1,再下⼀个是 2,以此类推,给定这种简单的结构,CPU 访问内存的最⾃然的⽅式就是使⽤这样的物理地址。
我们把这种⽅式称为物理寻址(physical addressing)。
物理地址虚拟地址的关系
解读物理地址、虚拟地址关系 2008年04月21日星期一 20:47一直对物理地址,虚拟地址的概念比较含糊,今天在网上找了一篇文章读过后有点 开悟,并整理出一幅关系图来,不对地方请各位网友指正:O^FFFFFFFF原文如下:Win dows 2000使用基于分页机制的虚拟内存。
每个进程有 4GB 的虚拟地址空间。
基于分页机制,这4GB 地址空间的一些部分被映射了物理内存,一些部分映射硬 盘上的交换文件,一些部分什么也没有映射。
程序中使用的都是 4GB 地址空间中 的虚拟地址。
而访问物理内存,需要使用物理地址 下面我们看看什么是物理地址,什么用尸诜程空阖共 1S 4 (5位〕个页表M24<5位)物理内存分迸 程程进 程OxOOOOFFF F0x000000000x00010000(MFFEFFFF物理内存分茴4KH2 傥)= 40Pti 字节②」表录迸程虑拟內存是虚拟地址。
物理地址(physical address)放在寻址总线上的地址。
放在寻址总线上,如果是读,电路根据这个地址每位的值就将相应地址的物理内存中的数据放到数据总线中传输。
如果是写,电路根据这个地址每位的值就将相应地址的物理内存中放入数据总线上的内容。
物理内存是以字节(8位)为单位编址的。
虚拟地址(virtual address): 4G虚拟地址空间中的地址,程序中使用的都是虚拟地址。
如果CPU寄存器中的分页标志位被设置,那么执行内存操作的机器指令时,CPU 会自动根据页目录和页表中的信息,把虚拟地址转换成物理地址,完成该指令。
比如mov eax,004227b8h,这是把地址004227b8h处的值赋给寄存器的汇编代码,004227b8这个地址就是虚拟址。
CPU在执行这行代码时,发现寄存器中的分页标志位已经被设定,就自动完成虚拟地址到物理地址的转换,使用物理地址取出值,完成指令。
对于In tel CPU来说,分页标志位是寄存器CR0的第31位,为1表示使用分页,为0表示不使用分页。
物理地址的含义
物理地址的含义物理地址是什么?物理地址的含义是什么?店铺整理了物理地址的相关资料,下面大家跟着店铺一起去了解一下吧。
物理地址的含义MAC地址也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。
IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32 位的,而MAC地址则是48位的。
MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08: 00:20:0A:8C:6D就是一个MAC地址,其中前6位16进制数08:00:20代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3位16进制数0A:8C:6D代表该制造商所制造的某个网络产品(如网卡)的系列号。
只要你不去更改自己的MAC地址,那么你的MAC地址在世界是惟一。
静态IP:在Internet上有千百万台主机,为了区分这些主机,人们给每台主机都分配了一个专门的地址,称为IP地址。
通过IP地址就可以访问到每一台主机。
IP地址由4部分数字组成,每部分数字对应于8位二进制数字,各部分之间用小数点分开。
如某一台主机的IP地址为:211.152.65.112 ,Internet IP地址由NIC(Internet Network Information Center)统一负责全球地址的规划、管理;同时由Inter NIC、APNIC、RIPE三大网络信息中心具体负责美国及其它地区的IP 地址分配。
固定IP:固定IP地址是长期固定分配给一台计算机使用的IP地址,一般是特殊的服务器才拥有固定IP地址。
动态IP:因为IP地址资源非常短缺,通过电话拨号上网或普通宽带上网用户一般不具备固定IP地址,而是由ISP动态分配暂时的一个IP地址。
普通人一般不需要去了解动态IP地址,这些都是计算机系统自动完成的。
公有地址(Public address)由Inter NIC(Internet NetworkInformation Center 因特网信息中心)负责。
物理地址逻辑地址虚拟地址的概念
一、概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。
——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。
所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。
也许错误的理解更利于形而上的抽像。
虚拟内存(virtual memory)这是对整个内存(不要与机器上插那条对上号)的抽像描述。
它是相对于物理内存来讲的,可以直接理解成“不直实的”,“假的”内存,例如,一个0x08000000内存地址,它并不对就物理地址上那个大数组中0x08000000 - 1那个地址元素;之所以是这样,是因为现代操作系统都提供了一种内存管理的抽像,即虚拟内存(virtual memory)。
进程使用虚拟内存中的地址,由操作系统协助相关硬件,把它“转换”成真正的物理地址。
这个“转换”,是所有问题讨论的关键。
有了这样的抽像,一个程序,就可以使用比真实物理地址大得多的地址空间。
(拆东墙,补西墙,银行也是这样子做的),甚至多个进程可以使用相同的地址。
不奇怪,因为转换后的物理地址并非相同的。
——可以把连接后的程序反编译看一下,发现连接器已经为程序分配了一个地址,例如,要调用某个函数A,代码不是call A,而是call 0x0811111111 ,也就是说,函数A的地址已经被定下来了。
没有这样的“转换”,没有虚拟地址的概念,这样做是根本行不通的。
打住了,这个问题再说下去,就收不住了。
逻辑地址(logical address)Intel为了兼容,将远古时代的段式内存管理方式保留了下来。
逻辑地址转物理地址
逻辑地址转物理地址参考如下1. 物理地址和逻辑地址物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址。
在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。
这些数字被北桥(Nortbridge chip)映射到实际的内存条上。
物理地址是明确的、最终用在总线上的编号,不必转换,不必分页,也没有特权级检查(no translation, no paging, no privilege checks)。
逻辑地址:CPU所生成的地址。
逻辑地址是内部和编程使用的、并不唯一。
例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),不和绝对物理地址相干。
为什么会有这两种地址?个人觉的原因在于逻辑地址分配更加灵活,可以允许不唯一,看起来也较为直观,例如,一段代码中分配数组,逻辑地址上是连续的,然而在物理地址上,这个数组所占用的页可能分散开来,物理地址上就是不连续的,这样对程序的可理解性上有影响。
另外,有了逻辑地址这个概念,才能使用虚拟内存技术。
CPU将一个虚拟内存空间中的地址转换为物理地址,需要进行两步:首先将给定一个逻辑地址(其实是段内偏移量,这个一定要理解!!!),CPU要利用其段式内存管理单元,先将为个逻辑地址转换成一个线程地址,再利用其页式内存管理单元,转换为最终物理地址。
物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。
——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。
所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。