TLB (Translation Lookaside Buffer,翻译后援缓冲区),也称为翻译后援缓冲区或翻译旁路缓冲区,是MMU中的一个缓冲区,其中每行保存一个由单个PTE组成的块 。用于组选择和行匹配的索引和标签字段是从VPN中提取的 。如果TLB中有T = 2^t组,则TLB索引(TLBI)由VPN的t个最低位组成,而TLB标签(TLBT)由VPN中的其余位组成 。
下图显示了地址转换的流程(如果TLB命中):
第一步,CPU给MMU一个虚拟地址进行地址转换 。
第二步和第三步,MMU通过TLB获取对应的PTE 。
第四步:MMU通过PTE翻译物理地址,并发送给缓存/内存 。
第五,缓存向CPU返回数据(如果缓存命中,否则需要访问内存) 。
当TLB未命中时,MMU必须从缓存/内存中获取相应的PTE,并将新获取的PTE存储在TLB中(如果TLB已满,现有的PTE将被覆盖) 。
Linux中的虚拟内存系统Linux为每个进程维护一个单独的虚拟地址空空间 。虚拟地址空室分为内核空室和用户空室 。user 空 room包括代码、数据、堆、共享库和栈 。kernel 空 room包含了内核中的代码和数据结构,kernel 空 Linux还将一组连续的虚拟页(大小等于总内存)映射到相应的一组连续的物理页,为内核访问物理内存中的任意特定位置提供了便捷的方式 。
Linux虚拟内存被组织成一组区域(也称为段) 。区域的概念允许虚拟地址空之间有间隙 。区域是已分配的虚拟内存的现有块 。比如代码段、数据段、堆、共享库段、用户栈都属于不同的区域,每个现有的虚拟页都存储在某个区域,而不属于任何区域的虚拟页都是不存在的,不能被进程引用 。
为系统中的每个进程维护一个单独的任务结构(task_struct) 。任务结构中的元素包含或指向内核运行进程所需的所有信息(PID、指向用户堆栈的指针、可执行目标文件的名称、程序计数器等) 。).
描述虚拟内存的当前状态 。Pgd指向一级页表的基址(内核运行这个进程时,pgd会存放在CR3控制寄存器,也就是页表基址寄存器),mmap指向一个VM _ area _ structures的链表,其中每个VM _ area _ structures描述了当前虚拟地址空之间的一个区域 。
Vm_starts:指向这个区域的开始 。
Vm_end:指向这个区域的结尾 。
Vm_prot:描述该区域包含的所有页面的读写权限 。
Vm_flags:描述这个区域的页面是否与其他进程共享,这个进程是否是私有的,以及其他一些信息 。
Vm_next:指向链表的下一个区域结构 。
存储器交换Linux通过将虚拟内存区域与硬盘上的文件相关联来初始化虚拟内存区域的内容 。这个过程称为内存映射 。这种将虚拟内存系统集成到文件系统中的方法可以简单高效地将程序和数据加载到内存中 。
【虚拟存储系统是指什么 虚拟存储】一个区域可以被映射到普通硬盘文件的连续部分,例如可执行目标文件 。一个节被分成页面大小的片,每个片包含虚拟页面的初始内容 。由于按需页面调度的策略,这些虚拟页面实际上不会交换到物理内存中,直到CPU引用的虚拟地址在这个区域的范围内 。如果该区域大于文件区域,则用零填充该区域的其余部分 。
一个区域也可以映射到一个匿名文件,该文件由内核创建,包含所有二进制零 。当CPU第一次引用这样一个区域的虚拟页面时,内核会在物理内存中找到一个合适的牺牲页面 。如果该页已被修改,它将首先被写回硬盘,然后受害页将被二进制零覆盖,页表将被更新以将该页标记为缓存在内存中 。
简单来说,普通的文件映射就是建立一个文件和一块内存的映射关系 。对文件的IO操作可以绕过内核,直接在用户态完成(用户态读写虚拟地址区相当于读写文件) 。匿名文件映射一般来说,当用户空需要分配一段内存来存储数据时,内核会创建匿名文件,并与内存进行映射,然后用户态就可以通过操作这个虚拟地址来操作内存 。匿名文件映射最常见的应用场景是动态内存分配(malloc()函数) 。
Linux很多地方都采用了“懒人加载”机制,这自然包括内存映射 。无论是正常的文件映射还是匿名映射,Linux只会先划分虚拟内存地址 。只有当CPU第一次访问这个区域的虚拟地址时,才会真正与物理内存建立映射关系 。
只要虚拟页面被初始化,它就会在内核维护的交换文件之间切换 。文件交换也称为交换空空间或交换区域 。交换区不仅用于页面交换,还可以在物理内存不够的时候,将一些内存数据交换到交换区(利用硬盘扩展内存) 。
共享对象虚拟内存系统为每个进程提供了私有的虚拟地址空空间,可以保证进程之间不会出现错误的读写 。但是,许多流程也有相同的部分 。例如,每个C程序都使用C标准库 。如果每个进程都在物理内存中保留这些代码的副本,会造成内存资源的极大浪费 。
推荐阅读
- 图文解说 施乐3117加粉只需10分钟新系统了解的东西
- word文档斜杠怎么打系统教程推荐
- 苹果系统上QQ音乐怎么更换皮肤[技能提升]
- 摩尔庄园手游邻居系统解锁条件一览-邻居系统怎么开启让您技能天下无双
- 原神元素能量怎么回复-元素能量系统机制介绍出神入化
- apple-watch怎么升级系统精选视频
- Win7系统更改磁盘卷标排列顺序的操作步骤是什么? 如何更改硬盘驱动器的卷标
- 华为手机系统更新怎么关闭视频学习
- oppo手机系统更新精选视频
- 华为手机系统更新在哪里视频学习