1.页,就是一块内存,在80386中,页的大小是固定的4096字节(4KB)。
2.逻辑地址:
1.在有地址变换功能的计算机中,访问指令给出的地址 (操作数) 叫逻辑地址,也叫相对地址。
要经过寻址方式的计算或变换才得到内存储器中的物理地址。
2.把用户程序中使用的地址称为相对地址即逻辑地址。
3.逻辑地址由两个16位的地址分量构成,一个为段基值,另一个为偏移量。两个分量均为无符号数编码。
文献解释:这样该存储单元的地址就可以用段基址(段地址)和段内偏移量(偏移地址)来表示,
段基址确定它所在的段居于整个存储空间的位置,偏移量确定它在段内的位置,这种地址表示方式称为逻辑地址,
通常表示为段地址:偏移地址的形式。
背景:追根求源,Intel的8位机8080CPU,数据总线(DB)为8位,地址总线(AB)为16位。
那么这个16位地址信息也是要通过8位数据总线来传送,也是要在数据通道中的暂存器,
以及在CPU中的寄存器和内存中存放的,但由于AB正好是DB的整数倍,故不会产生矛盾!
但当上升到16位机后,Intel8086/8088CPU的设计由于当年IC集成技术和外封装及引脚技术的限制,
不能超过40个引脚。但又感觉到8位机原来的地址寻址能力2^16=64KB太少了,但直接增加到16的整数倍
即令AB=32位又是达不到的。故而只能把AB暂时增加4条成为20条。则2^20=1MB的寻址能力已经增加了16倍。
但此举却造成了AB的20位和DB的16位之间的矛盾,20位地址信息既无法在DB上传送,又无法在16位的CPU寄存器和
内存单元中存放。于是应运而生就产生了CPU段结构的原理。
3.在未代开分页机制时,线性地址等同于物理地址,即逻辑地址通过分段机制直接转换成物理地址;
开启分页时,分段机制将逻辑地址转换成线性地址,线性地址再通过分页机制转换成物理地址。
4.分页的主要目的在于实现虚拟存储器。
5.页目录表的表项简称PDE(Page Directory Entry),页表的表项简称PTE(Page Table Entry)
6.线性地址转换成物理地址:
进行转换时,先从寄存器CR3制定的页目录中根据线性地址的高10位得到页表地址,然后在页表总根据线性地址的
第12到21位得到物理页首地址,将这个首地址加上线性地址低12位便得到物理地址。
7.CR0寄存器的最高位PG位控制分页机制是否生效,如果PG=1,则分页机制生效。所以准备好页目录和页表,并将CR3
指向页目录表之后,只需要置PG位(第32位),分页机制就开始工作了。
8.CR3又叫PDBR(Page Directory Base Register),高20位是页目录表首地址的高20位,页目录表首地址的低12位是零,
也就是说,页目录表会是4K对其的。类似的,PDE中的页表基址(Page-Table Base Address)以及PTE中的页基址
(Page Base Address)也是用高20位来表示4K对齐的页表和页。
PDE/PTE 低12位用以表明PDE和PTE的属性。
0位--P 存在位,表明当前条目所指向的页或页表是否在物理内存中
1位--R/W 指定一个页或一组页的读写权限;等于0表示只读,等于1表示可读并可写。
2位--U/S 指定一个页或一组页的特权级。
3位--PWT 控制对单个页或者表的缓冲策略。
4位--PCD 用于控制对单个页或者页表的缓冲。
5位--A 指示页或页表是否被访问。
6位--D 指示页或页表是否被写入。
7位--PDE(PS)/PTE(PAT) PS位决定也大小/PAT位选择PAT(Page Attribut Table)
8位--G 指示全局页
9.处理器会将最近常用的页目录和页表项保存在一个叫做TLB(Translation Lookaside Buffer)的缓冲区中。
只有在TLB中找不到被请求页的转换信息时,才会到内存中寻找。这样就大大加快了访问页目录和页表的时间。
当页目录或页表项被更改时,操作系统应该马上使TLB中对应的条目无效,以便下次用到此条目时让它获得更新。
当CR3被加载时,所有TLB都会自动无效,除非页或页表条目的G位被设置。
10.指令:STOSD 将 EAX 存储到地址 ES:(E)DI
保护模式--页式存储
最新推荐文章于 2023-02-02 09:03:41 发布