linux - 用户地址内存是如何组织的?

标签 linux process x86 kernel

我总是读到,在任何给定时间,处理器一次只能运行一个进程。因此只有一个进程处于 running 状态。 但是,我们可以有许多可运行的进程。这些都是等待调度程序安排其执行的所有这些进程。

在任何给定时间,所有这些可运行进程是否都存在于用户地址空间中?或者在用户地址空间中有当前正在运行的进程,并且只有在它们被调度后才会从磁盘返回到 RAM。在这种情况下,这是否意味着内核将进程任务描述符保留在其所有可运行进程的列表中,即使它们在磁盘中也是如此?我想你可以看出我很困惑。

最佳答案

如果 CPU 支持虚拟内存寻址,则每个进程都有唯一的内存 View 。尝试从同一内存地址读取的两个不同进程将映射到物理内存中的不同位置,除非内存映射另有说明(共享内存,例如 DLL 文件被映射为只读)

如果CPU不支持虚拟内存,只支持内存保护,其他进程的内存就会被保护掉,这样运行的进程就只能访问自己的内存。

关于linux - 用户地址内存是如何组织的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36982499/

相关文章:

android - 从 Thread.UncaughtExceptionHandler 启动服务?

c - 移入 2 个 32 位寄存器

x86 - LLVM/clang 是否有控制代码填充的标志?

linux - Make 正在运行旧的/损坏的命令

找不到 libcrypto 库错误

java - 如何使用java代码编译其他文件夹中的java文件?

loops - x86 LOOP指令到底如何工作?

linux - gnuplot 加载在 bash 脚本中不起作用

linux - 在linux的子目录中搜索以.txt结尾的文件

c# - 启动进程并允许调用者结束而不等待进程完成