内核
文章平均质量分 70
内核学习笔记
胡萝卜1号
一个屎肥宅的学习笔记
展开
-
[Linux][内核学习笔记]--匿名页面缺页中断
1 简介 在缺页中断处理中,匿名页面处理的核心函数是 do_anonymous_page() , 其代码实现在 mm/memory.c 中。在Linux内核中没有关联到文件映射的页面称为匿名映射——Anonymous Page , 简称 anon page。2 源码解析static vm_fault_t do_anonymous_page(struct vm_fault *vmf){ struct vm_area_struct *vma = vmf->vma; struct mem_cgr原创 2022-04-24 23:44:12 · 660 阅读 · 0 评论 -
[Linux][内核学习笔记]--缺页中断
汇编阶段 当程序访问的虚拟页面没有进行过物理页面的映射时,会通过发生缺页中断来分配和映射物理页面。发生缺页中断时,处理器会跳转到异常向量表 Data abort 向量中开始执行缺页中断的汇编阶段,这个阶段与处理器架构紧密联系,例如对于ARMv7-A架构,汇编处理流程为:__vectors_start -> vector_dabt -> __dabt_usr/__dabt_svc -> dabt_helper -> v7_early_abort 。 从缺页中断的汇编处理流程可以看到原创 2022-04-24 18:25:57 · 2284 阅读 · 0 评论 -
[Linux][内核学习笔记]--mmap
1 简介 mmap/munmap是用户空间最常用的一个系统调用接口,常用于在用户程序中分配内存、读写文件、链接动态库文件、多进程间共享内存。2 函数原型void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);int munmap(void *start, size_t length)2.1 参数说明addr :用于指定映射到进程地址空间的起始地址,为了程序的可移植性,一般设置为NULL,让内原创 2022-04-19 23:53:48 · 556 阅读 · 0 评论 -
[Linux][内核学习笔记]--VMA操作
进程地址空间在内核中用VMA抽象描述,VMA离散分布在3G(32位)的用户空间中,内核中提供相应的API来管理VMA,总结如下:查找VMAstruct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)struct vm_area_struct *find_vma_prev(struct mm_struct *mm, unsigned long addr,struct vm_area_struct **pprev原创 2022-04-17 17:28:58 · 318 阅读 · 0 评论 -
[Linux][内核学习笔记]--vmalloc
vmalloc代码逻辑分析:原创 2022-04-16 14:01:24 · 274 阅读 · 0 评论 -
[Linux][内核学习笔记]--kmalloc
文章目录简介函数原型简介 kmalloc通常用于内核中分配以字节为单位的小块内存,它的底层实现是slab机制,因此分配的内存在物理上是连续的。类似伙伴系统,它按照内存块的2order来创建多个slab描述符,例如16B、32B、64B、128B、···、32MB等大小,对应的slab描述符的名称分别是kmalloc_16、kmalloc_32、kmalloc_64····等,这在系统启动时,由create_kmalloc_caches()函数来完成。函数原型static __always_inlin原创 2022-04-11 21:33:10 · 605 阅读 · 0 评论 -
[Linux][内核学习笔记]--slab分配器
1. 简介 slab分配器负责分配小于页的内存块,例如以Byte为单位的内存块。我们知道伙伴系统的分配单位是页,slab分配器则在伙伴系统分配的页面上实现自己的算法,专门用于满足小块内存的分配需求。2. slab描述符(高速缓存) struct kmem_cache 是slab分配器的核心数据结构,称它为slab描述符(高速缓存),其在内核中的定义如下:struct kmem_cache { struct array_cache __percpu *cpu_cache;/* 1) Cache原创 2022-04-10 18:08:48 · 1926 阅读 · 0 评论 -
[Linux][内核学习笔记]--内核开发的特点
内核编程时既不能访问标准C库,也不能访问外部标准的C头文件 外部C库或其他的函数库对于内核来说大且低效,所以内核不支持链接外部函数。但内核提供了开发必备的大部分类似用户空间的标准C函数,在使用时包含相关的头文件即可。大部分头文件在源码根目录下的include/linux/下,在C文件中一般通过#include <linux/xxx.h>的方式包含进来。另外,与体系结构高度相关的头文件在arch/<architecture/include/asm>下,通过#include <.原创 2022-02-19 11:25:42 · 380 阅读 · 0 评论 -
[Linux][内核学习笔记]--内存管理
文章目录1.内存管理概览2.物理内存管理2.1 物理内存初始化流程2.2 zone2.3 zonelist2.4 fallbacks2.5 伙伴系统2.6 pg_data_t3. 虚拟空间管理3.1 进程虚拟地址空间3.2 虚拟地址空间布局3.2.1 内核空间3.2.2 用户空间3.2 描述用户空间的数据结构4. 内存管理机制4.1 地址映射(页表映射)4.1.1 页面高速缓存4.1.2 64位机器的页表映射5. 物理页面的分配5.1 gfp_mask标志5.2 常见的gfp_mask使用时机5.3 物理内原创 2022-04-03 16:11:40 · 1232 阅读 · 1 评论 -
[Linux][内核学习笔记]--CFS调度器
进程的状态转换 系统中的进程在调度程序schedule()的协调下按既定规则运转,保证每个进程尽可能公平地获得CPU运行时间。在单处理器系统中,同一时刻只能有一个进程占用CPU,由于CPU的运行速度很快,加上有调度程序的协调,肉眼看到所有进程在同时运行的假象。在多处理器系统中,同一时刻可以有多个进程在运行,具体由处理器个数决定。...原创 2022-03-13 19:50:07 · 1306 阅读 · 0 评论 -
[Linux][内核学习笔记]--进程管理
进程是什么? 进程是Linux系统抽象出来的,表示正在执行程序的实时结果。进程不等于程序,程序是静态地存储在磁盘上,而进程活动于操作系统中。多个进程有可能在执行同一份程序代码。进程除了包括程序代码外,还包括其他资源,像打开的文件、挂起的信号、内核数据、处理器状态、一个或多个具有内存映射的内存地址空间、一个或多个执行线程等。 线程是进程中的活动对象,一个进程对应多个线程。线程共享进程的部分资源,像代码段、数据段、堆、当前目录、用户ID、组ID、打开的文件描述符等,也独有资源,像栈、程序计数器、程序运行时用原创 2022-02-20 16:09:50 · 626 阅读 · 0 评论