精华内容
下载资源
问答
  • 物理地址空间
    万次阅读
    2018-06-15 12:46:24

    地址空间是一个进程可用于寻址内存的一套地址集合。

    1、程序经过编译后,每个目标模块都是从0号单元开始编址,称为该目标模块的相对地址(或逻辑地址)。

    2、当链接程序将各个模块链接成一个完整的可执行目标程序时,链接程序顺序依次按各个模块的相对地址构成统一的从0号单元开始编址的逻辑地址空间。

    3、用户程序和程序员只需知道逻辑地址,而内存管理的具体机制则是完全透明的,它们只有系统编程人员才会涉及。

    4、不同进程可以有相同的逻辑地址,因为这些相同的逻辑地址可以映射到主存的不同位置。

    5、物理地址空间是指内存中物理单元的集合,它是地址转换的最终地址,进程在运行时执行指令访问数据都要通过物理地址从主存中存取。当装入程序(Loader)将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址,这个过程称为地址重定位

    更多相关内容
  • 虚拟地址空间和物理地址空间

    千次阅读 2022-02-21 23:45:48
    每个进程都会分配虚拟地址空间,在32位机器上,该地址空间为4G 。平时以虚拟形式存储,当应用程序使用虚拟地址访问内存时/a.out执行,mmu将虚拟地址转换为物理地址执行(正常文件存储在磁盘中) 段错误:内存访问...

    1.概念

    物理地址:物理地址空间是实在的存在于计算机中的一个实体,在每一台计算机中保持唯一独立性。我们可以称它为物理内存;如在32位的机器上,物理空间的大小理论上可以达到2^32字节(4GB),但如果实际装了512的内存,那么其物理地址真正的有效部分只有512MB = 512 * 1024 KB = 512 * 1024 * 1024 B(0x00000000~0x1fffffff)。其他部分是无效的。

    虚拟地址:虚拟地址并不真实存在于计算机中。每个进程都分配有自己的虚拟空间,而且只能访问自己被分配使用的空间。理论上,虚拟空间受物理内存大小的限制,如给有4GB内存,那么虚拟地址空间的地址范围就应该是0x00000000~0xFFFFFFFF。每个进程都有自己独立的虚拟地址空间。这样每个进程都能访问自己的地址空间,这样做到了有效的隔离。

    在上面我们提到了合理的内存管理机制。我们这里虚拟地址和物理地址之间的映射是通过MMU(内存管理单元)来完成的。
    在这里插入图片描述
    MMU:将虚拟的地址转化为物理地址。
    段错误:内存访问非法,内核空间受保护
    堆空间存储后一定要释放

    优点:

    1.既然每个进程的内存空间都是一致而且固定的,所以链接器在链接可执行文件时,可以设定内存地址,而不用去管这些数据最终实际的内存地址,这是有独立内存空间的好处。

    2.当不同的进程使用同样的代码时,比如库文件中的代码,物理内存中可以只存储一份这样的代码,不同的进程只需要把自己的虚拟内存映射过去就可以了,节省内存。

    3.在程序需要分配连续的内存空间的时候,只需要在虚拟内存空间分配连续空间,而不需要实际物理内存的连续空间,可以利用碎片。

    另外,事实上,在每个进程创建加载时,内核只是为进程“创建”了虚拟内存的布局,具体就是初始化进程控制表中内存相关的链表,实际上并不立即就把虚拟内存对应位置的程序数据和代码(比如.text .data段)拷贝到物理内存中,只是建立好虚拟内存和磁盘文件之间的映射就好(叫做存储器映射),等到运行到对应的程序时,才会通过缺页异常,来拷贝数据。还有进程运行过程中,要动态分配内存,比如malloc时,也只是分配了虚拟内存,即为这块虚拟内存对应的页表项做相应设置,当进程真正访问到此数据时,才引发缺页异常。

    在这里插入图片描述

    在这里插入图片描述
    在进程里平时所说的指针变量,保存的就是虚拟地址。当应用程序使用虚拟地址访问内存时,处理器(CPU)会将其转化成物理地址(MMU)。

    这样做的好处在于:
    进程隔离,更好的保护系统安全运行
    屏蔽物理差异带来的麻烦,方便操作系统和编译器安排进程地址

    推荐一篇好文
    https://www.cnblogs.com/clover-toeic/p/3754433.html

    https://blog.csdn.net/qq_38526635/article/details/81981971?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164552919516780269823158%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164552919516780269823158&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogsobaiduend~default-1-81981971.nonecase&utm_term=RAM+ROM+cpu&spm=1018.2226.3001.4450

    https://www.jianshu.com/p/b6356e0ec63c

    展开全文
  • 物理地址空间是什么

    千次阅读 2021-07-25 00:33:25
    今天学习啦小编给大家介绍一下物理地址空间的相关知识。供大家参考!物理地址空间参考如下物理存储器和存储地址空间是两个不同的概念。但是由于这两者有十分密切的关系,而且两者都用B、KB、MB、GB来度量其容量大小,...

    地址空间(address space)表示任何一个计算机实体所占用的内存大小。比如外设、文件、服务器或者一个网络计算机。地址空间包括物理空间以及虚拟空间。今天学习啦小编给大家介绍一下物理地址空间的相关知识。供大家参考!

    物理地址空间参考如下

    物理存储器和存储地址空间是两个不同的概念。但是由于这两者有十分密切的关系,而且两者都用B、KB、MB、GB来度量其容量大小,因此容易产生认识上的混淆,弄清这两个不同的概念,有助于进一步认识主存储器和用好主存储器。

    物理存储器是指实际存在的具体存储器芯片。如主板上装插的主存条和装载有系统的BIOS的ROM芯片,显示卡上的显示RAM芯片和装载显示BIOS的ROM芯片,以及各种适配卡上的RAM芯片和ROM芯片都是物理存储器。

    存储地址空间是指对存储器编码(编码地址)的范围。所谓编码就是对每一个物理存储单元(一个字节)分配一个号码,通常叫作“编址”。分配一个号码给一个存储单元的目的是为了便于找到它,完成数据的读写,这就是所谓的“寻址”(所以,有人也把地址空间称为寻址空间)。

    CPU在操控物理存储器的时候,把物理存储器都当作内存来对待,把它们总的看作一个由若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。

    有的物理存储器被看作一个由若干存储单元组成的逻辑存储器,每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间。CPU在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。

    地址空间的大小和物理存储器的大小并不一定相等。举个例子来说明这个问题:某层楼共有17个房间,其编号为801~817。这17个房间是物理的,而其地址空间采用了三位编码,其范围是800~899共100个地址,可见地址空间是大于实际房间数量的。

    对于386以上档次的微机,其地址总线为32位,因此地址空间可达2的32次方,即4GB。但实际上我们所配置的物理存储器通常只有1MB、2MB、4MB、8MB、16MB、32MB等,远小于地址空间所允许的范围。

    Linux用户空间访问物理地址

    有时候因为项目需要,需要在Linux userspace 读写访问实际物理地址。

    一)用户空间可以直接通过打开 /dev/mem 设备文件,然后mmap() 影射进行访问

    [cpp] view plain?

    static int read_type()

    {

    void * map_base;

    FILE *f;

    int type,fd;

    #define READ_REG32(reg) ( *((volatile int *) (reg)) )

    #define ALLOC_SIZE (1024)

    fd = open("/dev/mem", O_RDWR | O_SYNC);

    if (fd) {

    printf("Success to open /dev/mem fd=%08x\n", fd);

    }

    else {

    printf("Fail to open /dev/mem fd=%08x\n", fd);

    }

    map_base = mmap(0, ALLOC_SIZE, PROT_READ, MAP_PRIVATE, fd, 0x35004000);

    type = READ_REG32(map_base + 0x20);

    close(fd);

    munmap(map_base, ALLOC_SIZE);

    printf("reg32[%08x] = value[%08x] \n", map_base, type);

    type = (type & ( 1 << 27 )) >> 27 ;

    printf("reg32[%08x] = value[%08x] \n", map_base, type);

    return type;

    }

    mmap,通过内核建立一个虚拟地址到物理地址的映射,然后通过这一虚拟地址就可以在用户空间访问真实的物理地址了

    mmap() 其中有几个参数需要说明:

    PROT_READ 区域可读;

    PROT_WRITE 区域可写;

    MAP_SHARED 对映射区域的写入数据会复制回文件内, 而且允许其他映射该文件的进程共享。

    在Android 4.4上实际运行的结果:

    编译生成的用户空间可执行程序,需要root user权限才能运行。即使程序本身已经是 rwx-rwx-rwx权限。

    mmap()中映射的缓冲区必须是 PAGE size 的整数倍。 如果不是,会产生segmentation fault。

    实际访问的物理地址如果不是恰好是PAGE size 的整数倍,必须要对mmap()返回的映射基地址加上对应的偏移量,得到最终的影射后地址。

    二)用户空间驱动程序

    如果用户空间可以访问实际物理地址,则可以更进一步实现用户空间的硬件驱动程序。

    用户空间驱动的优点:

    完整的 C 库可以连接. 驱动可以进行许多奇怪的任务, 不用依靠外面的程序(实现使用策略的工具程序, 常常随着驱动自身发布).

    程序员可以在驱动代码上运行常用的调试器, 而不必走调试一个运行中的内核的弯路.

    如果一个用户空间驱动挂起了, 你可简单地杀掉它. 驱动的问题不可能挂起整个系统, 除非被控制的硬件真的疯掉了.

    用户内存是可交换的, 不象内核内存. 一个不常使用的却有很大一个驱动的设备不会占据别的程序可以用到的 RAM, 除了在它实际在用时.

    一个精心设计的驱动程序仍然可以, 如同内核空间驱动, 允许对设备的并行存取.

    如果你必须编写一个封闭源码的驱动, 用户空间的选项使你容易避免不明朗的许可的情况和改变的内核接口带来的问题.

    用户空间的设备驱动的方法有几个主要缺点:

    中断在用户空间无法用. 在某些平台上有对这个限制的解决方法, 例如在 IA32 体系上的 vm86 系统调用.

    只可能通过内存映射 /dev/mem 来使用 DMA, 而且只有特权用户可以这样做.

    存取 I/O 端口只能在调用 ioperm 或者 iopl 之后. 此外, 不是所有的平台支持这些系统调用, 而存取/dev/port可能太慢而无效率. 这些系统调用和设备文件都要求特权用户.

    响应时间慢, 因为需要上下文切换在客户和硬件之间传递信息或动作.

    更不好的是,

    如果驱动已被交换到硬盘, 响应时间会长到不可接受. 使用 mlock 系统调用可能会有帮助, 但是常常的你将需要锁住许多内存页, 因为一个用户空间程序依赖大量的库代码. mlock, 也, 限制在授权用户上.

    最重要的设备不能在用户空间处理, 包括但不限于, 网络接口和块设备.

    如你所见, 用户空间驱动不能做的事情毕竟太多. 感兴趣的应用程序还是存在: 例如, 对 SCSI 扫描器设备的支持( 由 SANE 包实现 )和 CD 刻录器 ( 由 cdrecord 和别的工具实现 ). 在两种情况下, 用户级别的设备情况依赖 "SCSI gneric" 内核驱动, 它输出了低层的 SCSI 功能给用户程序, 因此它们可以驱动它们自己的硬件.

    一种在用户空间工作的情况可能是有意义的, 当你开始处理新的没有用过的硬件时. 这样你可以学习去管理你的硬件, 不必担心挂起整个系统. 一旦你完成了, 在一个内核模块中封装软件就会是一个简单操作了.

    学习啦小编介绍了物理地址空间的相关知识,希望你喜欢。

    展开全文
  • 【题目】46.(8分)设某计算机的逻辑地址空间和物理地址空间均为64 KB,按字节编址。若某进程最多需要6页(Page)数据存储空间,页的大小为1KB,操作系统采用固定分配局部置换策略为此进程分配4个页框(Page Frame)。在...

    【题目】

    46.(8分)设某计算机的逻辑地址空间和物理地址空间均为64 KB,按字节编址。若某进程最多需要6页(Page)数据存储空间,页的大小为1

    KB,操作系统采用固定分配局部置换策略为此进程分配4个页框(Page Frame)。在时刻260前的该进程访问情况如下表所示(访问位即使用位)。

    b9fb36acb9e00076497a971e7a2632ab.png

    【答案要点】

    (1)因17CAH=0001 0111 1100 1010B,表示页号的位为左边6位,所以页号为5。

    (2) 根据FIFO算法,需要替换装入时间最早的页,故需要置换装入时间最早的0号页,即将5号页装入7号页框中,所以物理地址为0001 1111

    1100 1010B,换算成十六进制为1FCAH。

    (3) 根据CLOCK算法,如果当前指针所指页框的使用位为0,则替换该页;否则将使用

    位清零,并将指针指向下一个页框,继续查找。根据题设和示意图,将从2号页框开始,前4

    次查找页框号的顺序为2→4→7→9,并将对应页框的使用位清零。在第5次查找中,指针指向2号页框,因2号页框的使用位为0,故淘汰2号页框对应的2号页,把5号页装入2号页框中,

    并将对应使用位设置为1,所以对应的物理地址为0000 1011 1100 1010B,换算成十六进制为0BCAH。

    展开全文
  • 物理地址空间和虚拟地址空间

    千次阅读 2018-02-18 21:43:18
    因为CPU是32位的,其地址总线是32位的,所以其地址总线可编码的个数是2^32(4G),这2^32个物理地址的集合就是物理地址空间。这与38译码器的道理是一样的,这一点很好理解。 二、虚拟地址(空间) &nbsp; &...
  • 在CPU和物理内存之间进行地址转换时,( )将地址从虚拟(逻辑)地址空间映射到物理地址空间 TCB MMU CACHE DMA 解析:MMU是Memory Manage Unit的缩写,即存储管理单元,是中央处理器用来管理虚拟内存和物理内存...
  • 程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区。 2.方便进程之间隔离 不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一进程使用的物理内存。 3.方便OS使用你那...
  • 设某计算机的逻辑地址空间和物理地址空间均为64KB,按字节编址。若某进程最多需要6页(Page)数据存储空间,页的大小为1KB [2],操作系统采用固定分配局部置换策略为此进程分配4个页框(Page Frame)。 页号 ...
  • 虚拟地址空间映射到物理地址空间

    千次阅读 2018-09-07 09:06:45
    虚拟地址空间映射到物理地址空间参考如下  当处理器读或写入内存位置时,它会使用虚拟地址。作为读或写操作的一部分,处理器将虚拟地址转换为物理地址。通过虚拟地址访问内存有以下优势:  程序可以使用一系列...
  • 》,我们知道了CPU是如何访问内存的,本篇文章我们来讲下虚拟地址空间和物理地址空间的映射。 通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间...
  • 对虚拟地址空间对应实际物理地址的理解

    千次阅读 多人点赞 2018-12-18 23:22:16
    在 早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算机同时运行多个程序时,必须保证这些程序用到的内存总量...
  • 进程地址空间(虚拟地址 | 物理内存)

    千次阅读 多人点赞 2021-03-17 20:45:37
    文章目录前言一、简单理解地址空间二、虚拟地址现象解释三、三个问题搞懂地址空间1. 什么是地址空间?2. 为什么要有地址空间?3. 地址空间是如何工作的?四、一些补充 前言 在之前的学习中,我们只学习了图中的下...
  • 进程地址空间的分布,虚拟内存和物理内存的映射关系,页表
  • 关注+星标公众号,不错过精彩内容转自 |嵌入式应用研究院计算机操作系统中的内存使用两种不同类型的地址。物理地址是内存的实际地址,如RAM,虚拟地址只是缓存和RAM之间的逻辑地址映射。在操...
  • 了解操作系统管理内存的框架、物理地址空间和逻辑地址空间的管理方式;掌握分配和回收物理内存的方法。 实验内容与记录 3.2 通过该节步骤,回答下述两个问题: (1)EOS所管理的虚拟机的物理地址大小是多少Mbyte,其...
  • 物理地址和虚拟地址的区别

    千次阅读 2019-10-30 21:23:35
    1)物理地址: CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中 很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上 (如显存、 BIOS等)。在程序指令中的虚拟地址经过段映射和页面映射后...
  • 为什么把进程的地址空间分为逻辑地址空间和物理地址空间? 2012-12-10 14:57匿名 分类:Windows | 浏览 552 次  操作系统 分享到: 2012-12-11 21:09 网友采纳 主要是为了屏蔽底层细节,例如 1 如果你编的...
  • ⭐️这篇博客就要和大家介绍进程地址空间相关内容,学完这个部分,我们会对进程的地址空间有一个全选的了解 目录程序地址空间进程地址空间 程序地址空间 先看厦门下面一张图,在之前C/C+博客的内存管理中放过这...
  • Linux 下面对物理地址的访问

    千次阅读 2021-05-12 08:10:45
    Linux内核提供了/dev/mem驱动,提供了一种直接访问内存物理地址的方法,具体实施有两种方法,一是设备驱动,二是系统调用的方法。/dev/mem驱动的源文件在drivers/char/mem.c中。这个文件还生成了一些常用的字符设备...
  • 物理地址和逻辑地址

    万次阅读 多人点赞 2018-05-15 01:16:38
    物理地址和逻辑地址 物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。这些数字被北桥(Nortbridge chip)映射到...
  • 虚拟地址与物理地址的区别

    千次阅读 2018-08-10 21:09:03
    4. MMU 请点评   现代操作系统普遍采用虚拟内存...首先引入两个概念,虚拟地址和物理地址。如果处理器没有MMU,或者有MMU但没有启用,CPU执行单元发出的内存地址将直接传到芯片引脚上,被内存芯片(以下称为...
  • 逻辑地址表示:页式系统地址空间是一维的,即单一的线性地址空间,程序员只需利用一个标识符,即可表示一个地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。 比页大...
  • 整理参考资料:文档1 、 文档2 ... 可以直接把物理地址理解成插在机器上那根内存条本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后 把这个数组叫做物理地址   虚拟内存(virtual memory) ...
  • 设某计算机的逻辑地址空间和物理地址空间均为128KB,按字节编址。若某进程最多需要6页数据存储空间,页面大小为1KB,操作系统采用固定分配局部置换策略为该进程分配4个页框(物理块)。在时刻300前该进程各页面的...
  • 操作系统【逻辑空间物理空间与页表大小的关系】【分页地址映射(方法+例题)】
  • 这篇博文可以在你基本了解逻辑地址空间和物理地址空间的概念后,为增强理解可通过我画的示意图来理解,本文会深入一些概念,以达到全面掌握该映射关系的目的。画图不易鸭,点个赞再走呗(✿◡‿◡) 逻辑地址空间及...
  • linux的物理内存与线性地址空间布局

    千次阅读 2013-04-16 23:37:19
    在支持MMU的32位处理器平台上,Linux系统中的物理存储空间和虚拟存储空间地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同。Linux运行在虚拟存储空间,并负责把系统中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 343,493
精华内容 137,397
关键字:

物理地址空间