Skip to content

2023年 408 操作系统 第 28 题

操作系统2023年选择题2分

题目

对于采用虚拟内存管理方式的系统,下列关于进程虚拟地址空间的叙述中,错误的是( )。

错因

A

以为进程之间共享一个全局虚拟地址空间。但现代 OS 给每个进程单独建一套页表——同一个虚地址 0x400000 在不同进程里指向各自的物理页,互不可见,这正是"进程隔离"的基础。除非显式用 mmap 做共享映射,否则地址空间天然独立。

B

觉得 malloc 是"分配真实内存"应该返回物理地址。但用户态进程从头到尾都看不到物理地址——malloc 返回的是进程虚地址空间里的一段地址,访问时才由 MMU 翻译成物理地址,物理映射全在底下、用户无感。

C

以为整个进程的内存是同一种权限。实际页表项里就有 R/W/X 标志位(x86 的页表项含 R/W、NX 等),代码段一般 R+X、数据段 RW、栈不可执行(DEP / NX)——这是 OS 阻止"溢出攻击注入代码"的基础机制。

总解析

D 错的关键是搞错了"虚拟地址大小"这个量是由谁决定的。

虚拟地址的大小由 CPU 的地址位数决定

  • 32 位 CPU:虚地址空间 = = 4 GB
  • 64 位 CPU(典型实现 48 位有效):虚地址空间 = = 256 TB

主存大小、硬盘大小只决定"实际能落到物理上的容量",跟虚地址大小没有任何关系:

配置虚地址空间物理内存
32 位 CPU + 1 GB 主存4 GB1 GB(剩余通过 swap / 缺页处理)
32 位 CPU + 1 TB 主存4 GB1 TB(单进程仍只能用 4 GB,多余给别的进程用)
64 位 CPU + 16 GB 主存256 TB16 GB

虚地址是先确定的"门牌号体系",物理内存只是"能挂多少户人家"。所以"虚地址大小由主存和硬盘决定"完全把因果倒过来了。

逐项核对:

选项真假关键
A 进程独立的虚地址空间每进程一套页表
B malloc 返回虚地址用户态全程虚地址
C 段权限可不同页表项里有 R/W/X 位
D 虚地址大小由主存硬盘决定由 CPU 地址位数决定

最终答案是 D

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题