学习笔记
《x86汇编语言:从实模式到保护模式》
//www.greatytc.com/p/d481cb547e9f
检测点16.1
在分页模式下, 某程序运行时,段部件发出一个线性地址
0x0C005032
访问内存数据。如果该线性地址对应的物理页是0x0000A000
,页表的物理地址是0x00003000
,那么,操作系统在此程序开始运行前,是如何安排与该线性地址相关的页目录项和页表项的?
题目解答
题目解析
- 按照题目要求,需要填写
(1)页目录偏移地址(2)页表偏移地址(3)页表表项
; - CPU的段部件:输出线性地址;
- CPU的页部件:输出物理地址;
- 线性地址
0x0C005032
拆成,高10位、中10位以及低12位; - 如图分别对应:页目录索引,页表索引以及页内偏移量;
- 在页目录以及页表中,
表项的偏移量 = 索引x4
; - 题目给出了物理地址,
物理地址 = 页表表项读出的物理地址 + 页内偏移量
,即(3)处的答案可由0x 0000 A000 - 0x32 = 0x 0000 9FCE
.
任务加载时发生了什么?
- 1、任务加载时,操作系统先创建虚拟的段,并根据段地址的高20位(高10位以及中10位)决定要用到哪些页目录表项和页表表项;
- 2、然后,操作系统在内存中寻找空闲的页,将原本该写入段中的数据写到一个或者多个页中;
- 3、最后,操作系统将页的物理地址填写到相应的页表表项中;
- 4、CPU中的CR3寄存器指向当前页目录的物理地址;
概念复习
- 层次化分页结构