
Linux内核
stormbjm
这个作者很懒,什么都没留下…
展开
-
内核地址空间分布和进程地址空间
内核地址空间分布直接映射区:线性空间中从3G开始最大896M的区间,为直接内存映射区,该区域的线性地址和物理地址存在线性转换关系:线性地址=3G+物理地址。动态内存映射区:该区域由内核函数vmalloc来分配,特点是:线性空间连续,但是对应的物理空间不一定连续。vmalloc分配的线性地址所对应的物理页可能处于低端内存,也可能处于高端内存。永久内存映射区:该区域可访转载 2013-04-27 11:08:49 · 1021 阅读 · 0 评论 -
伙伴算法
Linux内核通过伙伴算法来管理物理内存。伙伴系统(Buddy System)在理论上是非常简单的内存分配算法。它的用途主要是尽可能减少外部碎片,同时允许快速分配与回收物理页面。为了减少外部碎片,连续的空闲页面,根据空闲块(由连续的空闲页面组成)大小,组织成不同的链表(或者orders)。这样所有的2个页面大小的空闲块在一个链表中,4个页面大小的空闲块在另外一个链表中,以此类推。注转载 2013-04-27 17:29:50 · 1274 阅读 · 0 评论 -
主存与Cache的地址映射
主存与Cache的地址映射 由于Cache比主存小的多,因此必须使用一种机制将主存地址定位到Cache中,即地址映射。这个映射过程全部由硬件实现,对程序员透明。 1. 地址映射方法: 采用查表法(用专用快速硬件实现表格) 表中内容:映射的Cache地址、标记(命中判断)、有效位 2. 的三种方式:转载 2013-05-20 22:25:35 · 5002 阅读 · 0 评论 -
linux 双链表实现
链表是一种重要的数据结构,应用的非常广泛。链表分为单向链表与双向链表,一般的实现就是在结构体中内嵌指向下一个元素的指针。例如:[cpp] view plaincopystruct name { int num; ...; struct name *next; struct name *prev;转载 2013-10-08 23:42:41 · 1776 阅读 · 0 评论 -
Apache中的环形链表
5.1环型链表概述 Apache中很多地方都使用到了环形链表的数据结构,比如存储段组中就是使用环形链表保存所有的存储段数据。为了能够简化对该环形链表的操作,Apache中定义了一系列的宏来方便对链表的操作。因此在继续分析存储段之间的关系之前,我们首先来看一下Apache中环形结构的实现。Apache中环形结构的实现采用了大量的宏,其实现参考了4.4FreeBSD中队列转载 2013-10-08 23:44:26 · 998 阅读 · 0 评论