我们在文章中首先让大家了解下Unix操作系统中数据结构分析的知识,以后在进一步的讲解Unix操作系统的知识。希望对大家对Unix操作系统的学习有所帮助。
1缓冲部首:
Unix操作系统为每个缓冲提供了一个缓冲控制块,称缓冲部首。其中保留对应缓冲的地址,对应的设备名,使用情况等定义为charbuffers[NBUF][514];(NBF=15)
缓冲部首说明如下:
- struct buf
- { int b_flags ; //标志字位串
- struct buf*b_forw; //设备(b)链向前指针
- struct buf*b_back; //设备(b)链向后指针
- struct buf*av_forw; //空闲(av)链向前指针
- struct buf*av_back; //空闲(av)链向后指针
- int b_dev; //设备名
- int b-wcount; //传送字数(二进制补码)
- char * b_addr; //内存地址低16位
- char * b_xmem; //内存地址高16位
- char * b_blkno; //设备上的物理块号
- char * b_error; //返回I/0出错信息
- char * b_resid; //因出错而未传送的剩余字数
- } buf[NBUF];
为了有效地管理这些缓冲,对应的缓冲部首连人到两个双向链中,一个是设备链,或简称b链,它把一类设备所用的所有缓冲连接起来。另一个是空闲链,或简称av链,它把Unix操作系统中所有未用的缓冲连接起来,包括已属于某设备的b链中的缓冲。
2设备名:
- struct{ char d_minor (次设备号)
- char d_major (主设备号)
- };
设备名的高字节存设备类型号d_major,也叫设备号,表示某一类设备,同类设备使用相同的驱动程序,低字节存设备号d_minor,也叫次设备号,表示某类设备的第几台设备。
3块设备表:含有该类设备的状态信息、IO队列头尾指针和上面提到的该类设备的b链头尾指针。
设备表说明如下:
- struct devtab
- { char d_active; //忙闲标志
- char d_errent; //出错重试次数
- struct *buf b_forw; //b链链头指针向前指针
- struct *buf b_back; //b链链头指针向后指针
- struct *buf d_actf; //IO队列头指针
- struct *buf d_act1; //IO队列尾指针
- };
4块设备开关:每类设备自己的管理程序
- struct bdevsw
- { int (*d_open) ( ); //打开子程序入口地址
- int (*d_close) ( ); //关闭子程序入口地址
- int (*d_strategy) ( ); //启动子程序入口地址
- int *d_tab //对应设备表地址(devtab)
- } bdevsw;
5bfreelist:是av链的链头,
用了buf中的四个指针。但b_forw和b_back指向的b链不与任何设备相连系。
swbuf:专门用于程序对换。
rrkbuf:专门用于原始磁盘操作。
这样,我们对Unix操作系统的数据结构分析的知识就到这里了。谢谢大家的阅读。
【编辑推荐】