ARM中的ttbr0和ttbr1都是用来管理TLB(Translation Lookaside Buffer)的寄存器。TLB是一种硬件高速缓存,用于存储虚拟地址到物理地址的映射。当CPU访问内存时,如果TLB中已经有对应的映射关系,则可以直接访问物理地址,否则就需要在页表中查找映射关系。ttbr0和ttbr1的作用是指定页表的位置,CPU根据这些寄存器中存储的信息来查找对应的页表项。
代码示例:
// 设置ttbr0寄存器存储的页表地址 void set_ttbr0(unsigned int addr){ asm volatile("mcr p15, 0, %0, c2, c0, 0"::"r"(addr)); }
// 设置ttbr1寄存器存储的页表地址 void set_ttbr1(unsigned int addr){ asm volatile("mcr p15, 0, %0, c2, c0, 1"::"r"(addr)); }
// 获取ttbr0寄存器存储的页表地址 unsigned int get_ttbr0(){ unsigned int addr; asm volatile("mrc p15, 0, %0, c2, c0, 0":"=r"(addr)); return addr; }
// 获取ttbr1寄存器存储的页表地址 unsigned int get_ttbr1(){ unsigned int addr; asm volatile("mrc p15, 0, %0, c2, c0, 1":"=r"(addr)); return addr; }