因此,如果 n 个进程共享一个大小为 M 的库 L,那么对它们的 PSS 的贡献是 M/n。
现在想象其中一个进程终止。所以贡献是 M/(n-1)。
问题 1:我的问题是这种变化多久会反映在仍在运行和使用共享库的进程的 PSS 值中?
Q2:作为一个简单的例子,假设只有两个进程在使用大小为 100K 的共享库 L。PSS 对每个进程的贡献是 50K。现在当 P2 死亡时,它是唯一使用 L 的进程。所以它的 PSS 应该增加并变成 100K。这会在多长时间内发生,在 P2 死后,还是在一段时间后?经过多少时间?
我找到了一些关于什么是“地址绑定”的解释。他们说“地址绑定是将虚拟或逻辑地址映射到物理地址的操作”。
这个定义正确吗?
我无法确定它是否正确,因为大学的演示文稿说将虚拟地址转换为物理地址是在执行时执行的。但是,地址绑定表示绑定操作可以在编译时、加载时或执行时实现。
这说明存在矛盾。
从 Linux 编程接口:
上图中的内核堆栈(在下面的引用中提到)在哪里?
它是上图中的顶部“内核(映射到进程虚拟内存,但没有访问程序)”吗?
术语 用户堆栈 用于区分我们在此描述的堆栈与内核堆栈。内核堆栈是在内核内存中维护的每个进程的内存区域,用作执行系统调用期间内部调用的函数的堆栈。(内核不能为此目的使用用户堆栈,因为它驻留在未受保护的用户内存中。)
上图中的“C 运行时启动函数的框架”和“main() 的框架”(从下图中提到)在哪里?
上图中的“argv、environ”是“C 运行时启动函数的框架”、“main() 的框架”还是其中之一?
0x00000000 和 0x08048000 之间的最低段用于什么?
谢谢。
$ cat /proc/mounts | egrep ' /tmp '
tmpfs /tmp tmpfs rw,nosuid,nodev,relatime 0 0
$ dd if=/dev/zero bs=1M count=3000 of=/tmp/q
3000+0 records in
3000+0 records out
3145728000 bytes (3.1 GB) copied, 1.04961 s, 3.0 GB/s
$ time rm /tmp/q
real 0m0.296s
user 0m0.000s
sys 0m0.290s
Run Code Online (Sandbox Code Playgroud)
为什么不0.000s呢?不涉及磁盘,只是标记不再使用内存。
从联机帮助页 top
nMaj -- Major Page Fault Count
The number of major page faults that have occurred for a task. A
page fault occurs when a process attempts to read from or write
to a virtual page that is not currently present in its address
space. **A major page fault is when auxiliary storage access is
involved in making that page available.**
nMin -- Minor Page Fault count
The number of minor page faults that have occurred for a task. …Run Code Online (Sandbox Code Playgroud) 我遇到了这个问题:
并基于答案和对答案的评论:
内核内存映射包括所有物理内存的直接映射,因此内存中的所有内容都出现在那里;它还包括内核、模块等的单独映射,因此包含内核的物理地址至少出现在两个不同的映射中
这是真的?我找不到任何来源或参考资料,为什么它会包含整个物理内存的映射,然后又具有内核模块的单独映射?那不是多余的吗?
有人可以简单地解释一下 64 位 Linux 进程的虚拟内存的内核部分是什么吗?并请提供答案的来源!因为我在任何书籍或论文中都找不到与此相关的任何内容。
我正在研究 Linux 中内存区域的虚拟内存映射。可执行文件是一个简单的计数程序。当程序的两个实例运行时,以下是 所示的映射/proc/pid/maps。堆、堆栈、vvar、vdso 等的位置在加载时似乎有随机偏移。为什么要这样做?
实例 1:堆开始于013f4000
00400000-00401000 r--p 00000000 08:16 3557412 <program-exe>
00401000-00480000 r-xp 00001000 08:16 3557412 <program-exe>
00480000-004a5000 r--p 00080000 08:16 3557412 <program-exe>
004a6000-004ac000 rw-p 000a5000 08:16 3557412 <program-exe>
004ac000-004ad000 rw-p 00000000 00:00 0
013f4000-01417000 rw-p 00000000 00:00 0 [heap]
7ffd98bd8000-7ffd98bf9000 rw-p 00000000 00:00 0 [stack]
7ffd98bfc000-7ffd98bff000 r--p 00000000 00:00 0 [vvar]
7ffd98bff000-7ffd98c00000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall]
Run Code Online (Sandbox Code Playgroud)
实例2:堆开始于013cc000
00400000-00401000 r--p 00000000 08:16 3557412 <program-exe>
00401000-00480000 r-xp 00001000 …Run Code Online (Sandbox Code Playgroud) Linux中用户和内核虚拟内存的大小是根据什么决定的?(32 位,如果相关的话。)它可以配置吗?
如果我们有 512 MB RAM,用户和内核虚拟地址的大小是多少?
我最近读到的一句话说:“大部分页表未使用,充满了无效条目。这是一个很小的 16KB 地址空间。想象一下 32 位地址空间的页表和所有潜在的浪费空间! ”
这表明 32 位地址空间大于 16KB 地址空间,这是令人困惑的,因为 32 位明显小于 16KB