热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

classicmemorylayoutflexiblememorylayout

本文阐述了经典的虚拟内存布局和易变虚拟内存布局;-------GustavoDuarte他的blog很好看上图,有图一切都明白了。flexiblemem

本文阐述了 经典的虚拟内存布局 和 易变虚拟内存布局;

-------Gustavo Duarte 他的blog很好看
上图,有图一切都明白了。
flexible memory layout:
classic memory layout:
易变虚拟内存布局就是在各个虚拟内存区中引用随机的偏移量。从而使Hacker很难猜测出函数库,映射文件等等的位置。从而一定程度上使程序得到保护,但是32位系统用户空间的狭小,削弱了这种效果。
我们也可以从这个patch的原作者的mail中得到一些有用的信息:
http://lwn.net/Articles/90311/
the goal of the patch is to change the way virtual memory is allocated,
from:
//传统虚拟内存布局
  0x08000000 ... binary image
  0x08xxxxxx ... brk area, grows upwards
  0x40000000 ... start of mmap, new mmaps go after old ones//从1G开始 向上增长,这导致了一个问题,无法完全利用虚拟内存空间。
  0xbfxxxxxx ... stack

to a more flexible top-down mmap() method:
//易变虚拟内存布局
  0x08000000 ... binary image
  0x08xxxxxx ... brk area, grows upwards
  0xbfxxxxxx ... _end_ of all mmaps, new mmaps go below old ones//从stack+random offset开始 向下增长,可以用满虚拟内存空间
  0xbfyyyyyy ... stack

the new layout has a couple of advantages:

- primarily this layout enables both malloc(), mmap()/shmat() users to
  utilize the full address space: 3GB on stock x86, 4GB on x86 4:4 or
  x86-64 running x86 apps.

- the new layout is also in essence 'self-tuning' the mmap() and
  malloc() limits: no hacks like /proc/PID/mmap_base are needed - both
  malloc() and mmap() can grow until all the address space is full.
  With the old layout, malloc() space was limited to 900MB, mmap() space
  to ~2GB.

- The new layout also allows very large continuous mmap()s because the
  'free space' is always a continuous hole (statistically).

- there's also a ~4K pagetable saved per typical process, because we
  dont allocate at 1GB anymore and dont fragment the VM that much -
  there are only 2 main chunks, the binary image + brk(), and the mmap()
  area + stack.
  1. [root@localhost study]# pmap -x 1
  2. 1: init [3]
  3. Address Kbytes RSS Dirty Mode Mapping
  4. 002e7000 4 4 0 r-x-- [ anon ]
  5. 00469000 104 84 0 r-x-- ld-2.5.so
  6. 00483000 4 4 4 r-x-- ld-2.5.so
  7. 00484000 4 4 4 rwx-- ld-2.5.so
  8. 00487000 1276 356 0 r-x-- libc-2.5.so
  9. 005c6000 4 0 0 --x-- libc-2.5.so
  10. 005c7000 8 8 4 r-x-- libc-2.5.so
  11. 005c9000 4 4 4 rwx-- libc-2.5.so
  12. 005ca000 12 12 12 rwx-- [ anon ]
  13. 005f8000 8 8 0 r-x-- libdl-2.5.so
  14. 005fa000 4 4 4 r-x-- libdl-2.5.so
  15. 005fb000 4 4 4 rwx-- libdl-2.5.so
  16. 00638000 88 40 0 r-x-- libselinux.so.1
  17. 0064e000 8 8 8 rwx-- libselinux.so.1
  18. 00652000 236 16 0 r-x-- libsepol.so.1
  19. 0068d000 4 4 4 rwx-- libsepol.so.1
  20. 0068e000 40 0 0 rwx-- [ anon ]
  21. 08048000 32 32 0 r-x-- init
  22. 08050000 4 4 4 rw--- init
  23. 098db000 132 16 16 rw--- [ anon ]
  24. b7f32000 8 8 8 rw--- [ anon ]
  25. bfc07000 84 16 16 rw--- [ stack ]
  26. -------- ------- ------- ------- -------
  27. total kB 2072 - - -
  28. [root@localhost study]# cat /proc/1/maps
  29. 002e7000-002e8000 r-xp 002e7000 00:00 0 [vdso]
  30. 00469000-00483000 r-xp 00000000 08:03 1182164 /lib/ld-2.5.so
  31. 00483000-00484000 r-xp 00019000 08:03 1182164 /lib/ld-2.5.so
  32. 00484000-00485000 rwxp 0001a000 08:03 1182164 /lib/ld-2.5.so
  33. 00487000-005c6000 r-xp 00000000 08:03 1182165 /lib/libc-2.5.so
  34. 005c6000-005c7000 --xp 0013f000 08:03 1182165 /lib/libc-2.5.so
  35. 005c7000-005c9000 r-xp 0013f000 08:03 1182165 /lib/libc-2.5.so
  36. 005c9000-005ca000 rwxp 00141000 08:03 1182165 /lib/libc-2.5.so
  37. 005ca000-005cd000 rwxp 005ca000 00:00 0
  38. 005f8000-005fa000 r-xp 00000000 08:03 1182169 /lib/libdl-2.5.so
  39. 005fa000-005fb000 r-xp 00001000 08:03 1182169 /lib/libdl-2.5.so
  40. 005fb000-005fc000 rwxp 00002000 08:03 1182169 /lib/libdl-2.5.so
  41. 00638000-0064e000 r-xp 00000000 08:03 1182183 /lib/libselinux.so.1
  42. 0064e000-00650000 rwxp 00015000 08:03 1182183 /lib/libselinux.so.1
  43. 00652000-0068d000 r-xp 00000000 08:03 1182182 /lib/libsepol.so.1
  44. 0068d000-0068e000 rwxp 0003b000 08:03 1182182 /lib/libsepol.so.1
  45. 0068e000-00698000 rwxp 0068e000 00:00 0
  46. 08048000-08050000 r-xp 00000000 08:03 884969 /sbin/init
  47. 08050000-08051000 rw-p 00008000 08:03 884969 /sbin/init
  48. 098db000-098fc000 rw-p 098db000 00:00 0 [heap]
  49. b7f32000-b7f34000 rw-p b7f32000 00:00 0
  50. bfc07000-bfc1c000 rw-p bffea000 00:00 0 [stack]
以上为flexible memroy layout 输出结果。可以与上图对比着看一下
内核的/proc文件系统也提供了相应的控制接口,来确定使用哪种虚拟内存布局
echo 1 > /proc/sys/vm/legacy_va_layout
1 使用传统虚拟内存布局
0 使用易变虚拟内存布局


推荐阅读
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 【妙】bug称它为数组越界的妙用
    1、聊一聊首先跟大家推荐一首非常温柔的歌曲,跑步的常听。本文主要把自己对C语言中柔性数组、零数组等等的理解分享给大家,并聊聊如何构建一种统一化的学习思想 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 本文详细介绍了如何使用Python的多进程技术来高效地分块读取超大文件,并将其输出为多个文件。通过这种方式,可以显著提高读取速度和处理效率。 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
author-avatar
mobiledu2502873187
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有