操作系统实验作业, 实验二内存地址转换实验, 知识点笔记
-
逻辑地址: 段标识符(16,2字节)+段内偏移量;段标识符是高位的16位,(段内偏移量是低位的16位)
- 段标识符(段选择符),16位; 前13位是索引号, 之后1位是TI字段, 之后2位是PRL(请求者特权级)
- 索引号(13) : 是段表中段的编号,也可以看作段描述符在段表中的索引位置
- TI字段(1) : 一位,TI=0表示该逻辑地址对应的段描述符在GDT中, TI=1 表示相应的段描述符在LDT中
-
段表: 由连续排列的 段描述符 组成,段描述符描述一个段的起始位置
-
相关寄存器:
- GDTR : 存放GDT在内存中的起始地址和大小
- LDTR : TI=1时,说明要找的段描述符存放在LDT中, LDTR中存放该LDT在GDT中的索引,TI=0时, 要找的段描述符在GDT中, 通过GDTR找到GDT进而找到段描述符
- DS, SS等寄存器: 储存 段标识符(段选择符16,2字节),高13位包括索引号和TI字段
-
线性地址 : 段基址是段在逻辑(虚拟)地址空间中的起始地址, 加上逻辑地址中的段内偏移量组成的 线性地址,表示要访问的数据在逻辑(虚拟)地址空间中的地址
-
物理地址 : 线性地址到物理地址的转换
- 物理地址内存空间按照分页来管理, 逻辑地址为 页号+页内偏移量,
- 32位(4字节)的机器,32位可以表示2^32个字节,因此可以支持4G内存
- 页面大小为4kb(2^12个字节,可以用12位表示),因此页内偏移量为低位12位
- 总的页的个数为 2^32字节 / 2^12字节 = 2^20页, 需要用20位表示
- 由页号找到页框号, 计算可得页框起始地址, 加上页内偏移量为物理地址
- 若采用二级分页管理方式
- 页表中存放对应页框的页框号,页框号占20位(2字节4位,十六进制5位),每个页框号用4字节储存
- 一页表示一个页表
- 因此每页(4kb)能储存 2^12 / 2^2 = 2^10 个页框号, 用10位表示要找的页框在该页表中的第几个
- 共2^20页, 每个页表能放2^10页, 因此有 2^20 / 2^10 = 2^10 个页表,每个页表存放在某个页框中
- 一个页框号对应一个页表, 页框号用4字节存, 正好1页(4kb)能够储存2^10个页表的页框号,
- 用10位表示要找的页框在该页中的第几个
- 因此有两级页表, 第一级页表有1个,被存放在某页框中, 存放2^10个指向第二级页表的页框号,
- 第二级页表有2^10个, 每个第二级页表被存放在一个页框中, 每个第二级页表内存放2^10给指向某个页框的页框号
- 线性地址的低12位表示物理地址在所在页框中的偏移量,之后向上的10位表示物理地址所在页框的页框号在所在第二级页表中的编号
- 再之后的最高10位表示所在的第二级页表在所在的第一级页表中的编号
-
Bochs控制窗口下的命令解释
- ctrl+c 进入调试状态
- c 继续执行,直到遇到断点
- sreg 查看段寄存器和段描述符寄存器
- creg 查看控制寄存器
- xp [/nuf] addr 显示物理地址的内容
- 其中n指定显示的单元数,默认是1;
- u指定每个显示单元的大小(b表示字节、h表示字(2字节)、w表示双字(4字节)),默认是w;
- f指定显示格式(x十六进制、d 有符号十进制、u 无符号十进制、o 八进制、t二进制、c字符),默认是x
- setpmem [addr] [size] [val] 设置物理内存某地址的内容
- addr地址、size字节数、val值