Π ΠΈΡ. 4.7. ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
ΠΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ
ΠΠΈΡΠΊΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈΠ»ΠΈ inode, Π³Π΄Π΅ Ρ ΡΠ°Π½ΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΅Π³ΠΎ Π΄Π°Π½Π½ΡΠΌ. ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° DOS, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ»Π° ΠΈ Π΅Π³ΠΎ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΠΏΡΠΈΠ½ΡΡΡΡ Π² UNIX. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»Π° Π² Π²ΠΈΠ΄Π΅, ΡΡ ΠΎΠ΄Π½ΠΎΠΌ Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΠΉ UNIX. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ vnode (ΠΎΡ virtual inode β Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ).
ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π² 1984 Π³ΠΎΠ΄Ρ ΡΠΈΡΠΌΠΎΠΉ Sun Microsystems Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΉ ΡΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ², Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Ρ NFS ΠΈ ufs (FFS). Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ Π² SVR4, Ρ ΠΎΡΡ ΡΡΠ΄ Π΄ΡΡΠ³ΠΈΡ Π²Π΅ΡΡΠΈΠΉ UNIX ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠ°Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° SCO UNIX).
ΠΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ Π²ΡΠ΅Ρ Π°ΠΊΡΠΈΠ²Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² (ΡΠ°ΠΉΠ»ΠΎΠ², Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ»Π°ΡΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ Π² Π²ΠΈΠ΄Π΅ in-core inode, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΡΠΎΡΡΡ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π²ΡΡΡΡΠΏΠ°ΡΡ vnode. Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ vnode ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π° Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ², Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΈΠΏΠ° ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, Π³Π΄Π΅ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΡΠ°ΠΉΠ». ΠΠ°Π½Π½ΡΠ΅ vnode ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΡΠ°ΠΉΠ»Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠΈΠΏ ΡΠ°ΠΉΠ»Π°.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠΎΠ»Ρ vnode ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΡΠ°Π±Π». 4.1.
Π’Π°Π±Π»ΠΈΡΠ° 4.1. ΠΠΎΠ»Ρ vnode
ΠΠΎΠ»Π΅ ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ u_short vflag Π€Π»Π°Π³ΠΈ vnode u_short v_count Π§ΠΈΡΠ»ΠΎ ΡΡΡΠ»ΠΎΠΊ Π½Π° vnode struct filock *v_filocks ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠ»Π° struct vfs *v_vfsmountedhere Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, Π΅ΡΠ»ΠΈ vnode ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΠΊΠΎΠΉ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ struct vfs *v_vfsp Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΠΉΠ» enum vtype v_type Π’ΠΈΠΏ vnode: ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ²ΡΠ·Ρ, ΡΠΎΠΊΠ΅Ρ caddr_t v_data Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π΄Π°Π½Π½ΡΠ΅, ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ struct op ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ vnodeΠΠ°ΠΆΠ΄ΡΠΉ vnode ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΈΡΠ»ΠΎ ΡΡΡΠ»ΠΎΠΊ v_count, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π° ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈ Π΅Π³ΠΎ Π·Π°ΠΊΡΡΡΠΈΠΈ. ΠΠΎΠ³Π΄Π° ΡΠΈΡΠ»ΠΎ ΡΡΡΠ»ΠΎΠΊ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ°Π²Π½ΡΠΌ Π½ΡΠ»Ρ, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ vn_inactive(), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΡΠΎ Π½Π° vnode Π½ΠΈΠΊΡΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΡΠ»Π°Π΅ΡΡΡ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ vnode (ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΅ΠΌΡ inode) ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΅Π³ΠΎ Π² ΠΊΡΡ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΎΠ»Π΅ v_vfsp ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ (ΡΡΡΡΠΊΡΡΡΡ vfs, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅), Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ ΡΠ°ΠΉΠ», Π°Π΄ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΡΠΉ Π΄Π°Π½Π½ΡΠΌ vnode. ΠΡΠ»ΠΈ vnode ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΠΊΠΎΠΉ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎ ΠΏΠΎΠ»Π΅ v_vfsmountednere ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, "ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΡΡ" Π΄Π°Π½Π½ΡΠΉ vnode.
ΠΠΎΠ»Π΅ v_data ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π΄Π°Π½Π½ΡΠ΅, ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ufs, v_data ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π·Π°ΠΏΠΈΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ in-core inode.
ΠΠ°Π±ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ vnode ΡΠΊΠ°Π·Π°Π½ ΠΏΠΎΠ»Π΅ΠΌ v_op. Π ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΡ Π½Π°Π±ΠΎΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡΠ° vnode. ΠΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° ΡΠ»ΡΠ·ΠΎΠΌ ΠΊ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΎΠ±ΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ Π² ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΠΏΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ Π²ΡΠ·ΠΎΠ²Π°ΠΌ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΡΠ°Π±Π». 4.2.
Π’Π°Π±Π»ΠΈΡΠ° 4.2. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ vnode Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
int (*vn_open)() ΠΡΠΊΡΡΡΡ vnode. ΠΡΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»ΠΎΠ½Π° (ΡΠ°Π·ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅), ΡΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ Π½ΠΎΠ²ΡΠΉ vnode. ΠΠ±ΡΡΠ½ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½Ρ Π΄Π»Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΡΡΠΎΠΉΡΡΠ². int (*vn_close)() ΠΠ°ΠΊΡΡΡΡ vnode. int (*vn_read)() Π§ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»Π°, Π°Π΄ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ vnode. int (*vn_write)() ΠΠ°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ», Π°Π΄ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΡΠΉ vnode. int (*vn_ioctl)() ΠΠ°Π΄Π°Π½ΠΈΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. int (*vn_getaddr)() ΠΠΎΠ»ΡΡΠΈΡΡ Π°ΡΡΠΈΠ±ΡΡΡ vnode: ΡΠΈΠΏ vnode, ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°, Π²Π»Π°Π΄Π΅Π»Π΅Ρ-ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π²Π»Π°Π΄Π΅Π»Π΅Ρ-Π³ΡΡΠΏΠΏΠ°, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, Π½ΠΎΠΌΠ΅Ρ inode, ΡΠΈΡΠ»ΠΎ ΡΠ²ΡΠ·Π΅ΠΉ, ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π°, ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π±Π»ΠΎΠΊΠ° Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π΄ΠΎΡΡΡΠΏΠ°, Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ vnode, ΡΠΈΡΠ»ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡΡ Π±Π»ΠΎΠΊΠΎΠ². int (*vn_setaddr)() Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π°ΡΡΠΈΠ±ΡΡΡ vnode. ΠΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ UID, GID, ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. int (*vn_access)() ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΉΠ»Ρ, Π°Π΄ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ vnode. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΡΠ°ΠΉΠ»ΠΎΠ² UNIX ΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, DOS). int (*vn_lookup)() ΠΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΅ΠΌΡ vnode. int (*vn_create)() Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΅ΠΌΡ vnode. int (*vn_remove)() Π£Π΄Π°Π»ΠΈΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ vnode ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅. int (*vn_link)() Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΆΠ΅ΡΡΠΊΡΡ ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ°ΠΉΠ»Π° ΠΈ vnode. int (*vn_mkdir)() Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ vnode ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅. int (*vn_rmdir)() Π£Π΄Π°Π»ΠΈΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³. int (*vn_readdir)() Π‘ΡΠΈΡΠ°ΡΡ Π·Π°ΠΏΠΈΡΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°, Π°Π΄ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ vnode. int (*vn_symlink)() Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΡΡ ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΎΠ²ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ°ΠΉΠ»Π°, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ vnode ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅. int (*vn_readlink)() Π§ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° β ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΈ. int (*vn_fsync)() Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° β Π·Π°ΠΏΠΈΡΠ°ΡΡ Π²ΡΠ΅ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. int (*vn_inactive)() Π Π°Π·ΡΠ΅ΡΠΈΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ vnode, Ρ.ΠΊ. ΡΠΈΡΠ»ΠΎ ΡΡΡΠ»ΠΎΠΊ Π½Π° vnode ΠΈΠ· Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°Π»ΠΎ ΡΠ°Π²Π½ΡΠΌ Π½ΡΠ»Ρ.ΠΠ·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°ΠΌΠΈ (vnode) ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π° ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° ΡΠΈΡ. 4.8.
Π ΠΈΡ. 4.8. ΠΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
ΠΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡΡΠΎΡΡΡΡΡ ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π° Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π΅ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ.
Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠ΄ΡΠΎ ΡΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅, ΠΎΡΠΊΡΡΡΠΈΠ΅, ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ». ΠΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΠ»Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΠ°ΠΆΠ΄Π°Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½Π°Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π½Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΡΠΊΡΡΡΡ vfs, Π°Π½Π°Π»ΠΎΠ³Π΅ Π·Π°ΠΏΠΈΡΠΈ ΡΠ°Π±Π»ΠΈΡΡ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π‘ΡΡΡΠΊΡΡΡΡ vfs Π²ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΡΠ²ΡΠ·Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°, Π² ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ. ΠΠ΅ΡΠ²ΠΎΠΉ Π·Π°ΠΏΠΈΡΡΡ ΡΠΏΠΈΡΠΊΠ° Π²ΡΠ΅Π³Π΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΡΠ½Π΅Π²Π°Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°. Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ, ΡΠΏΠΈΡΠΎΠΊ vfs ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΡΡΠΎΡΠ²ΡΠΈΠΌΡΡ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠΌ β ΡΠ°Π±Π»ΠΈΡΠ° ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΠ»Ρ ΡΡΡΡΠΊΡΡΡΡ vfs ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΡΠ°Π±Π». 4.3.