首页 > 解决方案 > 操作系统如何阻止程序访问内存?

问题描述

我目前的理解是,

CPU / OS如何实现这一点?这是纯粹在软件级别上实现的吗?还是它也需要硬件实现?

标签: assemblyoperating-systemcpu-architecturevirtual-memorymmu

解决方案


它不仅仅是软件层面的。对于英特尔架构的几句话:

每个进程的地址空间是隔离的;每个进程都有相同的虚拟地址空间(让我们简化一下:0x00000000 到 0xffffffff),映射到不同的物理位置。

地址空间代表内存页面的集合。页面仅在需要时进行物理映射。将长时间未访问的页面(有特殊算法)从物理内存中删除;如果它们包含动态修改的内容,它们将存储在硬盘驱动器上的“交换”文件中。

每个页面都属于特定的进程(除了一些系统页面),分配了虚拟地址和访问标志:读/写/执行。看似连续的数组,可以分配在几个不连续的页面上,其中一些甚至可以换出到硬盘驱动器。

程序(进程)只能看到自己的地址空间。有几种方法可以到达其他进程的空间,但常规程序很少这样做。

地址空间不可完全访问:如果程序试图访问未分配的地址,或写入写保护页,将触发内存违规。

通常,程序只能在自己的地址空间中分配、取消分配或更改页面的访问标志。有多种类型的内存(用于加载可执行映像、用于堆栈以及用于几种不同风格的可分配内存)。

对不起,我不记得书名了,很久以前读过的。


推荐阅读