我們在文章中首先讓大家了解下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操作系統的數據結構分析的知識就到這裡了。謝謝大家的閱讀。