Page table
Page table
页表
页表是可以简化的,原来的页表:
可以观察出,若当页面号连续时,可以将页表简化为一个数组,数组元素中存放数组下标(即页面号)所对应的页框号
页面大小
- 若逻辑地址长度为 m bits,页面大小:2^n Bytes
- 页内位移占n bits
- 页号占m-n bits
1 | :~$uname -m //查看CPU架构 |
define
- The operating system maintains(维护) a copy(副本) of the page table for each process.
- This copy is used to translate(转化) logical addresses to physical addresses.
- It is also used by the CPU dispatcher(派遣器) to define the hardware page table when a process is to be allocated the CPU.:当一个进程要被分配到CPU时,它也被CPU调度器用来定义硬件页表。
- Paging therefore increases the context-switch(上下文切换) time
快表
HARDWARE PAGE TABLE(硬件页表)
- The page table is kept in main memory, and a pagetable base register (PTBR) points to the page table.
- Changing(切换) page tables requires changing only this one register, substantially(大幅的) reducing(减少) context-switch time.
- With this scheme(方案), two memory accesses are needed to access a byte (one for the page-table entry, one for the byte).:在这种方案下,访问一个字节需要两次内存访问(一次为页表条目(寻找对应页面),一次为字节)。
TLB
- TLB(Translation(转换) Look-aside(旁路) Buffer(缓冲区)) is a kind of small, fast-lookup(快速查找) hardware cache. It is used with page tables in the following way(以下方式).
- The TLB contains only a few of (少数)the page-table entries(条目).这些条目的总称为快表
- When a logical address is generated by(被生成) the CPU, its page number is presented(提交) to the TLB.
- If the page number is found, its frame number is immediately available(可用的) and is used to access memory.
- If TLB miss(没有命中), a memory reference to the page table must be made.
- The percentage(百分比) of times that the page number of interest is found in the TLB is called the hit ratio(命中率).
基于页的保护与共享
保护
- 为了防止地址转换时出现异常,可在页表每个条目 设置一个“valid-invalid”比特位,用于表示该页 的有效性。
- 这个方法可以被轻松扩 展以提供更好的保护级别,如两个bit可实现 “只读”、“读 写”、“可执行”等。
共享
如图,进程P1 P2 P3 对应的页表中均含有 3 4 6 号页面,这意味着3 4 6 号页面被三个进程所共享,只有特定的内容才可以被共享,一般具有只读属性
多级页表
页表大小
- 假设CPU是32bits,采用的逻辑地址是32bits,那么 进程的逻辑地址空间大小为2 32Bytes,即4G Bytes。
- 若页面大小是4K Bytes,则一个进程最多被分成 4G/4K = 1M个页 面,也就是说进程的页表最多有1M个页表项;
- 若每个页表项占用4Bytes,则每个页表最多占用 1M B* 4B = 4MBytes ,由于页大小为4k,故需要 4M/4K 1K个连续页框。
问题来了,1k个连续的页框应该如何解决?
这里采用的方法时将页表也拆散
页表页
我们将进程分为(p#0 p#1 p#2 …… p#7),将其存放在页表中,根据页表可以查询到对应的页框,但是由于页表较大需要连续分配2个页框,但我们希望将页表分开存储以达到内存灵活,因此设计了页表页。首先将页表按照页框大小分若个个并标号,将页表离散的存储到页框中,页表页中记录了页表对应的编号和存放到对应页框的对应关系,这样就实现了页表的离散存储。当然对应的逻辑地址也要发生改变。这种分页方法我们称为二级页表
多级页表
- 上面是一个32位地址采用两级页表的例子,页面大 小是4KBytes,第一级页表页的数量是1K个,每个页 表页中包含的页面数量也是1K个。
- 下面是x86-64架构CPU采用的四级页表方案