我已经阅读了很多关于虚拟地址和分页的内容。让我先告诉大家我的理解。当一个进程想要执行某事时,它会尝试将数据从硬盘加载到内存中。为此,它使用虚拟地址。所以我们的 MMU 验证虚拟地址查找 TLB 以找到相应的物理页面,如果它没有找到它会查找 Inverted Page Table,如果它没有找到那里的条目,最后它会查找页表它会产生页面错误,并且所有页面交换都已完成,并且所有表都将被更新。当我阅读时,所有进程都有不同的页表和相同的虚拟地址。因此,如果我尝试访问定义为 int a[100] 的数组元素 a[1000],我确信会出现分段错误,因为该指令可能正在尝试访问不属于它的内存。但是操作系统如何通过仅使用虚拟地址和物理页面的概念来知道 a[1000] 不属于正在运行的进程。我在这里遗漏了什么还是我的整个理解都是错误的?
我知道如果进程试图访问只读或支持真正的内存段,我们可以说内存访问是非法的。
最后,沸腾的问题是操作系统如何决定将哪些内存分配给哪个进程以及它如何决定这种内存访问是非法的。
这个链接没有太大帮助。
非常感谢你们所有可爱的人的投入:)