展开

关键词

进程的虚拟地址空间

虚拟地址会通过硬件 MMU(内存管理单元)映射到实际的物理地址空间中,建立虚拟地址到物理地址的映射关系后,对虚拟地址的读写操作实际上就是对物理地址的读写操作,MMU 会将物理地址“翻译”为对应的物理地址 Linux 系统下,应用程序运行在一个虚拟地址空间中,所以程序中读写的内存地址对应也是虚拟地址,并不是真正的物理地址,譬如应用程序中读写 0x80800000 这个地址,实际上并不对应于硬件的 0x80800000 为什么需要引入虚拟地址呢? 针对以上的一些问题,就引入了虚拟地址机制。程序访问存储器所使用的逻辑地址就是虚拟地址,通过逻辑地址映射到真正的物理内存上。 所有应用程序运行在自己的虚拟地址空间中,使得进程的虚拟地址空间和物理地址空间隔离开来,这样做带来了很多的优点: ⚫ 进程与进程、进程与内核相互隔离。

43230

虚拟地址空间的内存布局

出现保护模式以后,提供虚拟地址空间对实际物理内存抽象虚拟,形成一一映射的关系。

7520
  • 广告
    关闭

    腾讯云校园大使火热招募中!

    开学季邀新,赢腾讯内推实习机会

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux虚拟地址空间布局

    这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块。 虚拟地址通过页表(Page Table)映射到物理内存,页表由操作系统维护并被处理器引用。内核空间在页表中拥有较高特权级,因此用户态程序试图访问这些页时会导致一个页错误(page fault)。 8 保留区 位于虚拟地址空间的最低部分,未赋予物理地址。任何对它的引用都是非法的,用于捕捉使用空指针和小整型值指针引用内存的异常情况。 在32位X86架构的Linux系统中,用户进程可执行程序一般从虚拟地址空间0x08048000开始加载。该加载地址由ELF文件头决定,可通过自定义链接器脚本覆盖链接器默认配置,进而修改加载地址。

    1K40

    Linux 进程虚拟地址空间布局

    文章目录 1.虚拟地址空间简介 2.虚拟地址空间布局 参考文献 1.虚拟地址空间简介 虚拟地址空间(Virtual Address Space)是每一个程序被加载运行起来后,操作系统为进程分配的虚拟内存 每个进程所能访问的最大的虚拟地址空间由计算机的硬件平台决定,具体地说是由 CPU 的位数决定的。 比如 32 位的 CPU 决定了虚拟地址空间的大小为 0 - -1,即 0x00000000 - 0xFFFFFFFF,也就是我们常说的 4 GB 虚拟内存空间。 对于 Linux,4GB 的虚拟地址空间的默认分配状态如下: 2.虚拟地址空间布局 C/C++程序为编译链接后生成可执行的二进制文件,由多个段组成,一般包含代码段、数据段和 BSS 段等。 由于可执行文件段的数量较多,映射到虚拟地址空间时,由于段的大小往往并不是系统页大小的整数倍,多余部分也会占用一个页,这就会造成内存空间的浪费。

    14250

    杭州发布《大数据城市经济地图》,数据视角看杭州

    杭州城市数据大脑发布 在今年六月,杭州成立了大数据资源管理局,将大数据作为一种资源、一种财富来进行管理。 12月28日,在杭州市数据资源开发协会成立现场,杭州市数据资源管理局、杭州移动和CityDo联合发布了《大数据城市经济地图》。 、星耀城等新兴产业为主的园区,是杭州上班族日常通勤的热门流向,在一定程度上代表了杭州的经济发展方向。 而通过分析上班距离,可以发现杭州的出行距离呈现出纺锤形结构,与其地市的倒三角明显不同,这在一定程度上反映了杭州交通成本较高的问题。 杭州手机门店数据图 ? 杭州旅游数据图 根据杭州旅游数据图显示,今年8月杭州旅游总人数达1058万人,比去年同期增长了14%,每年的春秋是旅游旺季,冬夏是淡季。省内游客以金华、台州、绍兴和湖州为主,省外是以上海、南昌为主。

    1.1K60

    物理地址和虚拟地址的分布

    上一节内容的学习我们知道了CPU是如何访问内存的,CPU拿到内存后就可以向其它人(kernel的其它模块、内核线程、用户空间进程、等等)提供服务,主要包括: 以虚拟地址(VA)的形式,为应用程序提供远大于物理内存的虚拟地址空间 Linux内核空间虚拟地址分布 ? 在 Kernel Image 下面有 16M 的内核空间用于 DMA 操作。 Linux用户空间虚拟地址分布 ? 用户进程的代码区一般从虚拟地址空间的 0x08048000 开始,这是为了便于检查空指针。 Linux物理地址和虚拟地址的关系 ? Linux 将 4G 的线性地址空间分为2部分,0~3G 为 user space,3G~4G 为 kernel space。 到这里我们应该知道了 Linux 是如何用虚拟地址来映射物理地址的,最后我们用一张图来总结一下: ?

    73130

    物理地址和虚拟地址的分布

    上一节内容的学习我们知道了CPU是如何访问内存的,CPU拿到内存后就可以向其它人(kernel的其它模块、内核线程、用户空间进程、等等)提供服务,主要包括: 以虚拟地址(VA)的形式,为应用程序提供远大于物理内存的虚拟地址空间 Linux内核空间虚拟地址分布 ? 在 Kernel Image 下面有 16M 的内核空间用于 DMA 操作。 Linux用户空间虚拟地址分布 ? 用户进程的代码区一般从虚拟地址空间的 0x08048000 开始,这是为了便于检查空指针。 Linux物理地址和虚拟地址的关系 ? Linux 将 4G 的线性地址空间分为2部分,0~3G 为 user space,3G~4G 为 kernel space。 到这里我们应该知道了 Linux 是如何用虚拟地址来映射物理地址的,最后我们用一张图来总结一下: ?

    806111

    杭州某大厂:MySQL 连环问

    随着用户量的激增和时间的堆砌,存在数据库里面的数据越来越多,此时的数据库就会产生瓶颈,出现资源报警、查询慢等场景。

    14520

    杭州电 3711 Binary Number

    Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth...

    5510

    杭州电 1203 I NEED A OFFER!

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth...

    6120

    用户态进程如何得到虚拟地址对应的物理地址?

    一般我们不需要从用户态得到进程虚拟地址对应的物理地址,因为一般来说用户进程是完全不关心物理地址的。 少数应用场景下,用户可能会关心,比如在用户态做DMA的场景(如DPDK之类的)。 从用户态得到虚拟地址对应的物理地址,我们不可能去walk进程的page table,也没有权限。不过还好内核给我们提供了一个接口,叫pagemap,而且,这个接口与硬件的体系架构无关。 在/proc/pid/下面有个文件叫pagemap,它会每个page,生成了一个64bit的描述符,来描述虚拟地址这一页对应的物理页帧号或者SWAP里面的便宜,详见文档: linux/Documentation 下面我们忽略swap的影响(假设关闭了swap或者page一直是pin的状态),从DPDK抄一段虚拟地址转换为物理地址的代码: #define phys_addr_t uint64_t #define

    1.1K21

    现在的房租有多高(杭州)?

    杭州房租:钱塘两岸最高,奥体单间达4830元/月。不少人感叹:躲过了高房价,躲不过高房租,面对房租上涨,感觉身体被掏空。 2018年的这个夏天,房租正在成为摧垮年轻人的“第一根稻草”,在杭州打拼的你,所在的城区房租涨了吗?你是否还能潇洒地说出 “买不起房子,就租嘛”? 这是在新浪财经看到的一篇新闻,因为初来杭州,房租涨没涨,我不清楚,但是房租高确确实实是存在的,说多了还是因为穷呐... 接下来就用Python来分析一下杭州的租房情况,看看房租究竟有多高? 可以看出杭州的出租房大多是分布在30到90平米之间,这也符合常态,毕竟面积过大,租不起,面积过小,住的不舒坦。

    19810

    【操作系统复习】物理地址虚拟地址

    【操作系统复习】 物理地址虚拟地址 物理地址和虚拟地址的区别 物理地址 逻辑地址 线性地址 为什么要分成物理地址和虚拟地址 物理内存及虚拟内存定义 为什么要有虚拟内存 虚拟内存的实现(可以在页式或段式内存管理的基础上实现 (我回答虚拟地址就是逻辑地址。。) 虚拟地址转换为物理地址的过程 快表是存储在哪里的 物理地址和虚拟地址的区别 操作系统有物理地址、逻辑地址、线性地址(也叫虚拟地址)三种地址 物理地址 在存储器里以字节为单位存储信息,为正确地存放或取得信息 (我回答虚拟地址就是逻辑地址。。) 如果是没有使用虚拟内存的页式/段式系统,没有虚拟地址这一说法, 逻辑地址一定直接可以转换为物理地址,因为进程都在内存中存储。 Linux 线性地址,逻辑地址和虚拟地址的关系?

    75820

    手动玩转虚拟地址到物理地址转化

    我们这次来根据dump动手来实际转化一个虚拟地址到物理地址,此次的地址不是线性地址映射。 ____________| | C:FFFFFF8008015000| A:C549F000 上面0xFFFFFF8008015000就是虚拟地址 = 0x1), 前期条件: 虚拟地址:0xFFFFFF8008015000 init_mm→pgd的值:0xFFFFFF9B4FCA7000 PGD_Index = 虚拟地址>>30位 = (0xFFFFFF8008015000 present的意思是页是否是有效的,无效代表虚拟到物理地址之间的转化无效,当访问虚拟地址的时候就会page fault protection :权限之类的,是否读写执行权限之类的。 如果你访问一段虚拟地址,页表中是无法执行的权限,但是你想执行这段代码就会出错 reference: 引用之类的 cache: cache是否有效。

    46720

    网易杭州游戏研发实习面经

    网易杭州4月5号投的简历,20号笔试,两个半小时三道算法题,做出来两道,网易题说明巨长,一定要有耐心   第一题是给一个弹球的初始位置,撞墙改变方向,问最后停留位置什么的,   第二题是模拟Markdown 完了之后立刻面头条,面完已经是这边夜里两点了,所幸也过了,不过到现在还没匹配好,又是转岗什么的,神烦,不大想去了)   前两道调输入输出很麻烦,有的人卡在上面,第三题当时没做出来   25号接到面试邀请,杭州互娱

    84050

    Linux可执行文件与进程的虚拟地址空间

    Linux可执行文件与进程的虚拟地址空间 一个可执行文件被执行的同时也伴随着一个新的进程的创建。 Linux会为这个进程创建一个新的虚拟地址空间,然后会读取可执行文件的文件头,建立虚拟地址空间与可执行文件的映射关系,然后将CPU的指令指针寄存器设置成可执行文件的入口地址,然后CPU就会从这里取指令执行 32位的虚拟地址空间 ? 64位的虚拟地址空间 ? Proc目录下的进程虚拟地址空间布局 Linux在装载可执行文件的时候,会将这些segment映射到进程的地址空间中。 Linux将进程虚拟地址空间中的一个段叫做虚拟内存区域(VMA)。在/proc目录下,可以查看一个进程的虚拟地址空间,通过命令 cat /proc/pid/maps ? FileSiz表示segment在ELF文件中所占的大小,MemSiz表示segment在进程虚拟地址空间中所占的大小。

    1.7K30

    扫码关注腾讯云开发者

    领取腾讯云代金券