main.c 流程-buffer初始化

本文详细介绍了voidbuffer_init(longbuffer_end)函数的工作原理及其在内存管理中的应用。通过具体实例展示了缓存区的组织结构,包括缓存头部和缓存块的分配情况。此外,还深入解析了缓存头部结构buffer_head的各个字段含义及其如何使用环形双链表进行连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void buffer_init(long buffer_end)函数的理解:

 *   0         0x100000          0x400000                    0x10 00000(16M)
 *    ----------------------------------------------------------
 *   |   kernel  | memery buffer   |   main memory              |             
 *    ----------------------------------------------------------

以上图为例,该段主要初始化memery buffer部分,并且前地址地段储存缓存头部,高端储存缓存块(1K);

缓存头部struct buffer_head

 1 struct buffer_head {
 2     char * b_data;            /* pointer to data block (1024 bytes) */
 3     unsigned long b_blocknr;    /* block number */
 4     unsigned short b_dev;        /* device (0 = free) */
 5     unsigned char b_uptodate;
 6     unsigned char b_dirt;        /* 0-clean,1-dirty */
 7     unsigned char b_count;        /* users using this block */
 8     unsigned char b_lock;        /* 0 - ok, 1 -locked */
 9     struct task_struct * b_wait;
10     struct buffer_head * b_prev;
11     struct buffer_head * b_next;
12     struct buffer_head * b_prev_free;
13     struct buffer_head * b_next_free;
14 };

用环形双链表链接:

node0 <--->node1<--> ...... <-->noden<-->node0

 

转载于:https://www.cnblogs.com/qianzhilan/p/6091644.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值