《一个操作系统的实现》读书笔记--第三章--分页机制

1、逻辑地址、线性地址和物理地址
2、分页管理机制
3、PDE、PTE、cr3
4、如何初始化页目录表与页表

一、逻辑地址、线性地址和物理地址

1、在未开启分页机制情况下

《一个操作系统的实现》读书笔记--第三章--分页机制_第1张图片

2、在开启分页机制情况下

《一个操作系统的实现》读书笔记--第三章--分页机制_第2张图片

二、分页管理机制

下图向大家展示,如何通过分页管理机制,将线性地址转换为物理地址的。

《一个操作系统的实现》读书笔记--第三章--分页机制_第3张图片

转换使用两级页表,第一级叫做页目录,大小为4KB,存储在一个物理页中,每个表项4字节长,共有1024 
个表项。每个表项对应第二级的一个页表,第二级的每一个页表也有1024个表项,每一个表项对应一个物 
理页。页目录表的表项简称PDE(Page Directory Entry),页表的表项简称PTE(Page Table Entry)。

线性地址转换物理地址的具体步骤是:
(1)先是从寄存器cr3指定的页目录中根据线性地址的高10位得到页表。
(2)在页表中,根据线性地址的第12—21位得到物理页首地址。
(3)将这个首地址,加上线性地址的低12位便得到了物理地址。

三、cr3、PDE和PTE

1、cr3的结构图如下:

《一个操作系统的实现》读书笔记--第三章--分页机制_第4张图片

2、PDE的结构图如下:

《一个操作系统的实现》读书笔记--第三章--分页机制_第5张图片

其中特别需要注意的几个属性:
(1)P存在位,表示当前条目所指向的页或页表是否在物理内存中。当P=0表示页不在内存中,如果此时处理器试图访问此页,将会产生页异常(Page-fault exception, #PF);P=1表示页在内存中。
(2)A指示页或页表是否被访问。此位往往在页或页表刚刚被加载到物理内存中时被内存管理程序清零,处理器会在第一次访问此页或也表时设置该位。而且,处理器并不会自动清除此位,只有软件能清除它。在时钟页面置换算法中,需要通过该位来标识此页面是否已经被访问。
(3)D指示页或页表是否被写入,此位往往在页或页表刚刚被加载到物理内存中时被内存管理程序清零,处理器会在第一次写入此页或页面时设置此位。而且,处理器并不会自动清除此位,只有软件能清除它。由于该位的存在,当往某页写入内容时,并不需要将其同步到磁盘上,只有当该页被置换出时,判断该位D=0,则表示该页没有被写入,则不需要将其写入磁盘;D=1,则表示该页已被写入,则需要将其写入到磁盘。

3、PTE的结构图如下:

《一个操作系统的实现》读书笔记--第三章--分页机制_第6张图片

其中各属性位与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位。
《一个操作系统的实现》读书笔记--第三章--分页机制_第7张图片

 


你可能感兴趣的:(页表,CR3,分页机制,页目录表)