1. 为什么D(虚拟内存需要硬件支持)是对的?
例子:
虚拟内存的作用:
系统会把暂时不用的数据(比如后台标签页)存到硬盘的页面文件(pagefile.sys),等需要时再加载回内存。
硬件支持:
MMU(内存管理单元):负责把程序用的“虚拟地址”(比如
0x00400000
)转换成真实的物理内存地址。TLB(快表):缓存常用地址映射,加速转换(类似CPU缓存)。
缺页中断:如果程序访问的数据在硬盘上,CPU会触发中断,让操作系统把数据从硬盘读回内存。
如果没有这些硬件:
程序会直接崩溃,因为系统无法动态管理内存和硬盘的交换。
2. 其他选项为什么错?
A. 存储保护是限制内存分配? ❌
计算机例子:
你的浏览器和游戏各自有独立的内存空间,浏览器不能直接读写游戏的内存(否则黑客就能随意篡改游戏数据)。
存储保护是通过CPU的权限位和操作系统的页表实现的,目的是隔离进程,而不是限制分配。
B. 内存均分给N个用户? ❌
计算机例子:
在Windows/Linux中,多个程序运行时,内存分配是动态的。比如:
开一个虚拟机可能占4GB,而记事本只占20MB。
系统不会固定给每个程序
总内存/N
,而是按需分配。C. 磁盘无限=虚拟内存无限? ❌
总结(计算机视角)
选项 对/错 计算机例子 A ❌ 存储保护是防越界(如浏览器不能篡改游戏内存),不是限制分配 B ❌ 内存是动态分配的(虚拟机占4GB,记事本占20MB),不是均分 C ❌ 32位系统虚拟内存最大4GB,和硬盘大小无关 D ✅ 虚拟内存没硬件支持就无法工作 关键结论:
虚拟内存是“用硬盘扩展内存”的技术,但必须靠CPU和MMU硬件支持。
A,B,C都能通过由存储管理系统通过一定的算法实现。
D项的话只能通过硬件去提高
1. 为什么B是错误的?
内存保护必须依赖硬件支持:
操作系统的权限管理(如页表、段表)需要CPU硬件机制(如MMU、特权模式)来强制执行。
例子:
如果没有硬件支持,恶意程序可以绕过操作系统,直接读写其他进程的内存(就像没有门禁的小区,谁都能随便进)。
关键硬件:
MMU(内存管理单元):负责虚拟地址到物理地址的转换,并检查访问权限。
CPU特权级:区分内核态和用户态,防止用户程序直接操作关键内存。
2. 其他选项为什么正确?
选项 内存保护的正确描述 例子 A 进程不能越权访问其他进程内存 Chrome无法读取微信的聊天数据 C 保护方法包括界地址、上下限地址 类似给每个进程分配“围栏” D 进程不能跳转到其他进程的代码 游戏程序不能突然执行浏览器的代码
总结
内存保护的本质:是软硬件协作的结果,缺一不可。
1. 硬件是“警察”,操作系统是“法律”
硬件(CPU/MMU)的作用:
实时监控:像警察一样,硬件会检查每次内存访问是否越界。例如:
CPU通过页表项的权限位(读/写/执行)判断进程是否违规。
MMU在地址转换时,若发现进程访问未分配的内存,立即触发段错误(Segmentation Fault)。
强制执行:硬件直接拦截非法操作,无需软件干预(比如游戏程序试图篡改浏览器内存时,CPU会直接终止它)。
操作系统的作用:
制定规则:像立法机构一样,操作系统为每个进程分配内存空间,并在页表中标注权限。
例如:Chrome进程的页表会标记其内存范围为
0x0000~0x3FFF
,其他进程不可访问。处理异常:当硬件触发缺页异常或越界错误时,操作系统决定如何响应(如终止进程或调页)。
反例:
若只有硬件(无操作系统):CPU不知道哪些内存该保护,就像警察没有法律依据,无法判断谁该被抓。
若只有操作系统(无硬件):恶意程序可绕过软件规则,直接物理寻址攻击内存(如同罪犯绕过法律,暴力破门)。
2. 实际计算机中的协作流程
以进程访问内存为例:
操作系统为进程A分配内存,并在页表中标记其可访问范围(如
0x1000~0x2000
)。CPU执行进程A的指令
MOV [0x1500], 42
(向地址0x1500
写入数据)。MMU查询页表:
若
0x1500
在进程A的合法范围内 → 允许写入。若
0x1500
属于其他进程(如进程B)→ 触发保护异常,CPU强制终止进程A。操作系统收到异常后,可能记录错误日志或杀死进程A。
3. 为什么不能独立完成?
角色 单独工作的缺陷 实例 仅硬件 缺乏内存分配规则 CPU不知道 0x1000
该给哪个进程,可能多个进程互相覆盖数据仅操作系统 无法实时拦截非法访问 恶意程序可通过汇编指令 MOV [任意地址], 数据
直接破坏其他进程
4. 现实类比
银行金库系统:
硬件=保险门+指纹锁(实时拦截非法进入)
操作系统=银行经理(决定谁可以进哪个保险柜)
缺一不可:没有经理,保险门不知道谁该进;没有保险门,经理的规则形同虚设。
总结
内存保护的本质是:
操作系统定义规则(软件) + 硬件执行规则(物理拦截) = 安全的进程隔离
1. 为什么是C?
需要硬件地址变换机构的存储管理方式:
III. 页式存储管理:
依赖MMU(内存管理单元)将虚拟页号→物理页框号。
硬件支持:页表寄存器(PTBR)、TLB(快表)、缺页中断机制。
IV. 动态分区分配:
虽然主要靠操作系统分配内存,但地址重定位(逻辑→物理)需要基址寄存器(硬件)支持。
V. 段式存储管理:
需要段表寄存器和段地址转换硬件,类似页式但以段为单位。
2. 其他选项分析
存储管理方式 是否需要硬件地址变换 原因 I. 单一连续分配 ❌ 不需要 整个内存只运行一个程序,逻辑地址=物理地址(无转换需求) II. 固定分区分配 ❌ 不需要 分区固定,通过软件查表即可转换地址 错误选项:
A(I、III、V):错误包含I(单一连续分配不需要硬件)。
B(II、III、IV):错误包含II(固定分区分配不需要硬件)。
D(II、III、IV、V):错误包含II。
关键区别
需要硬件的场景:地址映射复杂(如页式、段式)、动态重定位(如动态分区)。
纯软件管理的场景:内存分配简单固定(如单一/固定分区)。
例子:
页式系统像“快递分拣中心”,必须靠硬件(MMU)快速查页表;
单一连续分配像“独栋别墅”,无需分拣,直接住进去。
固定分区分配,核心是:预先固定
已知逻辑地址(2,154)=> 段号:2 段内偏移:154
1. 为什么B是错误的?
动态重定位的核心机制:
重定位寄存器(基址寄存器)是CPU硬件的一部分,通常只有一个,由操作系统动态分配给当前运行的进程使用
工作流程:
进程被调入内存时,操作系统为其分配基址(起始物理地址),并加载到重定位寄存器。
CPU执行进程指令时,通过
物理地址 = 逻辑地址 + 重定位寄存器值
完成地址转换。进程切换时,操作系统更新重定位寄存器的值为新进程的基址。
B选项的错误:
如果每个进程独占一个重定位寄存器,会极大增加硬件成本(不现实)。
实际系统中,重定位寄存器是共享资源,由操作系统调度管理。
2. 其他选项为什么正确?
选项 动态重定位的正确描述 实例 A 程序装入后可能移动 内存紧缩时,进程物理位置会变 C 地址转换公式 逻辑地址 + 基址 = 物理地址 D 映射在执行时发生 进程运行时才需地址转换(与静态重定位区别)
1. 为什么是C?
动态重定位的核心依赖:
I. 可重定位装入程序:
负责将目标程序(IV)动态加载到内存任意位置,并记录其基址(起始物理地址)。
作用:确保程序无需静态绑定到固定内存地址。
II. 重定位寄存器(基址寄存器):
存储当前运行进程的基址,CPU通过
物理地址 = 逻辑地址 + 重定位寄存器值
完成地址转换。III. 地址变换机构(如MMU):
硬件单元,实时执行逻辑地址到物理地址的转换。
紧凑/拼凑:动态分区时,由于进程的换入、换出,会产生很多小的外部碎片,把进程紧凑 一 下,使外部碎片消失(每个进程直接没有外部碎片)
拼接: 回收进程时,如果该进程上下有空闲分区,则需要合并空闲分区,并修改空闲 分区表
产生内部碎片:固定分区 (程序不可能每次都能恰好用完分区)
产生外部碎片:不固定分区 (进程换入,换出时会产生外部碎片)
动态分区算法:
1. 消除外部碎片
连续分配的问题:
动态分区分配会产生大量外部碎片(即内存中分散的小块空闲区,无法被利用)。
例如:内存中有3个空闲块(10KB、5KB、20KB),但一个15KB的进程无法分配,因为空闲块不连续。
分页的解决方案:
将物理内存划分为固定大小的页框(如4KB),进程的地址空间划分为相同大小的页。
页框可以非连续分配,所有空闲页框均可被利用,无外部碎片。
2. 允许部分加载(按需调页)
连续分配的局限:
进程必须整体装入连续内存,即使某些代码/数据暂时不用(浪费内存)。
分页的优势:
按需调页:只需将进程当前需要的页面装入内存,其余留在磁盘。
例如:一个100MB的游戏程序,实际运行时可能只需加载20MB的常用代码和数据。
3. 高效利用小内存块
连续分配的浪费:
若剩余空闲块为9KB,而进程需要10KB,则9KB会被闲置。
分页的灵活分配:
进程的最后一页允许内部碎片(不足一页的部分),但内部碎片最大不超过一页大小(如4KB),远小于连续分配的外部碎片