CSCI3150 L09 Address Translation
课程:CSCI3150 Introduction to Operating Systems · 2022未核 本讲:L09 Address Translation,第 2 部分 / 共 2 部分 · 原件 L09-地址空间与地址转换-2022未核.pptx(本地课件) · PDF页码副本(本地课件) p.15–45 定位:在明确bounds语义后判断地址是否合法,再用base完成重定位,并说明OS如何维护映射生命周期。 前后:上一份 Part I
p.15 Part II分节页。
快速转换与受控访问
硬件与OS各做哪一部分(p.16–18)【新】
p.16 Memory Virtualizing with Efficiency and Control
p.16 Memory virtualizing takes a similar strategy known as limited direct execution(LDE) for efficiency and control.
In memory virtualizing, efficiency and control are attained by hardware support.
e.g., registers, TLB(Translation Look-aside Buffer)s, page-table
p.17 Hardware transforms a virtual address to a physical address.
The desired information is actually stored in a physical address.
The OS must get involved at key points to set up the hardware.
The OS must manage memory to judiciously intervene.
p.18 The address space start at address 0.
The OS wants to place the process somewhere else in physical memory, not at address 0.
p.16要同时保留效率和控制,不能让OS用普通软件接管每一次load/store。p.17因此让硬件执行常规转换,OS在创建、切换等关键时刻配置硬件并管理资源。p.18提出重定位:程序以为自己的地址从0开始,OS却希望把它放到物理内存的其他位置。
补充:所谓limited direct execution的共同想法是让普通执行尽量直接进行,同时由硬件边界防止越权;并不是进程可以自行修改转换参数。
base与长度界限(p.19–21)
p.19 (allocated but not in use)
p.21 When a program starts running, the OS decides where in physical memory a process should be loaded.
Set the base register a value.
Every virtual address must not be greater than bound and negative.
p.19把16KB虚拟空间整体放到32–48KB物理区间,中间未用虚拟区也占着该连续物理区域。p.20设置base=32KB、bounds=16KB(长度)。合法单字节偏移满足,转换为。算一遍:v=100得到32868;v=16383得到49151;v=16384越界,不能访问49152。
p.21的PPTX正文层明确给出physical address = virtual address + base以及0≤virtual address<bounds;旧PDF选用了不一致的兼容图片,出现调度公式。这里已回查原件正文层,按正确地址公式解释,兼容层问题见核验说明(本地资料)。
补充:真正访存有宽度,不能只查起始字节。 p.20 的界限计算先按单字节地址解释。若长度界限为16384,想从偏移16382开始读取4字节,起点虽合法,实际覆盖16382、16383、16384、16385,后两字节已经越界。安全条件是起点非负且整个区间都落在界限内;在避免整数溢出的实现思路中,可先确认访问宽度不大于界限,再检查起点不大于“界限减宽度”。这是扩展理解,并非改变原单字节题面的答案。
还要区分“地址算得出来”和“允许访问”。先做合法性检查,再提交真实存储访问;异常路径不能先把别人内存写坏,再通知OS。控制base/bounds的寄存器也必须受保护,否则程序自行扩大bounds就会绕过检查。硬件负责每次快速检查,内核负责允许哪些配置,二者共同构成隔离。
bounds也可以表示物理末端(p.22)
p.22比较长度界限16KB与物理末端48KB。前者检查v小于长度;后者检查转换后的p位于32KB至48KB之前。二者描述同一范围,但不能拿虚拟偏移100直接与物理48KB比较后就宣布安全。
图(p.19–22):一个连续虚拟空间的平移 元素:左边0–16KB虚拟空间,右边32–48KB物理区域;base标物理起点,bounds分别标长度或物理末端。 看什么:先认清bounds单位和基准,再写检查条件。
同一代码的两个装入位置(p.23–25)
图(p.23–25):基址重定位逐步例子 元素:P1物理1–2KB、P2物理4–5KB、当前base箭头和虚拟/物理指令对照。 看什么:p.23把相同代码分别装在P1的1–2KB与P2的4–5KB。p.24运行P1时base=1KB=1024,p.25运行P2时base=4KB=4096。切换进程必须切换base,否则下一进程会把自己的虚拟地址翻译到前一进程区域。
P1访问100与切换后的同一地址(p.26–28)
图(p.26–28):基址重定位逐步例子 元素:P1物理1–2KB、P2物理4–5KB、当前base箭头和虚拟/物理指令对照。 看什么:p.26先给P1的load 100。p.27算1024+100=1124,落在P1区域。p.28加入P2的同一load 100,提示不能沿用1124;必须先认当前进程的base。
P2访问100与1000(p.29–31)
图(p.29–31):基址重定位逐步例子 元素:P1物理1–2KB、P2物理4–5KB、当前base箭头和虚拟/物理指令对照。 看什么:p.29用P2 base4096算4096+100=4196;p.30给P2的load 1000;p.31算4096+1000=5096。1000仍小于本例区域长度1024,因此落在P2区域内。
把1000带回P1(p.32–33)
图(p.32–33):基址重定位逐步例子 元素:P1物理1–2KB、P2物理4–5KB、当前base箭头和虚拟/物理指令对照。 看什么:p.32改为P1访问1000;p.33用1024+1000=2024。它与P2访问同一虚拟偏移所得5096不同,验证虚拟地址的含义依赖当前地址空间。
只加base为什么不能保护别人(p.34–35)
题面(L09-地址空间与地址转换-2022未核.pdf · Base Register保护问题 · p.34–35)
p.34 Can P2 hurt P1? Can P1 hurt P2?
p.34 How to protect process with base register?
p.35 P1: store 3072, R1
算一遍:P1的base1024加偏移3072得到4096,恰为P2起点。没有界限检查时,加法能产生一个物理地址,并不证明P1有权写它。所以P1可以破坏P2。关于P2向低地址写P1,本图没有给负地址及算术溢出处理规则;在非负无溢出的简单模型下base4096加非负偏移不能到1024,但这不构成完整隔离,因为P2仍可向更高区域越界。需要统一边界检查,不能只说“放在高处就安全”。
在访存前拒绝越界(p.36–38)
p.36/P1和p.37/P2各配一组base与长度bounds=1024。p.38再次提出P1的store3072。先比较3072与1024,已经不合法,就不能执行物理写入;不能先写4096再报告出错。
图(p.36–38):每个进程的一组保护参数 元素:P1的base在1KB,P2的base在4KB,各自有长度箭头;虚拟访问仍来自同一程序接口。 看什么:base确定放置位置,bounds限制能走多远,两者各承担一种职责。
异常与结束后的管理责任(p.39–41)
p.41 The OS must take action to implement base-and-bounds approach.
Three critical junctures:
When a process starts running:
Finding space for address space in physical memory
When a process is terminated:
Reclaiming the memory for use
When context switch occurs:
Saving and storing the base-and-bounds pair
p.39给出Exception,因为3072>1024。p.40在P1区域标出终止图标,而P2保留;其含义是违规访问被隔离处理。边界本身同样严格:即使偏移恰好1024也越界,因为合法单字节下标为0–1023。
p.41说明OS仍有三项工作:启动时找空间,结束时回收,切换时保存恢复base/bounds。硬件负责快路径不等于OS从此不用管理内存。
空闲表与上下文切换(p.42–44)
p.42 The OS must find a room for a new address space.
free list : A list of the range of the physical memory which are not in use.
p.43 The OS must put the memory back on the free list.
p.44 The OS must save and restore the base-and-bounds pair.
In process structure or process control block(PCB)
p.42用free list记录空闲物理区间,OS选出能容纳整个地址空间的连续区。p.43进程A结束后,把原先32–48KB区域放回空闲表;释放虚拟对象与回收整个进程物理区域是不同层级的动作。
p.44采用“物理末端”形式bounds:A为base32KB、bounds48KB,B为base48KB、bounds64KB。切出A时把这一对保存到PCB,切入B恢复另一对;不能误把A的bounds48KB当长度而准许访问到80KB。
算一遍:两进程长度分别48−32=16KB和64−48=16KB。A的虚拟偏移4KB映射36KB,B的同偏移映射52KB;长度相同不代表物理位置相同。
补充:切换时必须把“谁的执行状态”和“谁的地址解释”配成一套。 假设恢复了 P2 的 PC,却仍用 P1 的 base/bounds,那么 P2 即使发出本来合法的虚拟地址,也会访问按 P1 配置计算的位置。错误不是加法不会算,而是选错了用于加法的上下文。反过来,换了地址配置却继续使用旧进程的寄存器和栈位置,也会把执行送进错误状态。
因此上下文切换不能理解成只更换屏幕上显示的 PID。需要保存与恢复足够的执行寄存器,并切到匹配的内存保护配置;普通程序不能随意自行写这些受保护配置。硬件做每次快速检查,OS 在合法切换点决定当前是哪套配置。把 p.26–38 中相同的 100、1000 放回各自进程来算,正是在训练这种“地址数值加所属空间”的判断。
本讲留下的空间浪费(p.45)
p.45 Address Space – an abstraction of physical memory created by OS
The address space contains all about a running process.
That is consist of program code, data, heap, and stack
Address Translation – Hardware-based Address Translation
The hardware transforms each memory access (e.g., an instruction fetch, load, or store), changing the virtual address provided by the instruction to a physical address where the desired information is actually located .
OS performs memory management – keeping track of which locations are free and which are in use, and judiciously intervening to maintain control over how memory is used.
The Base and Bounds Approach
When a program starts running, the OS decides where in physical memory a process should be loaded
The hardware checks whether virtual addresses are in bounds.
Next: Memory Management (Chapters 16, 17, 18, 19, 20, 21, 22, 23)
p.45总结硬件转换与OS管理,强调所有取指、load、store都要使用正确转换。连续base/bounds方案易于理解,却为堆栈之间未用空间也保留物理区域;下一讲的分段会尝试分别放置不同逻辑区,分页再用固定尺寸块管理。
考试角度:(C 级 通识)常见考法是给base与bounds,先判断合法再求物理地址;必须说明bounds是长度还是物理结束边界。
自测:A、B 的虚拟地址都是100,切换后仍用A的base会发生什么?
先按本讲例子算:A base1024时地址为1124;B正确base4096时应为4196。若切换漏了base,B的代码会访问1124,错误地落到A区域。
因此上下文不只包括PC与通用寄存器,也包括决定地址解释方式的转换状态。单独让调度器切换“下一条指令”而不切换地址空间,无法保证进程隔离。
本讲核心考点
- 硬件执行转换,OS配置与管理转换状态(p.16–18,C 级通识考法)。
- base加偏移,访问前必须做界限检查(p.19–40,C 级通识考法)。
- bounds可表示长度或物理末端,公式不能混用(p.22、44,C 级通识考法)。
- 进程切换须保存恢复映射寄存器(p.41–44,C 级通识考法)。
附录
本份没有需要移至附录的长推导;计算过程已在对应页正文写全。
来源与证据
-
原件:L09-地址空间与地址转换-2022未核.pptx(本地课件);PDF副本(本地课件) p.15–45。本文页码均为 PDF 页号。
-
考试证据:读了 课程大纲-2026T1.pdf、教学计划-2026T1.pdf、T08-期中参考-2025T2-题目-解答.pdf、T07-多级反馈队列-2025T2.pdf(p.13–15内嵌历史试题);未识别用途的 PDF:无
-
2026-10-13 内容补全:保留原页顺序与版本,补入对应页的程序、接口、字段、条件和演算;原程序片段保留课件行号、拼写与省略处,不能据此视为经过编译的完整软件。本文已有运行记录属于其标注日期,本次未重新运行课程容器或提交作业。