等待proc文件的高手。爱冒充大拿的那几位,最好别来瞎说。

aozhi 2013-05-09 11:43:03
[root@home ~]# strings /proc/self/maps
00400000-00406000 r-xp 00000000 08:01 136036 /usr/bin/strings
00606000-00607000 rw-p 00006000 08:01 136036 /usr/bin/strings
0074d000-0076e000 rw-p 00000000 00:00 0 [heap]
3639800000-3639820000 r-xp 00000000 08:01 125 /lib64/ld-2.12.so
3639a1f000-3639a20000 r--p 0001f000 08:01 125 /lib64/ld-2.12.so
3639a20000-3639a21000 rw-p 00020000 08:01 125 /lib64/ld-2.12.so
3639a21000-3639a22000 rw-p 00000000 00:00 0
3639c00000-3639d89000 r-xp 00000000 08:01 161 /lib64/libc-2.12.so
3639d89000-3639f89000 ---p 00189000 08:01 161 /lib64/libc-2.12.so
3639f89000-3639f8d000 r--p 00189000 08:01 161 /lib64/libc-2.12.so
3639f8d000-3639f8e000 rw-p 0018d000 08:01 161 /lib64/libc-2.12.so
3639f8e000-3639f93000 rw-p 00000000 00:00 0
363a000000-363a0d2000 r-xp 00000000 08:01 145089 /usr/lib64/libbfd-2.20.51.0.2-5.11.el6.so
363a0d2000-363a2d1000 ---p 000d2000 08:01 145089 /usr/lib64/libbfd-2.20.51.0.2-5.11.el6.so
363a2d1000-363a2e2000 rw-p 000d1000 08:01 145089 /usr/lib64/libbfd-2.20.51.0.2-5.11.el6.so
363a2e2000-363a2e6000 rw-p 00000000 00:00 0
363b400000-363b415000 r-xp 00000000 08:01 12310 /lib64/libz.so.1.2.3
363b415000-363b614000 ---p 00015000 08:01 12310 /lib64/libz.so.1.2.3
363b614000-363b615000 rw-p 00014000 08:01 12310 /lib64/libz.so.1.2.3
7fe149783000-7fe149786000 rw-p 00000000 00:00 0
7fe14978d000-7fe149790000 rw-p 00000000 00:00 0
7fff70bc1000-7fff70bd6000 rw-p 00000000 00:00 0 [stack]
7fff70bff000-7fff70c00000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]

查看strings命令自身的映射信息。每条的第二个字段(权限)中的p是啥意思啊?
...全文
159 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2013-05-09
  • 打赏
  • 举报
回复
是的六字符啊
aozhi 2013-05-09
  • 打赏
  • 举报
回复
那么,我理解private的内存和分页管理中的“写时拷贝”应该是一回事,对吗?
www_adintr_com 2013-05-09
  • 打赏
  • 举报
回复
相对于 strings 的进程来说的. 这个和 GDT/LDT 没有关系. GDT/LDT 是用于内存的分段管理, 而现在几乎所有的现代操作系统, 包括 Linux 都选择绕过分段机制, 使用分页机制来管理内存. map 看到的这个表也应该是进程使用的内存页面. private 的内存如果 2 个进程的同一个页面内容相同, 可以同时映射到相同的物理地址上, 但是当它们的内容改变时, 操作系统会拷贝到不同的物理内存, 保证每个进程只修改自己进程的内存内容. 对于 shared, 也就是共享内存, 可能都比较熟悉了, 其中一个进程修改了内存的内容, 另一个进程的也会被修改. 是作为进程间通信的一个手段. 尤其是大量数据的时候, 使用共享内存是最高效的.
aozhi 2013-05-09
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
p 表示私有的, private (copy on write) 相对应的是 s 表示的 shared
所谓私有是对于/lib64/libc-2.12.so来说,还是对于strings进程来说的。和GDT和LDT有关系吗?麻烦给讲讲吧。
www_adintr_com 2013-05-09
  • 打赏
  • 举报
回复
p 表示私有的, private (copy on write) 相对应的是 s 表示的 shared
aozhi 2013-05-09
  • 打赏
  • 举报
回复
谢谢回答。结贴给分。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧