Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIXΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 95

Автор РобачСвский АндрСй ΠœΠΈΡ…Π°ΠΉΠ»ΠΎΠ²ΠΈΡ‡

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ поля 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.