打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Linux 进程的虚拟内存

在装入程序映象文件时,系统根据程序映象文件中的信息为进程的代码段和数据段
分别建立相应的虚拟内存区域(图 3-5 所示的即为某个程序映象装入后的代码段和数
据段)。如果该程序用到了任何一个共享库,则共享库也必须装入进程的虚拟地址空
间。利用 ldd
命令可查看一个程序的共享库使用情况和装入的地址:

[WeiYM@goldfield src]$ ldd testgui
libvgagl.so.1 => /lib/libvgagl.so.1 (0x40005000)
libvga.so.1 => /lib/libvga.so.1 (0x40013000)
libpthread.so.0 => /lib/libpthread.so.0 (0x40037000)
libc.so.6 => /lib/libc.so.6 (0x40044000)
libm.so.6 => /lib/libm.so.6 (0x400ea000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00000000)

前面提到,Linux 利用需求分页技术优化程序映象的装入。在装入程序映象时,Lin
ux 并不将映象装入物理内存,相反,可执行文件只是被链接到进程的虚拟地址空间
中。随着程序的运行,被引用的程序部分会由操作系统自动装入物理内存。

在程序的执行过程中,可利用如下的系统调用修改进程的虚拟内存:


brk 或 sbrk:利用该系统调用可修改进程数据段的大小,可用于内存的动态分配。


mmap:利用该函数可将文件映射到进程的虚拟地址空间。系统将增加新的内存区域
数据结构,但并不实际装入文件数据,而是利用需求分页技术,当需要真正访问数据
辈抛叭氲轿锢砟诖妗:?mmap 相关的系统调用还有 munmap 和 msync,munmap 可取
消文件的内存映射关系,msync
可将任何对内存映射中所做的修改实际写入到对应的文件中。


mremap:利用该系统调用可改变某个虚拟内存区域的大小,包括扩大内存区域或减
小内存区域。在 Linux 中,它的作用并不限制于文件映射内存区。利用该函数可有效
实现 ANSI C 的 realloc 函数。


mlock 或 mlockall:利用这些系统调用可以禁止对某个虚拟内存区域,或整个虚拟
内存(包括代码、数据和堆栈段、共享库、用户空间的内核数据、共享内存和内存映
射文件等)的分页操作。禁止分页的内存页可以驻留在 RAM 中,直到调用 munlock
或 munlockall
为止。将内存页锁定到 RAM 中的方法经常用于两种场合:实时系统和需要高度安全
性的数据处理。对实时系统而言,分页机制可能导致严重的不可预料的时间延迟,因
此禁止分页有利于实时处理
。对高度安全性的数据处理来说,禁止分页可避免将重要的数据写入交换文件而导
致可能的数据窃取。


getrlimit、getrusage 和 setrlimit:利用这些系统调用可查看或设置进程的资源
限制以及资源使用情况,包括数据段大小、堆栈段大小、共享内存大小和锁定内存大
小等。


getpagesize:利用该系统调用可获得系统内存页的单位大小。

在程序中,通常利用 ANSI C 的标准内存处理函数从进程堆或栈中分配内存,例如
:malloc、free,alloca 等。

Linux 的虚拟内存使用有一个特点,即分配的虚拟内存区域由内核管理,并在适当
的时候自动分配给相应的物理内存区。除非要使用特殊的功能,例如内存映射和锁定
δ埽 讨恍枥 ?ANSI C 的函数在进程堆中分配和使用内存。

 

FROM:  http://hi.baidu.com/cannick/blog/item/f99d023e6fd6db3871cf6c0a.html 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux操作系统基础知识学习
关于Linux 虚拟内存
 Linux中的虚拟地址、物理地址和内存管理方式(一)
Linux中的内存管理
分页池和非分页池
进程和程序(Process and Program)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服