next up previous contents
Next: Najpopularniejsze systemy plików dostępne Up: Niezależność od systemu plików Previous: File System Switch   Spis rzeczy

Subsections

VFS

Sun VFS/vnode

Architektura

Po raz pierwszy idea vnode'ów została przedstawiona publicznie w artykule Steve'a Kleimana ,,Vnodes: An Architecture for Multiple System Types in Sun UNIX''. Zakładano realizację czterech celów: Zaproponowano dwa interfejsy pomiędzy warstwą niezależną i zależną od systemu plików: vfsops z operacjami na systemie plików i vnops z operacjami na poszczególnych plikach. Ponieważ obsługiwane miały być też systemy plików nie mające nic wspólnego z UNIXem i/lub dyskami in-core inode nie mógł dalej pełnić swojej funkcji. Jego miejsce zajął vnode. Nowa struktura zawierała wszystko potrzebne warstwie niezależnej, a jednocześnie pozwalała przechowywać połączenia z charakterystycznymi dla systemu plików danymi (inode'ami, rnode'ami itp.). Pola struktury vnode to: Jeżeli system plików nie ma UNIXowego interfejsu to odpowiednie pola vnodeops są ustawiane na fs_nosys. Funkcja ta zwraca w wypadku wywołania ENOSYS.

Struktura vfs

Zamontowane systemy plików przechowane są w postaci listy struktur vfs. Podobnie jak vnode vfs jest niezależny od systemu plików. Jedynie pole vfs_data może być użyte do przechowania dowiązania do danych charakterystycznych dla systemu plików. Z każdym systemem plików związana jest struktura vfsops zawierająca operacje, które mogą być na nim wykonywane. Dowiązanie do tej struktury znajduje się w polu vfs_op z vfs. Dostępne są następujące operacje:

Operacje na plikach

Wszystkie operacje, które można przeprowadzić na plikach zdefiniowane są w strukturze vnodeops. Są to następujące funkcje: Jeżeli system plików nie obsługuje operacji to pole powinno być ustawione na fs_nosys(), która zwraca ENOSYS. Operacje wywoływane są przez makra np.:
#define VOP_INACTIVE(vp, cr) \
  (*(vp)->v_op->vop_inactive)(vp, cr)

SVR4 VFS/vnode

Architektura

SVR4 powstał w wyniku połączenia SVR3 i SunOS. Jednym z celów projektu było połączenie interfejsu VFS/vnode z opracowanym przez AT&T File System Switch. Pojawiła się więc tablica budowana dynamicznie w czasie kompilacji jądra virtual system switch table podpięta pod vfssw[] zawierająca pozycję dla każdego systemu plików, z którym jądro mogło współpracować. Elementami tablicy są struktury vfssw:
struct vfssw {
  char *vsw_name; /* nazwa systemu plików */
  int (*vsw_init)(); /* funkcja wywoływana w czasie inicjalizacji jądra */
  struct vfsops *vsw_vfops;
}
Operacje, które można wykonać na systemie plików przechowane są zarówno w vsw_vfops i w polu vfs_ops struktury vfs:

Vnode i operacje na plikach

Vnode'y uległy małym modyfikacjom. Usunięte zostały pola v_shlockcv_exlockc. Dodano następujące pola: Większych zmian dokonano w vnodeops. Usunięto operacje: vop_bmap(), vop_bread(), vop_brelse(), vop_strategy(), vop_rdwr() i vop_select(). Dodano następujące operacje: Podobnie jak poprzednio operacje są dostępne poprzez makra.

BSD

Architektura

Ważną zmianą była modyfikacja operacji namei(), która w BSD korzysta z następującej struktury danych (nie korzysta z danych ustawionych przez wcześniejsze wywołanie w jądrze namei()):
struct nameidata {
  caddr_t ni_dirp          /* dowiązanie do ścieżki */
  enum uio_seg ni_seg;     /* lokalizacja ścieżki */
  short ni_nameiop;        /* operacja do wykonania */
  struct vnode *ni_cdir;   /* aktualny katalog roboczy */
  struct vnode *ni_rdir;   /* główny katalog */
  struct ucred *ni_cred;   /* dane związane z wywołującym */
  caddr_t ni_pnbuf;        /* bufor nazwy ścieżki */
  char *ni_ptr;            /* aktualna pozycja w nazwie ścieżki */
  int ni_pathlen;          /* ilość znaków pozostała w nazwie ścieżki */
  short ni_more;           /* flaga informująca czy pozostało coś do przekształcenia */
  short ni_loopcnt;        /* liczba odnalezionych symbolicznych dowiązań */
  struct vnode *nivp       /* zwracany vnode */
  struct vnode *nidvp      /* vnode nadkatalogu */
}
Operacje, które można wykonać (ni_nameiop) to:

VFS i vnode

Większość struktur pozostała taka sama jak w Sun VFS (dokonano bardzo małych modyfikacji). Struktura vfs zyskała pole vfs_bsize (optymalny rozmiar bloku), do statfs dodano f_bsize, natomiast vnode powiększył się o v_text używany przez pliki wykonywalne.

Przybyło kilka operacji na plikach:

HP-UX

VFS i vnode

Budowa VFS i vnode'ów w HP-UX jest bardzo podobna do SVR4. Struktura vfs zachowuje większość składowych z SVR4 z kilkoma małymi dodatkami. Operacje VFS też nie różnią się zbytnio od SVR4 (podobnie jest kilka dodatkowych funkcji). Strukturę vnode odróżniają od tej z SVR4 dwie listy: z niezmienionymi buforami v_cleanblkhd i z buforami zwierającymi modyfikacje v_dirtyblkhd. Konstrukcja ta jest podobna do v_pages, ale zapewnia proste rozróżnienie, które bufory były modyfikowane.


next up previous contents
Next: Najpopularniejsze systemy plików dostępne Up: Niezależność od systemu plików Previous: File System Switch   Spis rzeczy
Elżbieta Krępska 2004-01-19