code:rkaddr - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- 将 缓存块管理结构 struct buf中的磁盘地址 转换为 RKDA寄存器 的地址形式
- 共传入一个参数:bp
- bp :缓存块管理结构,类型为struct buf
5419
5420 rkaddr(bp)
5421 struct buf *bp;
5422 {
5423 register struct buf *p;
5424 register int b;
5425 int d, m;
5426
5427 p = bp;
5428 b = p->b_blkno;
5429 m = p->b_dev.d_minor - 7;
5430 if(m <= 0)
5431 d = p->b_dev.d_minor;
5432 else {
5433 d = lrem(b, m);
5434 b = ldiv(b, m);
5435 }
5436 return(d<<13 | (b/12)<<4 | b%12);
5437 }
- b为块号
- d为从设备号
- d<<13 将 从设备号置于 13-15位
- b%12 为 扇区地址/块地址,置于0-3位
- b/12 为 磁道地址(1磁道 = 12扇区/块),置于4-12位
- b/12的末位为0,则在0面
- b/12的末位为1,则在1面
- 所以4位也指示面号
- 参考 RKDA寄存器
5438 /* ------------------------- */