摘要: 内核的函数以直接了当的方式获得动态内存:__get_free_pages()或alloc_pages()从分区页框中获得页框; kmem_cache_alloc()或kmalloc()使用slab分配器为专用或通用对象分配块。而vmalloc()或vmalloc32()获得一个非连续的内存区。这些函 阅读全文
posted @ 2022-05-21 15:27 老胡同学 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 页描述符 内核必须记录每个页框的当前状态。所有的页描述符放在mem_map数组中。因为描述符长度是32字节, 所以mem_map所需的空间略小于整个RAM的1%. 非一致内存访问(NUMA) 这种模型中,给定CPU对不同内存单元的访问时间可能不一样。 请求和释放页框 alloc_pages(gfp_ 阅读全文
posted @ 2022-05-16 20:09 老胡同学 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 硬件中的分页 为了效率,线性地址被分为固定长度的组,成为”页“,页内连续的线性地址被映射到连续的物理地址。这样,内核可以指定一个页的物理地址和其存取权限。把线性地址映射到物理地址的数据结构被称为”页表“,页表在主存中。 386开始,页为4kb directory:最高10位,Table(页表):中间 阅读全文
posted @ 2022-05-16 17:35 老胡同学 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 地址类型 用户虚拟地址: 这时在用户空间程序能看到的常规地址,32或64位,每个进程都有自己的虚拟地址空间。 物理地址“ 该地址在处理器和系统内存之间使用,物理地址是32位或64位。 总线地址: 该地址在外围总线和内存之间使用,通常和处理器使用的物理地址相同。 内核逻辑地址: 内核逻辑地址组成了内核 阅读全文
posted @ 2022-05-15 17:13 老胡同学 阅读(260) 评论(0) 推荐(0) 编辑
摘要: I/O端口和I/O内存 一些CPU厂商在它们的芯片中使用单一的地址空间,而另一些为外设保留了独立的地址空间。 一些处理器还为I/O端口的读写提供了独立的线路,并且使用特殊的CPU指令端口。 也就是说,对一些CPU来说,访问内存和外设需要不同的指令和地址空间。 但是也有使用统一地址空间,把外设地址映射 阅读全文
posted @ 2022-05-13 16:14 老胡同学 阅读(107) 评论(0) 推荐(0) 编辑
摘要: kmalloc() 除非被阻塞,函数运行的很快; 不会对所申请的内存空间清零,也就是说仍然保持原有数据; 分配的区域在物理内存是连续的; void *kmalloc(size_t size, int flag); flag有很多可选符合,常用的有GFP_KERENL,GFP_ATOMIC GFP_K 阅读全文
posted @ 2022-05-13 14:51 老胡同学 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 最近有遇到一个api: #define ROUNDUP(a,b) (((a) + ((b) - 1)) & ~((b)-1)) #define ROUNDDOWN(a,b) (((a) + & ~((b)-1)) #define ALIGN(a,b) ROUNDUP(a,b) ALIGN其实用的就是 阅读全文
posted @ 2022-05-06 10:48 老胡同学 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 1.ioctl 2.sleep 进程睡眠是指进程从运行队列中被移除,并且在CPU上被执行。 关于睡眠有几点需要注意 不要在原子操作的上下文中睡眠,比如spinlock,seqlock,rcu lock;spinlock因为需要不停的确认锁的状态,一旦睡眠,就没有办法获取锁的状态信息,也就不能再醒来; 阅读全文
posted @ 2022-04-27 11:05 老胡同学 阅读(24) 评论(0) 推荐(0) 编辑
摘要: 并发与竞争 1.竞争情况的原因是来自对资源的共享存取的结果。加锁的目的在于,代码在任何时刻只会被一个进程所执行。 2.linux信号量 为了使用semaphore内核代码必须包含头文件<asm/semaphore.h> /* Please don't access any members of th 阅读全文
posted @ 2022-04-26 18:58 老胡同学 阅读(28) 评论(0) 推荐(0) 编辑
摘要: ctags –R 建立ctags database,使用前必做; Ctrl + ] (跳转到定义处) = :ta xxx; Ctrl + T (退回至跳转前); ta x (跳转到符号x的定义处,如果有多个符号,直接跳转到第一处 :ts x (列出符号x的定义) :tj x (可以看做上面两个命令的 阅读全文
posted @ 2022-04-14 09:59 老胡同学 阅读(77) 评论(0) 推荐(0) 编辑