Appearance
题目
分区分配内存管理方式的主要保护措施是( )。
错因
B
"程序代码保护"是个宽泛的说法,分区分配的具体机制不在于"保护代码"——它的核心保护是地址边界:让进程访问不到自己分区之外的内存。代码 / 数据 / 栈都在分区里,由界地址统一保护。
C
数据保护和代码保护类似——分区分配方式不区分"代码"和"数据"做不同保护,只在分区边界上拦截非法访问。"数据保护"作为分区分配的"主要保护措施"颗粒度太细,没切中分区分配的机制。
D
栈保护更具体——栈内的越界检查通常由编译器或语言运行时(栈溢出检测)做,不是分区分配的硬件机制。分区分配关注的是进程间的地址隔离,栈的内部保护是另一回事。
总解析
分区分配的内存保护机制:每个进程被分配一段连续的内存区域(一个分区),OS / 硬件在 PCB 里保存这段区域的边界(基址 + 限长 / 上下界),每次访存时硬件比对。
界地址保护的机制:
访问地址 a
↓
检查:基址 ≤ a < 基址 + 限长(或 上界 ≥ a ≥ 下界)
合法 → 允许访问
非法 → 触发越界异常 → 进程被终止或调内核处理| 选项 | 描述 | 判定 |
|---|---|---|
| A | 界地址保护(基址 + 限长 / 上下界寄存器) | ✓ —— 分区分配的标志性保护机制 |
| B | 程序代码保护 | ✗ 太宽泛,分区分配不区分代码 / 数据 |
| C | 数据保护 | ✗ 同 B |
| D | 栈保护 | ✗ 太细,且栈保护通常由语言层做 |
两种界地址实现:
| 实现 | 寄存器 | 检查 |
|---|---|---|
| 基址 + 限长 | 基址寄存器(分区起址)+ 限长寄存器(分区长度) | 检查 0 ≤ 偏移 < 限长;物理地址 = 基址 + 偏移 |
| 上下界 | 上界寄存器 + 下界寄存器 | 检查 下界 ≤ 物理地址 ≤ 上界 |
分区分配的核心思想是"每个进程一个连续盒子",保护就是不让进程钻出自己的盒子——这正是界地址做的事。其他保护(代码段只读、栈不可执行等)属于更高级的内存保护,分区分配方式本身只做到这一步。
最终答案是 A。