会员
众包
新闻
博问
闪存
赞助商
HarmonyOS
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
penghan
博客园
首页
新随笔
联系
管理
上一页
1
2
3
4
下一页
2018年12月20日
slab分配object
摘要: 在numa架构下,slab分配object: 首先,调用____cache_alloc来分配,该函数实现如下: 1. 先从array cache里面去找,如果找到,返回,如果没找到,走到2. 2.调用cache_alloc_refill来从node的shared里去找object,或者slab的pa
阅读全文
posted @ 2018-12-20 15:02 penghan
阅读(606)
评论(0)
推荐(0)
2018年12月7日
ACCESS_ONCE的作用
摘要: 如果你看过 Linux 内核中的 RCU 的实现,你应该注意到了这个叫做 ACCESS_ONCE() 宏。 ACCESS_ONCE的定义如下: 仅从语法上讲,这似乎毫无意义,先取其地址,在通过指针取其值。而实际上不然,多了一个关键词 volatile,所以它的含义就是强制编译器每次使用 x 都从内存
阅读全文
posted @ 2018-12-07 17:57 penghan
阅读(1281)
评论(1)
推荐(1)
2018年9月18日
CFS理论模型
摘要: 参考资料:《调度器笔记》Kevin.Liu 《Linux kernel development》 《深入Linux内核架构》 version: 2.6.32.9 下文中对于红黑树或链表组织的就绪队列,统称为用队列组织的就绪队列。 linux中用struct rq将处于ready状态的进程组织在一起。
阅读全文
posted @ 2018-09-18 15:17 penghan
阅读(661)
评论(0)
推荐(0)
逆向映射的演进
摘要: 在此向郭大侠致敬。 一、前言 数学大师陈省身有一句话是这样说的:了解历史的变化是了解这门学科的一个步骤。今天,我把这句话应用到一个具体的Linux模块:了解逆向映射的最好的方法是了解它的历史。本文介绍了Linux内核中的逆向映射机制如何从无到有,如何从笨重到轻盈的历史过程,通过这些历史的演进过程,希
阅读全文
posted @ 2018-09-18 15:10 penghan
阅读(399)
评论(0)
推荐(0)
slub
摘要: 1.前言 在Linux中,伙伴系统(buddy system)是以页为单位管理和分配内存。但是现实的需求却以字节为单位,假如我们需要申请20Bytes,总不能分配一页吧!那岂不是严重浪费内存。那么该如何分配呢?slab分配器就应运而生了,专为小内存分配而生。slab分配器分配内存以Byte为单位。但
阅读全文
posted @ 2018-09-18 14:50 penghan
阅读(1053)
评论(0)
推荐(0)
2017年4月13日
初始化EPT
摘要: 上面是一些页表的结构体,下面是初始化ept页表。每个页大小为2MB. 对创建的EPT页表做测试。 线性区的页相关的那些标志。它们存放在vm_area_struct描述符的vm_flags字段中。一些标志给内核提供有关这个线性区全部页的信息,例如它们包含有什么内容,进程访问每个页的权限是什么。 另外的
阅读全文
posted @ 2017-04-13 17:31 penghan
阅读(930)
评论(0)
推荐(0)
2017年3月6日
通过二级指针删除链表节点看链表本质
摘要: 在大多数情况下,会用到链表,但是一直都没有仔细深究过,今天抽点时间做了个实验。 在看内核源码时,会发现使用二级指针插入或删除节点的情况,比如在字符设备里面的__register_chrdev_region及在notifier_chain_register里面。如下: 当找到要插入的地方(*cp),其
阅读全文
posted @ 2017-03-06 16:09 penghan
阅读(902)
评论(0)
推荐(1)
2017年3月3日
中断中不能睡眠的原因
摘要: 中断 调度
阅读全文
posted @ 2017-03-03 11:47 penghan
阅读(2410)
评论(0)
推荐(2)
x86_64的内存映射
摘要: 对于x86_64来说,逻辑地址由16位选择子和64位偏移量组成(而32位时,逻辑地址由16位段选择符和32位偏移量组成),段寄存器仅仅存放选择子。CPU的分段单元(SU)执行以下操作:[1] 先检查选择子的TI字段,以决定描述子对应的描述子保存在哪一个描述符表中。TI字段指明描述子是在GDT中(在这
阅读全文
posted @ 2017-03-03 09:23 penghan
阅读(2015)
评论(1)
推荐(0)
2017年2月17日
module_init解析及内核initcall的初始化顺序
摘要: module_init这个函数对做驱动的人来说肯定很熟悉,这篇文章用来跟一下这个函数的实现。 在include/linux/init.h里面有module_init的定义,自然,因为一个module可以在内核启动时自动加载进内核,也可以由我们手动在需要时加载进内核,基于这种场景,内核使用了MODUL
阅读全文
posted @ 2017-02-17 15:58 penghan
阅读(14176)
评论(1)
推荐(2)
上一页
1
2
3
4
下一页
公告