多个进程的Linux内核逻辑地址

标签 linux memory-management linux-kernel embedded-linux

据我理解,“每个进程的地址空间分为用户空间/内核空间3G/1G,1G(少一点)与物理地址一一映射,称为内核逻辑地址”。 现在,我的问题是,系统上运行着多个进程,所有进程如何与物理地址进行一对一映射? 例如,当内核正在访问进程 A 上下文中的内核逻辑地址时,现在发生了抢占,当内核访问进程 B 上下文中的逻辑地址时会发生什么情况?

类似地,只有 512MB RAM 的 PC 会怎样?那些 PC 的 1G 内核空间的一对一映射是如何发生的?

最佳答案

首先考虑总虚拟地址空间的内核部分(比如说 1GB)并没有全部被使用可能会有所帮助。并且总物理内存并未全部映射到内核空间。

内核空间将具有它使用的物理 RAM 的虚拟内存映射,以及定义的任何内存映射外设。那些没有分页。

用户空间中的每个进程都可以为其代码+数据拥有多达 3 GB 的虚拟内存。对于物理内存,有两个极端,逐个查看可能会有所启发。

大物理内存:如果处理器支持大物理寻址,例如36 位,可能有 64 GB 的物理内存。您可以有多个进程,每个进程有 3 GB 代码+数据,它们甚至不必将页面换出到辅助存储。每个上下文切换都会设置 MMU 以将新执行进程的物理内存映射回用户空间。

小物理内存:假设有 512 MB,内核使用其中的 128 MB。剩余的 384 MB 将保存用户进程的代码+数据。如果用户进程需要的不止于此,页面将根据需要在辅助存储和 RAM 之间交换。

关于多个进程的Linux内核逻辑地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12995957/

相关文章:

c++ - 使用预先已知的模式进行内存分配

perl - 我怎样才能从 perl 中回收内存?

gcc - 在 GCC 中实现分支重新排序

Android 4.0内核源代码?

用于检查 DNS 是否具有与同一列表中旁边的相同 IP 的 Linux 脚本

c - 当变量超出范围时会发生什么?

linux - 验证 bash 中的一些参数

linux - 如何获取UBUNTU IOS?

linux - Bash 从 XML 中读取和解析

linux - 在 R 中停止 nohup 并行模拟