精华内容
参与话题
问答
  • 物理地址和逻辑地址

    万次阅读 2019-04-22 13:30:53
    1. 物理地址和逻辑地址 物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。这些数字被北桥(Nortbridge chip)...

    1. 物理地址和逻辑地址

    物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。这些数字被北桥(Nortbridge chip)映射到实际的内存条上。物理地址是明确的、最终用在总线上的编号,不必转换,不必分页,也没有特权级检查(no translation, no paging, no privilege checks)。

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

    为什么会有这两种地址?

    个人觉的原因在于逻辑地址分配更加灵活,可以允许不唯一,看起来也较为直观,例如,一段代码中分配数组,逻辑地址上是连续的,然而在物理地址上,这个数组所占用的页可能分散开来,物理地址上就是不连续的,这样对程序的可理解性上有影响。另外,有了逻辑地址这个概念,才能使用虚拟内存技术。

    2. Paging,分页内存管理方案

    (1) 分页的最大作用就在于:使得进程的物理地址空间可以是非连续的。

    物理内存被划分为一小块一小块,每块被称为帧(Frame)。分配内存时,帧是分配时的最小单位,最少也要给一帧。在逻辑内存中,与帧对应的概念就是页(Page)。

    逻辑地址的表示方式是:前部分是页码后部分是页偏移。

    例如,已知逻辑空间地址为2^m个字节(也就是说逻辑地址的长度是m位),已知页大小是2^n字节。那么一共可以有2^(m-n)个页。因此页码部分会占m-n位,之后的n位,用来存储页偏移。

    举个例子, 页大小为4B,而逻辑内存为32B(8页),逻辑地址0的页号为0,页号0对应帧5,因此逻辑地址映射为物理地址5*4+0=20。逻辑地址3映射物理地址5*4+3=23。逻辑地址13(4*3+1,页号为3,偏移为1,因此帧号为2),映射到物理地址9。

    采用分页技术不会产生外部碎片(内存都被划分为帧),但可能产生内部碎片(帧已经是最小单元,因此帧内部可能有空间没有用到)。

    按概率计算下来,每个进程平均可有半个帧大小的内部碎片。

    (2) 页表的硬件实现

    上一小节中写到页表是逻辑地址转化到物理地址的关键所在。那么页表如何存储?

    每个操作系统都有自己的方法来保存页表。绝大多数都会为每个进程分配一个页表。现在由于页表都比较大,所以放在内存中(以往是放在一组专用寄存器里),其指针存在进程控制块(PCB)里,当进程被调度程序选中投入运行时,系统将其页表指针从进程控制块中取出并送入用户寄存器中。随后可以根据此首地址访问页表。

    页表的存储方式是TBL(Translation look-aside buffer, 翻译后备缓冲器)+内存。TBL实际上是一组硬件缓冲所关联的快速内存。若没有TBL,操作系统需要两次内存访问来完成逻辑地址到物理地址的转换,访问页表算一次,在页表中查找算一次。TBL中存储页表中的一小部分条目,条目以键值对方式存储。

    (3) 页表的数据结构

    a.

    今年是2013年,现有的笔记本电脑,内存地址空间一般为2^32字节以上。对于具有32位逻辑地址空间的计算机系统,如果系统的页大小为4KB(2^12B),那么页表可以拥有2^(32-12)个,也就是一百多万个条目,假设每个条目占有4B,那每个进程都需要4MB的物理地址空间来存放页表本身。而且,页表本身需要分配在连续内存中。

    为此,Hierarchical Paging(层次化分页)被提出,实际上就是将页号分为两部分,第一部分作为索引,第二部分作为页号的偏移。

    以一个4kb页大小的32位系统为例。一个逻辑地址被分为20位的页码和12位的页偏移。因为要对页表进行再分页,所以该页号可分为10位的页码和10位的页偏移。这样一个逻辑地址就表示如下形式:

     

    地址转换过程如下:

     

    地址由外向内转换,因此此方法也被称为forward-mapped page table(向前映射表)

    展开全文
  • 物理地址、虚拟地址

    千次阅读 2020-10-11 21:16:36
    (1)物理地址 CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中内存的,但也常被映射到其他存储器上(如显存、bios等)。在程序指令中的虚拟地址经过段映射和页面映射后,就...

    (1)物理地址

    CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中内存的,但也常被映射到其他存储器上(如显存、bios等)。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。

    (2)总线地址

    总线的地址线或在地址周期上产生的信号。外设使用的是地址总线,cpu使用的是物理地址。

    物理地址和总线地址之间的关系有系统设计决定的。在X86平台上,物理地址就是总线地址,这是因为它们共享相同的地址空间。在其他平台上,可能需要转换/映射。

    (3)虚拟地址

    现代操作系统普遍采用虚拟内存管理(virtual memory management)机制,这需要MMU的支持。MMU通常是CPU的一部分,如果处理器没有MMU,或者有MMU但没有启用,CPU执行单元发出的内存地址将直接传到芯片引脚上,被内存芯片(物理内存)接收,这成为物理地址,如果处理器启用了MMU,CPU执行单元发出的内存地址将被MMU截获,从CPU到MMU的地址称为虚拟地址,而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是讲虚拟地址映射成物理地址。

          linux中,进程的4GB内存分为用户空间和内核空间。用户空间分布为1~3GB剩下的1GB为内核空间。程序员只能使用虚拟地址。系统中每个进程有各自的私有用户控件(0~3GB),这个空间对系统中的其他进程是不可见的。

    编址方式

    展开全文
  • 逻辑地址转化物理地址

    千次阅读 2019-01-07 15:59:00
    真实的物理地址为“块号 块内地址”。 4.当逻辑地址为十进制时,页号等于逻辑地址/页面大小,商为页号,通过对应关系得出块号,余数为偏移量。物理地址为“块号*页面大小+偏移量”。 转载于:https://www.cnblog...

     

     

    1.页内地址=块内地址。

    2.逻辑地址=页号+页内地址(块内地址)。

    3.当逻辑地址为十六进制时,先将地址化为二进制,取前六位为页号。通过对应关系得出块号。真实的物理地址为“块号 块内地址”。

    4.当逻辑地址为十进制时,页号等于逻辑地址/页面大小,商为页号,通过对应关系得出块号,余数为偏移量。物理地址为“块号*页面大小+偏移量”。

    转载于:https://www.cnblogs.com/2sheep2simple/p/10233762.html

    展开全文
  • 操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是...

    逻辑地址(Logical Address)

    是指由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel

    保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。

    线性地址(Linear Address)

    是逻辑地址到物理地址变换之间的中间层。程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。

    物理地址(Physical Address)

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

    展开全文
  • 2.4物理地址

    千次阅读 2017-04-05 06:48:03
    我们知道,CPU访问内存单元时,要给出内存单元的地址。所有的内存单元构成的...在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。不同的CPU可以有不同的形成物理地址的方式。我们现在讨论8086CPU
  • 80386虚拟地址和物理地址转换 CPU的发展 之前在看malloc内存分配函数的原理时,有涉及到分配虚拟内存,然后再映射到物理内存,当初也是看得一头雾水,因为对虚拟内存和物理内存不是很了解。所以这篇文章总结下我在...
  • 当开启页映射时,我们所有的线性地址都是虚拟地址,只是给我们看的,但是真正的物理地址需要经过线性地址一系列的映射才会到真正的物理地址处。 一般是通过三级或者四级映射。 也就是10-10-12或者2-9-9-12。 今天...
  • 内存物理地址

    千次阅读 2017-01-03 17:02:10
    CPU访问内存时要给出内存单元的地址(内存地址),每个内存单元都有一个唯一的地址,称之为物理地址。 首先给出一个公式: 物理地址=段地址x16+偏移地址 物理地址指的是cpu访问内存数据的内存地址,段地址指的...
  • 操作系统_逻辑地址转换为物理地址

    万次阅读 多人点赞 2018-10-22 20:46:41
    分页存储逻辑地址转物理地址: 例如: 已知某个分页系统,页面大小为1K(即1024字节),某一个作业有4个页面,分别装入到主存的第3、4、6、8块中,求逻辑地址2100对应的物理地址。 解: 第一步:求该逻辑地址的...
  • 实际的存储器对应的地址空间,即为物理地址空间。 相对地址和绝对地址都属于逻辑地址。 他们之间的区别,绝对地址是相对于整个进程的地址,相对地址是相对于进程当前部分的地址。 以上为个人理解,可能有偏颇...
  • 逻辑地址 与物理地址的转换

    万次阅读 多人点赞 2018-08-24 10:43:56
    物理地址=块号+页内地址=f+d; (两个d是一样的,页表中存储有p与f的对应关系)  地址总长度位数=页号占位数m+页内地址占位数n   逻辑地址中的页数=2^m (2的 页号位数 次幂)  一个页面(业内地址)大小= 2...
  • 物理地址(MAC地址)

    千次阅读 2018-04-21 23:30:49
    物理地址 (CPU中相关术语) 编辑在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址(Physical Address),又叫实际地址或绝对地址。物理地址=段...
  • 物理地址物理地址就是存储器实际上的地址,是内存单元的绝对地址,例如你有一个4G的内存条,物理地址0x0000就表示内存条的第一个存储单元,0x0010就表示内存条的第17个存储单元,而不管CPU内部怎么处理地址,最终...
  • 逻辑地址与物理地址的转换

    万次阅读 2016-05-25 23:39:25
    最近一直在学8086,上课老师突然问了个这。对于问题“8086 CPU 能提供20位的地址信息,可直接对1M个存储单元进行访问,而CPU内部可用来提供地址信息的寄存器都是16位,那怎样用16... 逻辑地址和物理地址的转换?(期...
  • Linux 虚拟地址到物理地址转换

    千次阅读 2019-03-08 13:58:14
    CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址...
  • 物理地址和IP地址

    千次阅读 2018-10-02 11:06:50
    物理地址和IP地址详解:http://blog.sciencenet.cn/blog-411071-1037673.html 腾讯网络基础对应考题:http://m.nowcoder.com/questionTerminal?uuid=3e72d3a7acb54ec3beb10a295c1d25d4
  • 虚拟地址到物理地址的映射

    千次阅读 2018-03-07 19:17:54
    虚拟地址和物理地址========================================= CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit, 内存管理单元),或者有MMU但没有启用,CPU...
  • 物理地址和总线地址区别

    千次阅读 2016-07-23 11:10:59
    物理地址与总线地址 1) 物理地址是与CPU相关的。在CPU的地址信号线上产生的就是物理地址。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。 2) 总线地址,...
  • 浅析如何把逻辑地址转换为物理地址

    千次阅读 多人点赞 2020-06-29 14:22:33
    本文只讲逻辑地址转换为物理地址的计算方法
  • 物理地址与总线地址

    千次阅读 2014-04-09 19:59:00
    物理地址与总线地址 1) 物理地址是与CPU相关的。在CPU的地址信号线上产生的就是物理地址。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。 2) 总线地址,...
  • 逻辑地址,线性地址和物理地址转换

    千次阅读 2019-08-02 18:50:14
    机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到 我们写个最简单的hello world程序,用gcc编译,再反汇编后会看到以下指令: mov ...
  • 虚拟地址、逻辑地址、线性地址、物理地址的区别1) 虚拟地址:是由程序产生的由段选择符和段内偏移地址组成的地址。这2部分组成的地址并不能直接访问物理内存,而是要通过分段地址的变化处理后才会对应到相应的物理...
  • 物理地址物理地址就是内存单元的绝对地址,比如你有一个4G的内存条插在电脑上,物理地址0x0000就表示内存条的第一个存储单元,0x0010就表示内存条的第17个存储单元,不管CPU内部怎么处理地址,最终访问的都是物理...
  • 逻辑地址 虚拟地址 物理地址 总线地址的区别 网址:http://blog.csdn.net/skyflying2012/article/details/40708327 1 逻辑地址 逻辑地址是最为模糊的概念。 《understanding the Linux kernel...
  • 线性地址转物理地址

    2015-05-18 15:16:33
    二、线性地址转物理地址 前面说了Linux中逻辑地址等于线性地址,那么线性地址怎么对应到物理地址呢?这个大家都知道,那就是通过分页机制,具体的说,就是通过页表查找来对应物理地址。 准确的说分页是CPU提供的一...
  • wireshark过滤MAC地址/物理地址

    万次阅读 2017-12-08 17:32:35
    wireshark中根据MAC地址/物理地址过滤数据包,捕获过滤和显示过滤的语法如下:wireshark捕获过滤中过滤MAC地址/物理地址ether host 80:f6:2e:ce:3f:00 //过滤目标或源地址是80:f6:2e:ce:3f:00的数据包ether dst host...
  • 操作系统虚拟地址计算物理地址

    千次阅读 2018-12-05 18:39:21
    有关计算机操作系统中虚拟地址转换为物理地址的计算 笔者以具体题目加以说明: 在一个分页虚拟存储系统中,用户编程空间为32个页,页长为1 KB,内存空间为16 KB。如果应用程序有10页长,若已知虚页0、1、2、3,已...

空空如也

1 2 3 4 5 ... 20
收藏数 36,750
精华内容 14,700
关键字:

物理地址