code:binit - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki

Source

  • 进行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;

5073          brelse(bp);

  • 目的是将 该缓存 挂入自由队列
  • 5072 句不是很必要(引自 Lions源代码分析)
5074     }

5075     i = 0;

  • 以下循环遍历code:bdevsw块设备数组
  • bdp->d_open == 0 为数组结束条件
5076     for (bdp = bdevsw; bdp->d_open; bdp++) {

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;

  • 将 nblkdev 初始化为 块设备总数
5085 }

5086 /* ------------------------- */

Ref

Caller

⚠️ **GitHub.com Fallback** ⚠️