6. 进程的地址空间

有了创建进程的 API (CreateProcess; fork-execve),我们的 “操作系统” 就初具雏形,你也能够编写出真正并行执行的程序了。

本讲内容:每个进程都 “拥有” 自己的内存——我们可以用 new/delete 管理它们。但进程的内存是哪里来的?一个指针 p 到底能指向什么?管理地址空间的系统调用: mmap 给我们答案。

6.1 进程的初始状态

6.2 进程的地址空间管理

💬
Prompt: Linux pmap 命令是用什么机制实现的?如果在 Windows 上实现同样的机制,应该怎么做?

6.3 入侵进程的地址空间

💬
Prompt: 在 Linux 下,除了修改 /proc/[pid]/mem,还有其他方式可以修改另一个进程的地址空间吗?假设我有权限。

6.4 总结

Take-away Messages: 操作系统通过虚拟内存为每个进程提供独立的地址空间,实现了进程间的隔离和保护。操作系统通过 mmap/munmap 实现地址空间的管理,并且还提供特定机制 (如 procfs、ptrace、process_vm_writev、共享内存等) 访问彼此的地址空间。

课后习题/编程作业

📚阅读材料

教科书 Operating Systems: Three Easy Pieces

  • 第 12 章 - Dialogue
  • 第 13 章 - Address Spaces
  • 第 14 章 - Memory API