Linux逻辑地址与物理地址的关系 (linux 逻辑地址 物理地址 关系)

在计算机科学中,操作系统是基本的软件组件之一。操作系统的作用之一是管理计算机系统的内存。在Linux操作系统中,内存是通过逻辑地址和物理地址来管理和访问的。本文将介绍,以及操作系统如何管理这些地址。

逻辑地址和物理地址的定义

逻辑地址是指进程或线程在虚拟内存中使用的地址。虚拟内存是一种机制,它允许进程或线程使用比实际RAM更大的内存空间。进程或线程使用逻辑地址,而不是物理地址,因为它们不知道它们在计算机中的确切位置。

物理地址是实际的RAM地址,其用于存储数据和程序。物理地址是由计算机硬件管理的,它们由中央处理器(CPU)将指令发送到RAM,然后存储或检索数据。物理地址是在RAM中的确切位置。

逻辑地址和物理地址的转换

在Linux操作系统中,内存管理单元(MMU)执行逻辑地址和物理地址之间的转换。MMU是处理器芯片上的硬件,它负责将进程或线程的逻辑地址映射到物理地址上。对于每个进程或线程,操作系统会分配一个页表,页表包含一个转换表,用于将逻辑地址映射到物理地址上。

当进程或线程尝试访问内存时,MMU检查页表以确定实际的物理地址。如果进程或线程尝试访问不存在的地址,则操作系统会向其发送信号以阻止访问。这可以防止进程或线程访问其他进程或线程的内存。

操作系统还使用虚拟存储器技术来管理内存。虚拟存储器是一种机制,它允许操作系统将系统RAM外的磁盘存储器用作RAM的扩展。当系统RAM不足时,操作系统将部分的RAM数据存储在磁盘上,并将它们存储在称为“页面文件”的文件中。当进程或线程访问已页面文件中的数据时,操作系统将这些数据读入RAM,并使用MMU将逻辑地址转换为物理地址。

物理地址和硬件

在Linux中,物理地址是由CPU和内存控制器(Memory Controller)控制的。它们负责将逻辑地址转换为物理地址,并将CPU指令发送到RAM,以读取或写入数据。物理地址和CPU之间的快速通信是计算机系统性能的关键之一。

可通过Linux内核配置文件修改内存管理策略。内核配置文件包含系统配置参数的信息,包括内存管理参数。通过修改内核配置文件,可以更改Linux内核如何管理内存并控制物理地址的分配。

Linux逻辑地址与物理地址之间的关系是操作系统和输入输出设备之间的重要部分。操作系统使用逻辑地址和物理地址之间的转换来管理内存,避免进程和线程之间的干扰。物理地址由CPU和内存控制器控制,它们负责将逻辑地址转换为物理地址。通过修改内核配置文件,可以更改Linux内核如何管理内存并控制物理地址的分配。了解逻辑地址和物理地址之间的关系是深入理解Linux操作系统的重要组成部分。

相关问题拓展阅读:

物理地址是什么

物理地址是什么啊?

是指你的 网卡 MAC地址,,就相当于一个编号吧网卡物理地址存储器中存储单元对应实际地址称物理地址

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

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

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

怎么查询电脑物理地址

步骤如下: 方法一 1.打开【运行】按钮。

2.在【运行】对话框输入【cmd】,点击确定。 3.在命令提示符里输入【ipconfig -all】。

4.按下回车键即可查看到物理地址。 方法二: 1.打开【网络和共享中心】。

2.点击【以太网】按钮。 3.点击【详细信息】即可完成对物理地址的查询。

扩展资料:描述 地址从0开始编号,顺序地每次加1,因此存储器的物理地址空间是呈线性增长的。它是用二进制数来表示的,是无符号整数,书写格式为十六进制数。

它是出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果。用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。

在计算机科学中,物理地址(英语:physical address),也叫实地址(real address)、二进制地址(binary address),它是在地址总线上,以电子形式存在的,使得数据总线可以访问主存的某个特定存储单元的内存地址。 在和虚拟内存的计算机中,物理地址这个术语多用于区分虚拟地址。

尤其是在使用内存管理单元(MMU)转换内存地址的计算机中,虚拟和物理地址分别指在经MMU转换之前和之后的地址。在计算机网络中,物理地址有时又是MAC地址的同义词。

这个地址实际上是用于数据链路层,而不是如它名字所指的物理层上的。 参考资料来源:拍游宽百度百科:物理地址。

什么是物理地址?

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

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

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

可以这样获取MAC地址:在Windows 98/Me中,依次单击“开始”→“运行” →输入“winipcfg”→回车。即可看到MAC地址。在Windows 2023/XP中,依次单击“开始”→“运行”→输入“CMD”→回车→输入“ipconfig /all”→回车。即可看到MAC地址

什么是物理地址?物理地址有何作用?

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

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

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

物理地址一般记作-23(主机A的地址是)

什么是电脑里的“物理地址”?

电脑里的物理地址是指固化在硬件网卡里不能随便更改的唯一标识。

网络中的地址分为物理地址和逻辑地址两类:

与网络层的IP地址、传输层的端口号以及应用层的用户ID相比较,局域网的MAC层地址是由硬件来处理的,叫做物理地址或硬件地址;

而IP地址、传输层的端口号以及应用层的用户名是逻辑地址——由软件处理。

MAC地址一般被称为物理地址,固化在网卡EPROM中的地址。这个地址应该保证在全网是唯一的.IEEE注册委员会为每一个生产厂商分配物理地址的前三字节,即公司标识。后面三字节由厂商自行分配,即一个厂商获得一个前三字节的地址可以生产的网卡数量是块。

什么是线性地址?和物理地址的区别是什么呢?

386架构里,cpu可以处于实模式和保护模式。

实模式下,cpu指令访问的地址就是物理地址,形式为:段寄存器:偏移

在保护模式下,cpu可以使用分段机制和分页机制。

分段机制下使用的地址就是逻辑地址,形式为:段选择子:偏移

分页机制下使用的地址就是线性地址,形式为:0xXXXXXXXX

无论是逻辑地址还是线性地址,都要被cpu映射成物理地址。

保护模式下必须采用分段机制。在此基础上可采用分页机制。

逻辑地址被转化为线性地址,如果采用分页机制,则该线性地址通过分页机制被映射成物理地址。如果不采用分页机制,则该线性地址就是物理地址。

实模式下的物理地址只能访问1M以下空间,而保护模式下的物理地址可以访问所有32位空间。并且要注意,物理内存空间只是物理地址空间的一个部分而已。

另外还有一个”总线地址“的概念,是从总线设备的角度来说的。

在linux系统里,对cpu来说,物理内存的首地址是从线性地址的0xc开始的。而对总线设备来说,物理内存的首地址可能是从总线地址0x开始,也可能是从另外的总线地址开始,随系统而异。这也是为什么内核里经常有vir_to_phy 和vir_to_bus转换的缘故。

还有~~~

关于物理地址,线性地址和虚拟地址的区别,我只能凭我的理解简单说说,可能不准确。物理地址在什么时候都存在,但是在采用分页技术和虚拟内存技术后,你很难确定物理地址在那里,所以建议在实模式下采用物理地址和线性地址形式,这时候物理地址和线性地址其实是一致的。最常用的,比方说,计算机启动后的地址是0xfff0:0000,装载BIOS,然后转移到0x07C0:0000,所以总可以设置一个物理断点0x7C00,开始调试你的bootloader。

Linux存储管理方式

这种方式中,将用户程序的地址空间,注意,是

用户程序的地址空间

分为若干个固定大小的区域,成为“页”或“页面”。我们可以知道,这也页其实是不存在的,只是一种划分内存空间的方法。也就是说,这种方式将用户的程序

“肢解”

了,分成很多个小的部分,每个部分称为一个“页”。

将逻辑地址的前n位作为页号,后面32-n位作为页内偏移量。

由于进程的最后一页经常装不满一个块,从而形成了不可利指洞用的碎片,称之为

“页内碎片”

作用:实现页号到物理号的地址映射。

页表是记录逻辑空间(虚拟内存)中每一页在内存中对应的物理块号。但并非每一页逻辑空间都会实际对应着一个物理块,只有实际驻留在物理内存空间中的页才会对应着物理块。

系统会为每一个进程建立一张页表,页表是需要一直驻留在物理内存中的(多级页表除外),另外页表的起址和长度存放在 PCB(Process Control Block)进程控制结构体中。

可以在页表的表项中设置相关的权限控制字段,例如设置存取控制字段,用于保护该存储块的读写;若存取控制字段为2位,则可以设置读/写、只读和只执行等存取方式。

物理块唯念枯是实实在在存在于内存中的:

由于执行频率高,要求效率比较高,需要使用硬件实现。

在系统中设置一个

页表寄存器(PTR)

,其中存放页表在内存的起始地址和页表的长度。平时进程未执行的时候,页表的起始地址和页表长度放在本进程的PCB中。当调度程序调度到某个进程的时候,才将这两个数据装入

页表寄存器

变换过程:

快表的变换机构

为了提高地址变换速度,可在地址变换机构中增设一个具有并行查询能力的特殊高速缓冲寄存器,又称为”联想寄存器”或者“快表”。俗称TLB。

快表与页表的功能类似,其实就是将一部分页表存到 CPU 内部的高速缓冲存储器 Cache。CPU 寻址时先到快表查询相应的页表项形成物理地址,如果查询不到,则到内存中查询,并将对应页表项调入到快表中。但,如果快表的存储空间已满,则需要通过算法找到一个暂时不再需要的页表项,将它换出内存。

由于成本的关系,快表不可能做得很大,通常只存放 16~512 个页表项,这对中、高亮小型作业来说,已有可能把全部页表项放在快表中;但对于大型作业而言,则只能将其一部分页表项放入其中。由于对程序和数据的访问往往带有局限性,因此,据统计,从快表中能找到所需页表项的概率可达 90% 以上。这样,由于增加了地址变换机构而造成的速度损失可减少到 10% 以下,达到了可接受的程度。

我们可以采用这样两个方法来解决这一问题:

① 对于页表所需的内存空间,可采用离散分配方式,以解决难以找到一块连续的大内存空间的问题;

只将当前需要的部分页表项调入内存,其余的页表项仍驻留在磁盘上,需要时再调入。

二级页表的页表项:

过程:

在采用两级页表结构的情况下,对于正在运行的进程,必须将其外层页表调入内存,而对于内页表则只需调入一页或几页。为了表征某页的页表是否已经调入内存,还应在外层页表项中增设一个状态位 S,其值若为 0,表示该页表分页不在内存中,否则说明其分页已调入内存。进程运行时,地址变换机构根据逻辑地址中的 P1去查找外层页表;若所找到的页表项中的状态位为 0,则产生一个中断信号,请求 OS 将该页表分页调入内存。

多级页表和二级页表类似。多级页表和二级页表是为了节省物理内存空间。使得页表可以在内存中离散存储。(单级页表为了随机访问必须连续存储,如果虚拟内存空间很大,就需要很多页表项,就需要很大的连续内存空间,但是多级页表不需要。)

为什么引入分段存储管理?

引入效果:

它将用户程序的地址空间分为若干个大小不同的的段,每个段可以定义一组完整的信息。

段号表示段名,每个段都从0开始编址,并且采用一段连续的地址空间。

在该地址结构中,允许一个作业最长有64K个段,每个段的更大长度为64KB。

在分段式存储管理系统中,为每一个分段分配一个连续的分区。进程的各个段,可以离散地装入内存中不同的分区中。

作用:实现从逻辑地址到物理内存区的映射。

为了保证程序能够正常运行,就必须能够从物理内存中找出每个逻辑段所对应的位置。为此在系统中会为每一个进程建立一张

段表

。每个段在表中有一个表项,其中记录了该段在内存中的起始地址和段的长度。一般将段表保存在内存中。

在配置了段表之后,执行的过程可以通过查找段表,找到每一个段所对应的内存区。

为了实现进程从逻辑地址到物理地址的变换功能,在系统设置了段表寄存器,用于存放段表的起始地址和段表长度TL。

在进行地址变换时,系统将逻辑地址中的段号与段表长度TL 进行比较。若 S > TL,表示段号太大,是访问越界,于是产生越界中断信号。若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存的起始地址。然后,再检查段内地址 d 是否超过该段的段长 SL。若超过,即 d>SL,同样发出越界中断信号。若未越界,则将该段的基址 d 与段内地址相加,即可得到要访问的内存。

分页和分段系统相似之处:两者都采用离散分配方式,且都是通过地址映射机构实现地址变换。

但在概念上两者完全不同,主要表现在下述三个方面:

分页系统以页面作为内存分配的基本单位,能有效地提高内存利用率,而分段系统以段作为内存分配的基本单位,它能够更好地满足用户多方面的需要。

段页式地址结构由段号、段内页号及页内地址三部分所组成

段页式系统的基本原理是分段和分页原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。如下图展示了一个作业地址空间的结构。该作业有三个段:主程序段、子程序段和数据段;页面大小为 4 KB:

在段页式系统中,为了实现从逻辑地址到物理地址的变换,系统中需要同时配置段表和页表。段表的内容与分段系统略有不同,它不再是内存始址和段长,而是页表始址和页表长度。下图展示出了利用段表和页表进行从用户地址空间到物理(内存)空间的映射。

在段页式系统中,为了便于实现地址变换,须配置一个段表寄存器,其中存放段表始址和段长 TL。进行地址变换时,首先利用段号 S,将它与段长 TL 进行比较。若 S

在段页式系统中,为了获得一条指令或数据,须三次访问内存。之一次访问是访问内存中的段表,从中取得页表始址;第二次访问是访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正从第二次访问所得的地址中取出指令或数据。

显然,这使访问内存的次数增加了近两倍。为了提高执行速度,在地址变换机构中增设一个高速缓冲寄存器。每次访问它时,都须同时利用段号和页号去检索高速缓存,若找到匹配的表项,便可从中得到相应页的物理块号,用来与页内地址一起形成物理

参考链接:

linux 逻辑地址 物理地址 关系的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux 逻辑地址 物理地址 关系,Linux逻辑地址与物理地址的关系,物理地址是什么,Linux存储管理方式的信息别忘了在本站进行查找喔。


数据运维技术 » Linux逻辑地址与物理地址的关系 (linux 逻辑地址 物理地址 关系)