新闻资讯
Group news
青岛广盛源肥业有限公司    您的位置: 首页  >  新闻资讯  >  正文

Linux0.11-缓冲区初始化

2019年10月09日 文章来源:网络整理 热度:119℃ 作者:刘英

init/main.c部分代码

memory_end = (1 6*1024*1024) // 内存>6M 设置高速缓冲区大小2M

buffer_memory_end = 2*1024*1024;

else

buffer_memory_end = 1*1024*1024; //否则设置高速缓冲大小1M

main_memory_start = buffer_memory_end;

ifdef RAMDISK

main_memory_start += rd_init(main_memory_start, RAMDISK*1024);

endif

memory_end = (1 6*1024*1024)// 内存>6M 设置高速缓冲区大小2Mbuffer_memory_end = 2*1024*1024;elsebuffer_memory_end = 1*1024*1024;//否则设置高速缓冲大小1Mmain_memory_start = buffer_memory_end;#ifdef RAMDISKmain_memory_start += rd_init(main_memory_start, RAMDISK*1024);#endif

Linux0.11-缓冲区初始化

Linux0.11-缓冲区初始化

Linux0.11-缓冲区初始化

/fs/buffer.c中初始化函数buffer_init()

struct buffer_head *h = start_buffer;

void *b;

int i;

if (buffer_end == 1=h+1。

while ((b -= BLOCK_SIZE) >= ((void *) (h + 1)))

{

h->b_dev = 0; // 使用该缓冲区的设备号。

h->b_dirt = 0; // 脏标志,也即缓冲区修改标志。

h->b_count = 0; // 该缓冲区引用计数。

h->b_lock = 0; // 缓冲区锁定标志。

h->b_uptodate = 0; // 缓冲区更新标志(或称数据有效标志)。

h->b_wait = NULL; // 指向等待该缓冲区解锁的进程。

h->b_next = NULL; // 指向具有相同hash 值的下一个缓冲头。

h->b_prev = NULL; // 指向具有相同hash 值的前一个缓冲头。

h->b_data = (char *) b; // 指向对应缓冲区数据块(1024 字节)。

h->b_prev_free = h - 1; // 指向链表中前一项。

h->b_next_free = h + 1; // 指向链表中下一项。

h++; // h 指向下一新缓冲头位置。

NR_BUFFERS++; // 缓冲区块数累加。

if (b == (void *) 0x100000) // 如果地址b 递减到等于1MB,则跳过384KB,

b = (void *) 0xA0000; // 让b 指向地址0xA0000(640KB)处。

}

h--; // 让h 指向最后一个有效缓冲头。

free_list = start_buffer; // 让空闲链表头指向头一个缓冲区头。

free_list->b_prev_free = h; // 链表头的b_prev_free 指向前一项(即最后一项)。

h->b_next_free = free_list; // h 的下一项指针指向第一项,形成一个环链。

// 初始化hash 表(哈希表、散列表),置表中所有的指针为NULL。

for (i = 0; i < NR_HASH; i++)

hash_table[i] = NULL;

struct buffer_head *h = start_buffer;void *b;int i;if (buffer_end == 1=h+1。while ((b -= BLOCK_SIZE) >= ((void *) (h + 1))){h->b_dev = 0;// 使用该缓冲区的设备号。h->b_dirt = 0;// 脏标志,也即缓冲区修改标志。h->b_count = 0;// 该缓冲区引用计数。h->b_lock = 0;// 缓冲区锁定标志。h->b_uptodate = 0;// 缓冲区更新标志(或称数据有效标志)。h->b_wait = NULL;// 指向等待该缓冲区解锁的进程。h->b_next = NULL;// 指向具有相同hash 值的下一个缓冲头。h->b_prev = NULL;// 指向具有相同hash 值的前一个缓冲头。h->b_data = (char *) b;// 指向对应缓冲区数据块(1024 字节)。h->b_prev_free = h - 1;// 指向链表中前一项。h->b_next_free = h + 1;// 指向链表中下一项。h++;// h 指向下一新缓冲头位置。NR_BUFFERS++;// 缓冲区块数累加。if (b == (void *) 0x100000)// 如果地址b 递减到等于1MB,则跳过384KB,b = (void *) 0xA0000;// 让b 指向地址0xA0000(640KB)处。}h--;// 让h 指向最后一个有效缓冲头。free_list = start_buffer;// 让空闲链表头指向头一个缓冲区头。free_list->b_prev_free = h;// 链表头的b_prev_free 指向前一项(即最后一项)。h->b_next_free = free_list;// h 的下一项指针指向第一项,形成一个环链。// 初始化hash 表(哈希表、散列表),置表中所有的指针为NULL。for (i = 0; i < NR_HASH; i++)hash_table[i] = NULL;

 

上一篇:Embeded linux之移植iptables


下一篇:Linux下的系统性能调优工具——Perf

友情链接
Links