TLB的刷新方式--linux 2.4

TLB刷新的时机(i386)

struct tlb_state cpu_tlbstate[NR_CPUS] = {[0...NR_CPUS-1] = {&init_mm, 0}};

一般情况各个CPU的cpu_tblstate的state设置成TLBSTATE_OK,表示如果正在使用中的页面目录或页面表内容发生了变化就要刷新TLB的内容。

  • 与vmalloc有关
  • 与HIGHMEM映射有关
  • 与外设总线(例如PCI)有关的映射

TLBSTATE_OK 相对的是TLBSTATE_LAZY

在__exit_mm()和schedule()中会设置TLBSTATE_LAZY。

TLB刷新的方式(i386)

对TLB的刷新(其实是废弃当前TLB中的内容)可以是针对整个TLB的,也可以是针对一个具体页面相关的TLB的刷新。

  • 对于整个TLB的刷新,直接读出CR3控制器后再写回;
  • 对于一个具体页面相关的TLB的刷新,使用invlpg命令实现。

对整个TLB的冲刷由local_flush_tlb()进行;而废弃某个页面的相关的TLB,则由__flush_tlb_one()完成。

相关推荐
ajassi200014 小时前
开源 Linux 服务器与中间件(十三)FRP服务器、客户端安装和测试
linux·服务器·开源
XH-hui15 小时前
【打靶日记】群内靶机vm1
linux·网络安全
Eric.Lee202116 小时前
ubuntu 安装 Miniconda
linux·运维·python·ubuntu·miniconda
会飞的土拨鼠呀16 小时前
通过Linux进程id找到程序路径
linux·服务器·网络
8***848217 小时前
如何在Linux中找到MySQL的安装目录
linux·运维·mysql
9***J62817 小时前
Linux下PostgreSQL-12.0安装部署详细步骤
linux·运维·postgresql
W***832018 小时前
如何在 Ubuntu 22.04 上安装 MySQL
linux·mysql·ubuntu
凌寒1119 小时前
Linux(Debain)安装Redis、数据迁移
linux·运维·服务器·redis
7***q60819 小时前
在linux(Centos)中Mysql的端口修改保姆级教程
linux·mysql·centos
用户4760220227820 小时前
机器配置免密切root
linux