Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我可以使用一个进程中的PTE来指示物理内存片段,以便在另一个进程中创建适当的PTE吗?_C_Linux_Memory Management_Linux Kernel_Posix - Fatal编程技术网

C 我可以使用一个进程中的PTE来指示物理内存片段,以便在另一个进程中创建适当的PTE吗?

C 我可以使用一个进程中的PTE来指示物理内存片段,以便在另一个进程中创建适当的PTE吗?,c,linux,memory-management,linux-kernel,posix,C,Linux,Memory Management,Linux Kernel,Posix,当我们在Linux中使用函数mmap(,,MAP_ANON | MAP_SHARED),则对于相同的物理碎片内存区域(已分配),进程之间正在分配虚拟内存页(PTE)。也就是说,这些PTE从一个进程的页表复制到另一个进程的页表(与分配内存的物理地址片段序列相同),这是真的吗 但是mmap()需要在fork()之前完成。如果我们已经有两个工作进程(即fork()),那么我们需要为mmap()使用文件。哪些函数用于在两个已建立的进程之间复制PTE机制,以创建共享内存 我可以使用PTE/SGL(分散-聚

当我们在Linux中使用函数
mmap(,,MAP_ANON | MAP_SHARED),则对于相同的物理碎片内存区域(已分配),进程之间正在分配虚拟内存页(PTE)。也就是说,这些PTE从一个进程的页表复制到另一个进程的页表(与分配内存的物理地址片段序列相同),这是真的吗

但是
mmap()
需要在
fork()
之前完成。如果我们已经有两个工作进程(即
fork()
),那么我们需要为
mmap()
使用文件。哪些函数用于在两个已建立的进程之间复制PTE机制,以创建共享内存

我可以使用PTE/SGL(分散-聚集列表)来指示物理内存片段,这些物理内存片段已分配给使用linux内核在其他进程中创建适当的PTE,以及如何做到这一点吗

我想了解它在较低级别上是如何工作的

当我们在Linux中使用函数
mmap(,,MAP_ANON | MAP_SHARED),然后
对于相同的物理碎片内存区域(已分配)
进程之间分配虚拟内存页(PTE)

请重述问题/陈述,上述内容毫无意义

Ie这些PTE从一个进程的页面表复制到页面 另一个进程的表(具有相同的 物理地址分配内存),这是真的吗

不,这不是真的

当您建立一个新的映射时,内核首先会 对于进程的虚拟地址空间中足够大的未使用地址范围。然后,它修改相应的页表条目,以指示该地址范围有效,但不存在物理页

当您尝试访问该范围内的地址时,会生成页面错误。内核查看其数据结构并确定访问是否有效。然后它分配一个 刷新物理页面,修改页面条目以建立 虚拟地址和物理地址,并将页面标记为存在。从 页面错误异常时,将重新启动有问题的指令,并且这次将成功执行

但是mmap()需要在fork()之前完成。如果我们已经有了 两个工作进程(即fork()之后),然后我们需要使用一个文件 mmap()。哪些函数用于复制PTE之间的机制 创建共享内存的两个已建立的进程

如果在
fork
之后执行
mmap
,这两个进程将创建并初始化 页表条目彼此完全独立。但是,当您
mmap
a文件时, 内核不会简单地分配一个免费的物理页面-它会分配一个页面, 用文件中的数据填充它,并将页面放入页面/缓冲区缓存。当一秒钟 进程mmaps相同的文件,内核在页面缓存中查找,在那里找到物理缓存 页,该页对应于同一文件和所需的文件偏移量,并指向PTE 转到那一页。现在,将有两个完全独立创建的PTE,它们只指向同一物理页面

我可以使用PTE/SGL(分散-聚集列表)来指示碎片吗 已分配用于创建适当内存的物理内存 PTEs在其他进程中使用linux内核,以及如何做到这一点

再说一遍,你问的不清楚

我想了解mmap()如何在较低级别上工作

我推荐一本操作系统书,一章关于虚拟内存管理, 差不多

当我们在Linux中使用函数
mmap(,,MAP_ANON | MAP_SHARED),然后
对于相同的物理碎片内存区域(已分配)
进程之间分配虚拟内存页(PTE)

请重述问题/陈述,上述内容毫无意义

Ie这些PTE从一个进程的页面表复制到页面 另一个进程的表(具有相同的 物理地址分配内存),这是真的吗

不,这不是真的

当您建立一个新的映射时,内核首先会 对于进程的虚拟地址空间中足够大的未使用地址范围。然后,它修改相应的页表条目,以指示该地址范围有效,但不存在物理页

当您尝试访问该范围内的地址时,会生成页面错误。内核查看其数据结构并确定访问是否有效。然后它分配一个 刷新物理页面,修改页面条目以建立 虚拟地址和物理地址,并将页面标记为存在。从 页面错误异常时,将重新启动有问题的指令,并且这次将成功执行

但是mmap()需要在fork()之前完成。如果我们已经有了 两个工作进程(即fork()之后),然后我们需要使用一个文件 mmap()。哪些函数用于复制PTE之间的机制 创建共享内存的两个已建立的进程

如果在
fork
之后执行
mmap
,这两个进程将创建并初始化 页表条目彼此完全独立。但是,当您
mmap
a文件时, 内核不会简单地分配一个免费的物理页面-它会分配一个页面, 用文件中的数据填充它,并将页面放入页面/缓冲区缓存。当一秒钟 进程mmaps相同的文件,内核在页面缓存中查找,在那里找到物理缓存 页,该页对应于同一文件和所需的文件偏移量,并指向PTE 转到那一页。现在,第