Kernel
文章平均质量分 60
Don't_Touch_Me
努力可以改变一切!
展开
-
Linux migrate_type进一步探索
fallbacks是不同迁移类型内存不足时,可从哪个迁移类型中进行fallback操作,对于MIGRATE_UNMOVABLE迁移类型不足时,可以先MIGRATE_RECLAIMABLE迁移类型中偷内存,如果MIGRATE_RECLAIMABLE也没有内存的话,会进一步fallback到MIGRATE_MOVABLE迁移类型。因此对于我们一开始需要MIGRATE_UNMOVABLE类型的页面没有时,最终会fallback到MIGRATE_MOVABLE。原创 2024-05-02 20:30:19 · 754 阅读 · 0 评论 -
Linux migrate_type初步探索
为了更好的管理物理内存,操作系统进一步抽象出页块的概念,通常一个页块的大小是2^(MAX_ORDER-1)个页面(4MB)。每个页块对应一个迁移类型migrate_type,buddy系统中的页面,根据其所在migrate_type链表,可知道该页是属于哪个migrate_type的页块。原创 2024-05-01 21:53:01 · 542 阅读 · 0 评论 -
Linux gettid()系统调用源码分析
gettid() 是一个Linux系统调用,用于获取当前进程的线程ID。原创 2024-04-21 00:16:06 · 785 阅读 · 0 评论 -
Linux pageset
在用户进程发生缺页异常时,Linux内核需要分配所需物理页面以及建立也表映射,来维持进程的正常内存使用需求。而对于分配物理页面仅依赖于buddy系统,对于小order页面的分配效率较低。因此Linux通过在每个cpu维护一个page链表(percpu page list简称pageset),用来满足小order页面分配请求,提高页面分配效率。原创 2024-02-21 22:39:25 · 506 阅读 · 2 评论 -
Linux 匿名页反向映射
反向映射恰好相反,想根据已分配的物理页找到该映射到该物理页上的所有用户进程,该操作主要用于页面回收,当内存不足时,回收一个页面就需要找到映射到该页面的所有用户进程,修改进程页表的映射信息,防止出现非法访问。最简单找到该页面被哪些进程所映射的方式,是通过遍历所有的进程的页表,然后遍历每个页表项,检查是否映射到该页面上,但这种方式无疑是最耗时的,所以才有了后面的反向映射机制。原创 2023-12-02 22:04:52 · 1259 阅读 · 0 评论 -
ftrace和tracepoint简单使用
tracepoint是预先在函数的插入点中插桩,当执行到函数的插入点,则执行插桩函数,进而触发与插入点预先绑定的probe函数,probe函数可以是一个或者多个,probe函数可以定义为任意的行为,从而可以起到对函数内部观测的作用。如今 ftrace 已经成为一个 framework,采用 plugin 的方式支持开发人员添加更多种类的 trace 功能。ftrace 的作用是帮助开发人员了解 Linux 内核的运行时行为,以便进行故障调试或性能分析。...原创 2022-08-12 23:36:43 · 1024 阅读 · 0 评论 -
Qemu 调试 Linux 内核
1. 开启 Linux 内核调试编译选项make menuconfig2. 设置 qemu 启动脚本参数增加 -S -s 命令:sudo qemu-system-x86_64 \ -S -s \ -m 1024M \ -kernel ../linux/arch/x86/boot/bzImage \ -nographic \ -append "root=/dev/ram0 console=ttyS0 init=/linuxrc"原创 2021-11-07 17:36:36 · 1345 阅读 · 0 评论 -
Linux 编写简单驱动并测试
字符驱动编写1. 编写一个字符驱动在 driver/char/ 目录下新建一个 hello_dev.c 文件,用来编写一个字符驱动代码如下:#include <linux/module.h>#include <linux/moduleparam.h>#include <linux/cdev.h>#include <linux/fs.h>#include <linux/wait.h>#include <linux/poll.h原创 2021-11-07 16:32:49 · 1641 阅读 · 0 评论 -
Busybox 安装
下载busybox-1.34.1.tar.bz2源代码https://busybox.net/downloads/通过这个网址下载busybox-1.34.1.tar.bz2源代码压缩包解压tar -jxvf busybox-1.34.1.tar.bz2将压缩包进行解压配置make menuconfig选中Settings->Build static binary (no shared libs)项,保存退出安装make && make install结果原创 2021-10-24 19:52:03 · 885 阅读 · 0 评论 -
Linux 内核镜像编译(包括编译环境配置)
1. Linux 内核源代码下载https://www.kernel.org/直接点击下载就好了,会得到 linux-xxx.tar.xz 源代码压缩包2. 解压sudo xz -d linux-5.14.14.tar.xztar xvf linux-5.14.14.tar使用上述命令,解压得到源代码3. 配置编译环境sudo apt install gccsudo apt-get install pkg-configsudo apt-get install flexsudo apt原创 2021-10-24 19:11:11 · 1158 阅读 · 0 评论