Home
clingfei
Cancel

Linux下的TTBR1_EL1寄存器使用探究

本文分析基于Linux-5.10.100,架构基于ARM64 V8.3,假设页表映射层级为4,即CONFIG_ARM64_PGTABLE_LEVELS=4,地址宽度为48,即CONFIG_ARM64_VA_BITS=48。 在Linux系统中,通过MMU进行虚实地址转换时,会依赖于TTBR1_EL1和TTBR0_EL0两个寄存器。其中TTBR1_EL1指向内核地址空间的页表基地...

如何基于LLVM IR分析全局函数指针的使用情况

内核中的全局函数指针大致可以分为两种:一种是全局变量本身是一个函数指针,另一种是全局结构体的某个子域是函数指针,例如: struct funcptr { void (*foo)(); }s; void (*fp)(void); 而对这些函数指针的调用,反映到IR上,通常为: fp(): store void ()* @indirect, void ()** @fp, ali...

LeetCode 11. 盛最多水的容器

迫于最近比较无聊,重操Leetcode旧业,顺带写一下题解。 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。 示例:   输入:[1,8,6,2,...

Linux内核模块签名与版本检查机制

内核模块签名机制 linux内核从3.7 开始加入模块签名检查机制, 校验签名是否与已编译的内核公钥匹配。目前只支持RSA X.509验证, 模块签名验证并非强制使用, 可在编译内核时配置是否开启。 CONFIG_MODULE_SIG: Module signature verification 开启该选项后,内核加载该模块时会对内核模块的签名进行检查。默认情况下,在加载没有签名或签...

Fault-tolerant Key/Value Service

6.824 Lab 3: Fault-tolerant Key/Value Service (mit.edu) 本实验要求在Lab2中实现的Raft的基础上构建一个key/value存储服务。 Part A: Key/value service without snapshots 首先实现不包含快照的key/value服务,每个kvserver与Raft peer一一对应。与...

MIT 6.s081 Lab Multithreading

Lab: Multithreading (mit.edu) Uthread: switching between threads 为用户态的线程系统设计并实现上下文切换机制,实现创建线程、在线程切换时保存和恢复寄存器的功能。 uthread.c中对线程的定义如下: struct thread { char stack[STACK_SIZE]; /* the th...

MIT 6.s081 Lab copy-on-write fork

Lab: Copy-on-Write Fork for xv6 (mit.edu) Problem and Solution xv6中的fork系统调用将父进程的用户空间内存全部复制到子进程,而如果需要拷贝的内存数量比较大,拷贝过程会引起严重的开销问题。并且在子进程中,fork系统调用后通常紧跟着exec系统调用以修改进程影响,导致fork复制的内存被丢弃。如果父进程和子进程使...

MIT 6.s081 Lab lazy allocation

Lab: xv6 lazy page allocation (mit.edu) Page-fault exceptions 当CPU无法将虚拟地址转换成物理地址时,生成一个page-fault excecption,称为缺页异常。RISC-V中存在三种类型的缺页异常:load(load指令)/store(store指令)/instruction(指令所在的虚拟地址无法转换成物...

MIT 6.s081 Lab traps

Lab: Traps (mit.edu) RISC-V assembly 1. Which registers contain arguments to functions? For example, which register holds 13 in main’s call to printf? 在main函数中,对printf的调用如下:  printf("%d %d\...

xv6 trap and system call notes

trap包括三种情况: 系统调用,用户程序执行ecall指令切换到内核态执行对应的系统调用处理程序 异常,用户或内核执行某些非法指令,例如除零或访问无效的虚拟地址 设备中断 与trap有关的控制寄存器 stvec: 保存trap处理程序的地址 sepc: trap发生时,pc将会切换到trap处理程序的首地址,...