《一个操作系统的实现》读书笔记--第三章--分页机制
来源:互联网 发布:linux基础试题选择题 编辑:程序博客网 时间:2024/05/20 21:47
1、逻辑地址、线性地址和物理地址
2、分页管理机制
3、PDE、PTE、cr3
4、如何初始化页目录表与页表
一、逻辑地址、线性地址和物理地址
1、在未开启分页机制情况下
2、在开启分页机制情况下
二、分页管理机制
下图向大家展示,如何通过分页管理机制,将线性地址转换为物理地址的。
转换使用两级页表,第一级叫做页目录,大小为4KB,存储在一个物理页中,每个表项4字节长,共有1024
个表项。每个表项对应第二级的一个页表,第二级的每一个页表也有1024个表项,每一个表项对应一个物
理页。页目录表的表项简称PDE(Page Directory Entry),页表的表项简称PTE(Page Table Entry)。
线性地址转换物理地址的具体步骤是:
(1)先是从寄存器cr3指定的页目录中根据线性地址的高10位得到页表。
(2)在页表中,根据线性地址的第12—21位得到物理页首地址。
(3)将这个首地址,加上线性地址的低12位便得到了物理地址。
1、cr3的结构图如下:
2、PDE的结构图如下:
其中特别需要注意的几个属性:
(1)P存在位,表示当前条目所指向的页或页表是否在物理内存中。当P=0表示页不在内存中,如果此时处理器试图访问此页,将会产生页异常(Page-fault exception, #PF);P=1表示页在内存中。
(2)A指示页或页表是否被访问。此位往往在页或页表刚刚被加载到物理内存中时被内存管理程序清零,处理器会在第一次访问此页或也表时设置该位。而且,处理器并不会自动清除此位,只有软件能清除它。在时钟页面置换算法中,需要通过该位来标识此页面是否已经被访问。
(3)D指示页或页表是否被写入,此位往往在页或页表刚刚被加载到物理内存中时被内存管理程序清零,处理器会在第一次写入此页或页面时设置此位。而且,处理器并不会自动清除此位,只有软件能清除它。由于该位的存在,当往某页写入内容时,并不需要将其同步到磁盘上,只有当该页被置换出时,判断该位D=0,则表示该页没有被写入,则不需要将其写入磁盘;D=1,则表示该页已被写入,则需要将其写入到磁盘。
3、PTE的结构图如下:
其中各属性位与PDE中具有相同的含义。
4、页对其方式
cr3中的高20位将是页目录表首地址的高20位,PDE的高20位是页表首地址,PTE的高20位是物理页的首地址。保护模式下,寻址的范围是0-4GB,为什么却用20位来存储这些首地址呢?
cr3中的高20位是页目录表首地址的高20位,页目录表首地址的低12位将会是0,这样就保证了页目录表会是4KB对齐的。同理,PDE中的页表基址(Page-Table Base Address),以及PTE中的物理页基址(Page Base Address)也是用高20位来表示4KB对齐的页表和页。
pmtest6.asm中初始化页目录表与页表
- PageDirBase equ 200000h ;页目录开始地址: 2M
- PageTblBase equ 201000h ;页表开始地址: 2M + 4K
- ;启动分页机制===============================================
- SetupPaging:
- ;为简化处理,所有线性地址对应相等的物理地址
- ;首先初始化页目录
- mov ax, SelectorPageDir
- mov es, ax
- mov ecx, 1024
- xor edi, edi
- xor eax, eax
- mov eax, PageTblBase|PG_P|PG_USU|PG_RWW
- .1:
- stosd
- add eax, 4096
- loop .1
- ;再初始化所有页表
- mov ax, SelectorPageTbl
- mov es, ax
- mov ecx, 1024*1024
- xor edi, edi
- xor eax, eax
- mov eax, PG_P|PG_USU|PG_RWW
- .2:
- stosd
- add eax, 4096
- loop .2
- mov eax, PageDirBase
- mov cr3, eax
- mov eax, cr0
- or eax, 80000000h
- mov cr0, eax
- jmp short .3
- .3:
- nop
- ret
- ;分页机制启动完毕==========================================
初始化页目录表和页表之后,要让cr3指向页目录表,然后设置cr0的PG位。
- 《一个操作系统的实现》读书笔记--第三章--分页机制
- 《一个操作系统的实现》读书笔记--第三章--分页机制
- 《一个操作系统的实现》读书笔记--第三章--中断机制
- 《一个操作系统的实现》读书笔记--第三章--中断机制
- 《一个操作系统的实现》读书笔记--第三章--保护模式
- 一个操作系统的实现(4):分页机制
- 《Orange's 一个操作系统的实现》学习笔记--分页机制
- 一个操作系统的实现(6)-初识分页机制
- 一个操作系统的实现(8)-进一步体会分页机制
- 一个操作系统的实现(4):分页机制
- 《一个操作系统的实现》读书笔记--第三章--堆栈段的工作方式
- 《一个操作系统的实现》读书笔记--第三章---不同特权级代码段之间的跳转
- 《一个操作系统的实现》读书笔记--第三章--“实模式--保护模式--实模式”转换过程
- 一个操作系统的实现读书笔记
- 操作系统的分页机制
- 操作系统的分页机制
- 《一个操作系统的实现》读书笔记--第二章--搭建工作环境
- 《Orange's:一个操作系统的实现》读书笔记
- bzoj1552
- HUD 1074 doing homework(状压DP)
- STL中的栈
- XHTML 1.0模式下控制空间占比,默认空间占比为展示内容高度
- 这就是生活:低落沮丧时,看看这些漫画吧
- 《一个操作系统的实现》读书笔记--第三章--分页机制
- runtime总结(中)
- Android 之 VersionCode,VersionName (2)命名规则
- 一个比较好的mac优质软件免费版下载网站
- 乐视
- MongoDB的安装及配置文件选项全解
- Git shell命令
- LoadRunner实现MD5加密的两种方式
- Android之 VersionCode,VersionName(3) 遇到的问题