发布时间:2014-12-10 13:30:08
kernel 3.10内核源码分析--slab原理及相关代码
1、基本原理
我们知道,Linux保护模式下,采用分页机制,内核中物理内存使用buddy system(伙伴系统)进行管理,管理的内存单元大小为一页,也就是说使用buddy system分配内存最少需要分配一页大小。那如果需要分配小于一页的内存该怎么办呢?
另一方面,内核中经常需要大量的数据结构(比如struct task_strcut),这些数据结构的频繁分配和释放对性能影响较大。
Slab正是用于解决上述的两个问题, Slab 分配器源于 Solaris 2.4 的分配算法,工作于buddy system之上,用于管理特定大小对象的缓存,提高小块内存或特定对象内存分配效率。
Slab的两个用途如前面所述:1、缓存和管理内核中经常使用的数据结构对象,内核中使用slab提供的专用的接口,可以实现数据结构对象的快速分配,大大减少相关开销,提升效率。2、缓存和管理小块内存,也称通用缓存,用于kmalloc的底层实现和支撑。......【阅读全文】
发布时间:2014-08-15 09:34:29
kernel 3.10代码分析--KVM相关--VCPU创建
1、基本原理
?如之前的文章分析,在KVM虚拟化环境中,硬件虚拟化使用VCPU(Virtual CPU)描述符来描述虚拟CPU,VCPU描述符与OS中进程描述符类似,本质是一个结构体,其中包含如下信息:
VCPU标识信息,如VCPU的ID号,VCPU属于哪个Guest等。
虚拟寄存器信息,在VT-x的环境中,这些信息包含在VMCS中。
VCPU状态信息,标识白VCPU当前所处的状态(睡眠、运行等),主要供调度器使用。
额外的寄存器/部件信息,主要指未包含在VMCS中的寄存器或CPU部件,比如:浮点寄存器和虚拟的LAPIC等。
其他信息:用户VMM进行优化或存储额外信息的字段,如:存放该VCPU私有数据的指针。
当VMM创建虚拟机时,首先要为虚拟机创建VCPU,整个虚拟机的运行实际上可以看做VMM调度不同的VCPU运行。
?虚拟机的VCPU通过ioctl VM指令KVM_CREATE_VCPU实现,本文简单分析VCPU创建过程,qemu-kvm用户态实现部分暂不包括。......【阅读全文】
发布时间:2014-08-09 22:38:47
点击(此处)折叠或打开/************************************************** * example5.c * Author: T-bagwell * * Compile:gcc -Wall example5.c -o example5 ******************************.........【阅读全文】
发布时间:2014-07-22 21:20:06
很久没更新了, 对不起访问我博客的网友们, I will be back.今天在论坛看到一篇有点意思的题目, 跟大家分享一下.cat fileclone=line1gb=line1gi=line1lib=line1gb=line2gi=line2lib=line2clone=line3gb=line3gi=line3lib=line3gb=line4gi=line4lib=line4期望结果(注意clone这一行可能会没有):lib=line1 .........【阅读全文】