第 45 题
假定题 44 给出的计算机 M 采用二级分页虚拟存储管理方式,虚拟地址格式如下:
| 页目录号(10 位) | 页表索引(10 位) | 页内偏移量(12 位) |
|---|
请针对题 43 的函数 f1 和题 44 中的机器指令代码,回答下列问题。
(1) 函数 f1 的机器指令代码占多少页?
(2) 取第 1 条指令(push ebp)时,若在进行地址变换的过程中需要访问内存中的页目录和页表,则会分别访问它们各自的第几个表项(编号从 0 开始)?
(3) M 的 I/O 采用中断控制方式。若进程 P 在调用 f1 之前通过 scanf() 获取 n 的值,则在执行 scanf() 的过程中,进程 P 的状态会如何变化?CPU 是否会进入内核态?
[tag_link]
1)函数 1 的代码段中所有指令的虚拟地址的高 20 位相同,因此 1 的机器指令代码在同一页中,仅占用 1 页。(1 分)页目录号用于寻找页目录的表项,该表项包含页表的位置。页表索引用于寻找页表的表项,该表项包含页的位置。
2)push ebp 指令的虚拟地址的最高 10 位(页目录号)为 0000000001,中间 10 位(页表索引)为 0000000001,所以,取该指令时访问了页目录的第 1 个表项,(1 分)在对应的页表中访问了第 1 个表项。(1 分)
3)在执行 scanf0 的过程中,进程 P 因等待输入而从执行态变为阻塞态。(1 分)输入结束时,P 被中断处理程序唤醒,变为就绪态。(1 分)P 被调度程序调度,变为运行态。(1 分)CPU状态会从用户态变为内核态。(1 分)