code:binit - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- 进行I/O块设备 及 缓存机构的初始化
5051
5052 /* Initialize the buffer I/O system by freeing
5053 * all buffers and setting all device buffer lists to empty.
5054 */
5055 binit()
5056 {
5057 register struct buf *bp;
5058 register struct devtab *dp;
5059 register int i;
5060 struct bdevsw *bdp;
5061
5062 bfreelist.b_forw = bfreelist.b_back =
5063 bfreelist.av_forw = bfreelist.av_back = &bfreelist;
5064 for (i=0; i<NBUF; i++) {
5065 bp = &buf[i];
5066 bp->b_dev = -1;
5067 bp->b_addr = buffers[i];
5068 bp->b_back = &bfreelist;
5069 bp->b_forw = bfreelist.b_forw;
5070 bfreelist.b_forw->b_back = bp;
5071 bfreelist.b_forw = bp;
5072 bp->b_flags = B_BUSY;
- 初始化 缓存管理结构
- 将 该缓存 挂入NODEV设备队列
5073 brelse(bp);
5074 }
- 目的是将 该缓存 挂入自由队列
- 5072 句不是很必要(引自 Lions源代码分析)
5075 i = 0;
5076 for (bdp = bdevsw; bdp->d_open; bdp++) {
- 以下循环遍历code:bdevsw块设备数组
- bdp->d_open == 0 为数组结束条件
5077 dp = bdp->d_tab;
5078 if(dp) {
5079 dp->b_forw = dp;
5080 dp->b_back = dp;
5081 }
5082 i++;
- 将每个块设备的设备队列清空
5083 }
5084 nblkdev = i;
5085 }
- 将 nblkdev 初始化为 块设备总数
5086 /* ------------------------- */