2-4小时突击操作系统(4)
本节内容:分页介绍、快速地址转换、超越物理内存的机制、超越物理内存的策略
分页:介绍
不是将一个进程的地址空间分割成几个不同长度的逻辑段(即代码、堆、段),而是分割成固定大小的单元,每个单元成为一页。
为了记录地址空间的每个虚拟页放在物理内存中的位置,操作系统通常为每个进程保存一个数据结构,称为页表。主要作用是为地址空间的每个虚拟页面保存地址转换,从而让我们知道每个页在物理内存中的位置。例如(虚拟页0→物理帧3)
虚拟地址分为两个组件:虚拟页面号(VPN)和页内的偏移量。(2^6=64)
例如虚拟地址为21,二进制“010101”。在虚拟页“01(或1)”的第5个(“0101”)字节处。
找到虚拟页所在的物理页,物理帧号PFN是7(二进制111),通过用PFN替换VPN来转换此虚拟地址,然后将载入发送给物理内存。
页表
页表是一种数据结构,用于将虚拟地址映射到物理地址。线性页表:操作系统通过虚拟页号VPN检索该数组,并在该索引出查找页表项PTE,以便找到期望的物理帧号PFN。
分页:快速地址转换
增加地址转换旁路缓冲存储器TLB,它就是频繁发生的虚拟到物理地址转换的硬件缓存。
首先从虚拟地址中提取页号VPN,然后检查TLB是否有该VPN的转换映射,有,TLB命中,从TLB项中取出页帧号PFN,与原来虚拟地址中的偏移量组合形成期望的物理地址PA,并访问内存。
没有,硬件访问页表来寻找转换映射,并用该转换映射更新TLB。然后执行上述流程。
TLB未命中处理:硬件或软件(操作系统)
旧:硬件必须知道页表在内存中的确切位置,以及页表的确切格式,发生未命中时,硬件会“遍历”页表,找到正确的页表项,取出想要的转换映射,用它更新TLB。
软件:发生未命中,硬件系统抛出一个异常,这会暂停当前的指令流,将特权级提升至内核模式,跳转至陷阱处理程序,用于处理TLB未命中,这段代码在运行时,会查找页表中的转换映射,然后用特别的“特权”指令更新TLB,并从陷阱返回。这个陷阱返回跟之前的不同,从该指令从新执行。
TLB的内容:VPN | PFN |其他位
上下文切换时对TLB的处理
VPN |
PFN |
有效位 |
保护位 |
10 |
100 |
1 |
rwx |
- |
- |
0 |
- |
10 |
170 |
1 |
rwx |
- |
- |
0 |
- |
如果两个进程的地址映射都在TLB中。一种方法:在上下文切换时,清空TLB。但是有一定的开销:每次进程运行,当它访问数据和代码页时,都会触发TLB未命中。
在TLB中添加一个地址空间标识符ASID,可以把A
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏主要是介绍嵌入式软件开发岗位的相关知识和学习攻略,为大家提供一份笔试与面试手册。包括有嵌入式软件开发岗位介绍与学习攻略;校园招聘和offer疑惑问题的介绍;在笔试方面,如何刷题为笔试作准备,提供往年笔试真题;在面试方面,提供相关知识的复习重点,提供面试真题。包括有:华为、蔚来、文远、大疆、三一、深信服、亚马逊、Intel、百度、科大讯飞、OPPO、京东、中兴、比特大陆|算能、美团等等