逻辑地址、物理地址和线性地址

2023-11-16

逻辑地址(logical address

包含在机器语言指令中用来指定一个操作数或一条指令的地址。这种寻址方式在80X86著名的分段结构中表现的尤为具体,它促使MS-DOSWindows程序员把程序分成若干段。每一个逻辑地址都由一个段(segment)和偏移量(offsetdisplacement)组成,偏移量指明了从段开始的地方到实际地址的距离。

线性地址(linear address)(也成虚拟地址virtual address

是一个32位无符号整数,可以用来表示高达4GB的地址,也就是,高达4294967296个内存单元。线性地址通常用十六进制数字表示,值得范围从0x000000000xfffffff

物理地址(physical address

用于内存芯片级内存单元寻址,他们与从微处理器的地址引脚发送到内存总线上的电信号对应。物理地址由32位或36位无符号整数表示。


线性地址(Linear Address)是逻辑地址物理地址变换之间的中间层。在分段部件中逻辑地址是段中的偏移地址,然后加上基地址就是线性地址。线性地址是一个32位无符号整数,可以用来表示高达4GB的地址,也就是,高达4294967296个内存单元。线性地址通常用十六进制数字表示,值的范围从0x00000000到0xfffffff)。[1]程序代码会产生逻辑地址,通过逻辑地址变换就可以生成一个线性地址。如果启用了分页机制,那么线性地址可以再经过变换以产生一个物理地址。当采用4KB分页大小的时候,线性地址的高10位为页目录项在页目录表中的编号,中间十位为页表中的页号,其低12位则为偏移地址。如果是使用4MB分页机制,则高10位页号,低22位为偏移地址。如果没有启用分页机制,那么线性地址直接就是物理地址。

线性地址与分页管理

  CPU的页式内存管理单元,负责把一个线性地址,最终翻译为一个物理地址。从管理和效率的角度出发,线性地址被分为以固定长度为单位的组,称为页(page),例如一个32位的机器,线性地址最大可为4G,可以用4KB为一个页来划分,这页,整个线性地址就被划分为一个tatol_page[2^20]的大数组,共有2的20个次方个页。这个大数组我们称之为页目录。目录中的每一个目录项,就是一个地址——对应的页的地址。


如上图:  

1、分页单元中,页目录是唯一的,它的地址放在CPU的cr3寄存器中,是进行地址转换的开始点。万里长征就从此长始了。  

2、每一个活动的进程,因为都有其独立的对应的虚似内存(页目录也是唯一的),那么它也对应了一个独立的页目录地址。——运行一个进程,需要将它的页目录地址放到cr3寄存器中,将别个的保存下来。  

3、每一个32位的线性地址被划分为三部份,面目录索引(10位):页表索引(10位):偏移(12位)  依据以下步骤进行转换:  

1、从cr3中取出进程的页目录地址(操作系统负责在调度进程的时候,把这个地址装入对应寄存器);  

2、根据线性地址前十位,在数组中,找到对应的索引项,因为引入了二级管理模式,页目录中的项,不再是页的地址,而是一个页表的地址。(又引入了一个数组),页的地址被放到页表中去了。  

3、根据线性地址的中间十位,在页表(也是数组)中找到页的起始地址;  

4、将页的起始地址与线性地址中最后12位相加,得到最终我们想要的葫芦;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逻辑地址、物理地址和线性地址 的相关文章

  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 通过 PowerShell 运行 .cmd 文件

    我正在尝试使用 PowerShell 在远程服务器上运行 cmd 文件 在我的 ps1 脚本中我尝试过 C MyDirectory MyCommand cmd 它会导致此错误 C MyDirectory MyCommand cmd is n
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包
  • 如何通过保持目录结构完整来同步路径中匹配模式的文件?

    我想将所有文件从服务器 A 复制到服务器 B 这些文件在不同级别的文件系统层次结构中具有相同的父目录名称 例如 var lib data sub1 sub2 commonname filetobecopied foo var lib dat
  • 在 Windows 上通过 ctypes 将文件描述符传递给 C 库函数

    我试图通过 ctypes 将文件描述符传递给在 fd 上执行写入的 C 函数 在linux上它可以工作 在 Windows 上则不然 我不明白为什么 我没有 Windows 开发人员的经验 C func signature void fun
  • 为什么我可以直接从 bash 执行 JAR?

    我是一个长期从事 Java 工作的人 并且知道运行带有主类的 JAR 的方法MANIFEST MFJar 中的文件很简单 java jar theJar jar 我用它来启动 Fabric3 服务器 包含在bin server jar在其标
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 如何更改 Apache 服务器的根目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何更改 Apache 服务器的文档根目录 我基本上想要localhost从 来 users spencer projects目录而不是
  • Windows 等效的系统配置目录

    我正在 Ruby 中开发一个 CLI 应用程序 我希望允许通过标准配置文件级联在 Unix 中进行配置 etc appnamerc appnamerc 然而 该应用程序也应该在 Windows 环境中运行 我不确定将像这样的文件放在哪里 e
  • 当用户尝试打开新实例时返回到已打开的应用程序

    这是我有一段时间想不通的问题 防止第二个实例很简单并且有很多方法 但是恢复已经运行的进程则不然 我想 最小化 撤消最小化并将正在运行的实例置于最前面 在其他窗口后面 将应用程序置于最前面 我使用的语言是 VB NET 和 C 我发现这段代码
  • Linux 上的用户空间能否实现本机代码的抢占式多任务处理?

    我想知道是否可以在 Linux 用户空间的单个进程中实现本机代码的抢占式多任务处理 也就是说 从外部暂停一些正在运行的本机代码 保存上下文 交换到不同的上下文 然后恢复执行 所有这些都由用户空间精心安排 但使用可能进入内核的调用 我认为这可
  • “make install”将库安装在 /usr/lib 而不是 /usr/lib64

    我正在尝试在 64 位 CentOS 7 2 上构建并安装一个库 为了这个目的我正在跑步 cmake DCMAKE BUILD TYPE Release DCMAKE INSTALL PREFIX usr DCMAKE C COMPILER
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • PHPStorm - 无效的后代文件名

    我正在尝试将 Windows 7 PC 上的本地 PHPStorm 项目与 Ubuntu 服务器同步 当我尝试任何类型的连接 例如 测试 SFTP 连接 时 它会失败并显示 Invalid descendent file name C np
  • PC 相当于 Coda 吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Vagrant 错误:无法挂载 VirtualBox 共享文件夹(Guest Additions、vboxsf)

    问题 我在 Windows 10 上安装了 Vagrant 这样我就可以在虚拟机中创建个人本地开发环境 我读到的有关 Vagrant 的所有内容都表明我什至可以启动多个系统并通过 NAT 端口转发测试它们之间的通信 但首先 我只想在对其余部

随机推荐

  • 《看完就懂系列》谈谈数据埋点的原理与实现

    这是大冰块2021年第7篇原创文章 和大冰块一起在前端领域努力吧 写在前面 之前公司接了个做广告的业务 甲方财大气粗 沟通也特别顺利 刚开始的时候 大家都摩拳擦掌兴致满满 觉得这个项目奖金一定会翻一番 于是第一版赶得很急 上线之后 点击率与
  • 高并发平台技术栈大起底

    技术栈 technology stack 就是一个公司的透视镜 从某些程度上可以展示出公司的技术实力 从技术桟也可以看出整个平台的技术要素 平台大小规模等 今天来给大家分享我司的技术全家桶 总览 闲来无事就想着还可以总结总结什么 平台架构
  • 时序分析基本概念介绍——时钟sdc

    上次介绍了sdc的基本概念 那接下来几期 我们来讲解一些比较常用的sdc命令 虽然sdc大大小小有上百条命令 但实际常用的其实就那么10几条 今天我们来介绍下与时钟相关的命令 主要有以下命令 create clock create gene
  • Zlib的安装与测试

    官方网址 http www zlib net 进入官网看到 如图所示 最新版本为zlib 1 2 11 然后你用wget http www zlib net zlib 1 2 11或者wget http www zlib net zlib
  • NGINX监听不同端口的配置

    server listen 81 监听的端口 server name localhost 监听的域名 location message 当当问这个路径时实际上会去访问下面这个地址 proxy pass http localhost xxx
  • 【计算机视觉40例】案例14:指纹识别

    导读 本文是专栏 计算机视觉40例简介 的第14个案例 指纹识别 该专栏简要介绍李立宗主编 计算机视觉40例 从入门到深度学习 OpenCV Python 一书的40个案例 目前 该书已经在电子工业出版社出版 大家可以在京东 淘宝 当当等平
  • 谈谈互联网免费思维

    大家好 我是测试小牛 一位平凡又普通的95后互联网博主 今天跟大家聊下互联网的免费思维 在移动互联网时代的今天 可能任何一家互联网创业公司的崛起都具备这种思维 比如当年快滴跟滴滴之争 美团跟饿了么之争 非但不收钱 还花钱大量补贴用户 去使用
  • [思考进阶]05 人与人之间的差距,在于“自律”

    除了要提升自己的技术能力 思维的学习和成长也非常非常重要 特推出此 思考进阶 系列 进行刻意练习 从而提升自己的认知 我认识两个成功的长者 其中有一个人 每天记录当天的重要事项 比如今天和谁签了什么合同 房子装修还差什么材料 女儿20岁生日
  • 【教程+实例】Python爬虫实例——用Python爬虫爬取bangumi上的galgame资讯

    文章目录 0 前言 1 什么是爬虫 2 什么东西可以爬 3 简易爬虫示例 4 如何筛选数据 5 正则表达式 6 最终代码 如何修改代码 以适应自己的需求 效果截图 7 彩蛋 本人与知乎用户间宫羽咲sama是同一人 内容同步更新在CSDN和知
  • 1.通用文件模型及VFS结构-基础

    一 reiserFS 新型文件系统 特点 1 采用完全平衡树来容纳数据 ReiserFS是基于平衡树 STree 的文件系统结构 尤其对于大量文件的巨型文件系统 如服务器上的文件系统 搜索速度要比ext2快 ext2使用局部的二分查找法 综
  • 客户服务器被 ddos 攻击,应该怎么办?

    转自 点击打开链接https www v2ex com t 145842 首页 注册 登录 V2EX way to explore V2EX 是一个关于分享和探索的地方 现在注册 已注册用户请 登录 V2EX 提问指南 广告
  • plSQL中修改代码字体的大小

    在第一次打开PLSQL时 大部分人看代码字体的大小肯定不习惯 这时候只需要修改一下字体的大小即可 首先找到左上角的 工具 然后点击第一个首选项 然后再用户界面找到 字体 最后点击编译器中的 选择 即可 然后就可以进行字体大小的调节了
  • Android推送总结

    http blog csdn net baidu 26352053 article details 54135107 最近Android开发当中推送技术是热点 互联网上不同的博客关于推送的介绍也非常的多 大致上关于推送技术 我们可以有使用第
  • JAVA_HOME is not set

    关于JAVA HOME没有设置 本人是在配置spark集群的时候显示 JAVA HOME is not set 具体如下 但是我们在 cd JAVA HOME 还是能够进去 查阅网上资料有各种各样的解决办法 但是看着没啥关系 于是我猜测是没
  • 解决百度网盘(百度云)分享链接不存在失效、分享的文件已经被取消的问题

    解决百度网盘 百度云 分享链接不存在失效 分享的文件已经被取消的问题 参考文章 1 解决百度网盘 百度云 分享链接不存在失效 分享的文件已经被取消的问题 2 https www cnblogs com hafiz p 5496391 htm
  • spring--容器创建过程(IOC和AOP的过程)

    在前面两篇中我们介绍了IOC和AOP 知道了IOC容器就是来管理每个Bean的 而AOP就是对这些Bean进行功能的拓展 那么这个过程是怎么样实现的呢 IOC和AOP又是怎么样的一个过程呢 一 Spring容器创建过程 我们通过一个简单的创
  • 配置网卡信息/etc/sysconfig/network-scripts/ifcfg-eth0,修改ip

    1 ifconfig查看ip信息 root用户下 root edgzrip2 ifconfig a eth0 Link encap Ethernet HWaddr 00 50 56 2B 27 67 inet addr 192 168 23
  • 一键列出所有容器IP地址脚本

    文章目录 使用场景 效果 列出所有容器 自动跳过无终端的容器 脚本 案例 查看网络带宽占用 过滤IP对应的容器 解决带宽占用问题 使用场景 在服务器带宽被占用 但不好定位是哪个容器时 通过用此脚本来快速过滤容器名 以便解决问题 效果 列出所
  • [C++]使用关键字new创建对象

    1 首先解释new关键字的作用 在堆中开辟指定数据类型的空间 调用指定数据类型的构造函数 创建对象 返回创建的对象 int pn new int new与delete搭配使用 这种写法 pn为栈上的一个指针 指向堆上所对应的内存块 int
  • 逻辑地址、物理地址和线性地址

    逻辑地址 logical address 包含在机器语言指令中用来指定一个操作数或一条指令的地址 这种寻址方式在80X86著名的分段结构中表现的尤为具体 它促使MS DOS或Windows程序员把程序分成若干段 每一个逻辑地址都由一个段 s