next up previous contents
Next: Zadania Up: Systemy plików specjalnego przeznaczenia Previous: Tymczasowe systemy plików   Spis rzeczy

Subsections

Pseudosystemy plików

System plików /proc

Po raz pierwszt system plików /proc został włączony do 8-ej edycji Uniksa, a później do SVR4. W zamyśle miał zastąpić niewygodną funkcję ptrace dając dostęp do przestrzeni adresowej procesu, na której można byłoby działać jak na zwykłym pliku. System rozwinął się w elegancki interfejs do przestrzeni adresowej procesów.

Implementacja

Wczesne implementacje. We wczesnych implementacjach każdy proces reprezentowano jako plik w katalogu /proc. Nazwą pliku był pid procesu, rozmiarem - rozmiar przestrzeni adresowej procesu, prawami - prawa właściciela procesu. Na pliku można było wykonywać operacje read(), write(), lseek() i ioctl().

Zmiany w późniejszych impelemtacjach. Zmiany w implementacji były powodowane przede wszystim wprowadzeniem do Uniksa wielowątkowości na poziomiwe użytkownika (lwp - light weight process ). Każdy proces w systemie jest reprezentowany jako podkatalog katalogu /proc.

Zawartość katalogu proc

Każdy katalog w /proc zawiera m.in. pliki:

Nazwa Tryb Struktura (patrz procfs.h) Informacje w pliku
status r pstatus Stan procesu.
psinfo r psinfo Informacje dla ps.
ctl w - Umożliwia wykonywnie operacji sterujących.
map r zaw. prmap Mapa adresów wirtualnych procesu.
as (adress space) rw - Przestrzeń wirtualna procesu.
sigact r zaw. sigaction Informacje związane z obsługą sygnałów.
cred (credentials) r prcred Informacja uwierzytelnijąca.
object kat. - Zawiera o jednym pliku dla każdego obiektu odwzorowywanego na przestrzeń adresową procesu.
lwp kat. - Zawiera informacje o wątkach - po jednym katalogu dla każdego wątku. Każdy taki katalog zawiera trzy pliki: lwpstatus, lwpsinfo oraz lwpctl (znaczenie analogiczne).

Operacja na plikach ctl i lwpctl:

PCSTOP Zatrzymuje wszystkie wątki.
PCWSTOP Czeka na zatrzymanie wszystkich wątków procesu.
PCRUN Wznawia zatrzymane procesy lekkie.
PCKILL Wysyła podany sygnał do procesu.
PCSENTRY Nakazuje zatrzymanie się wątku przy wejściu do określonych funkcji systemowych.
PCSEXIT Nakazuje zatrzymanie się wątku przy wyjściu z określonych funkcji systemowych.

Przykład

Przykładowy wydruk dla procesu bash (w Linuxie 2.4.21):

[ela@karamba /]$ ps
  PID TTY          TIME CMD
13762 pts/6    00:00:00 bash
14065 pts/6    00:00:00 ps

[ela@karamba /]$ ll /proc/13762
razem 0
-r--r--r--    1 ela      ela             0 sty  1 04:19 binfmt
-r--r--r--    1 ela      ela             0 sty  1 04:19 cmdline
lrwxrwxrwx    1 ela      ela             0 sty  1 04:19 cwd -> /proc/
-r--------    1 ela      ela             0 sty  1 04:19 environ
lrwxrwxrwx    1 ela      ela             0 sty  1 04:19 exe -> /bin/bash*
dr-x------    2 ela      ela             0 sty  1 04:19 fd/
-r--r--r--    1 ela      ela             0 sty  1 04:19 maps
-rw-------    1 ela      ela             0 sty  1 04:19 mem
-r--r--r--    1 ela      ela             0 sty  1 04:19 mounts
lrwxrwxrwx    1 ela      ela             0 sty  1 04:19 root -> //
-r--r--r--    1 ela      ela             0 sty  1 04:19 stat
-r--r--r--    1 ela      ela             0 sty  1 04:19 statm
-r--r--r--    1 ela      ela             0 sty  1 04:19 status

[ela@karamba /]$ cat /proc/13762/cmdline
/bin/bash

Pliki katalogu /proc nie są fizycznymi plikami z danymi. Operacje na tych plikach są tłumaczone na odpowiednie akcje podejmowane na procesach lub ich przestrzeniach adresowych. Wiele z tych plików jest interfejsem do pewnych struktur procesu, np. pstatus, które opsane są w pliku procfs.h.

Pseudosystem plików /proc jest bardzo użyteczny w szczególności w programach odpluskwiających i śledzących (dzięki plikom ctl).

System plików specfs

Powstanie. Gdy w Uniksie był tylko jeden system plików, zaczęło powstawać bardzo wiele różnych rodzajów plików, w sczególności plików urządzeń. Powodowało to problemy z narzutem czasowym przy dostępie, narzutem pamięciowym (ten sam blok w dwóch cache'ach). Pseudosystem plików specfs, wprowadzony po raz pierwszy do SVR4, rozwiązał te problemy.

Interfejs urządzeń. System plików specfs udostępnia jednolity interfejs do urządzeń. System ten jest niewidoczny dla użytkowników i nie może być montowany. Eksportuje interfejs, który może być stosowany przez dowolny system plików wspierający pliki specjalne. Jego podstawowym zadaniem jest przechwycenie operacji we-wy do plikw urządzeń i przetłumaczenie ich na wywołania odpowiednich programów obsługi tych urządzeń.

Gdzie jest haczyk? Na pierwszy rzut oka wydaje się to ławtwym zadaniem - dla każdego pliku możemy sprawdzić czy jest on plikiem urządzenia i , jeśli tak, pobrać numery urządzenia. Wówczas możemy znaleźć podprogramy obsługi za pomoca tablic rozdzielczych urządzeń. Problemy pojawiają się, gdy z tym samym urządzeniem związanych jest wiele plikow urządzeń i korzysta z nich wielu użytkowników. Jądro musi wiedzieć, które vwęzły reprezentują to samo urządzenie.

Implementacja. Specfs tworzy v-węzeł przesłaniający (ang. shadow vnode) dla każdego pliku urządzenia. Jego dane w warstwie zależnej od systemu plików reprezentuje s-węzeł (ang. snode). Operacja wyszukiwania pliku urządzenia daje w wyniku wskaźnik do v-węzła przesłaniającego, a nie do węzła rzeczywistego. Węzeł rzeczywisty można uzyskać za pomocą operacji vop_realvp(). S-węzeł ma pole o nazwie s_commonvp, które wskazuje na węzeł wspólny dla tego urządzenia. Może na wiego wskazywać wiele węzłów, ale jednemu urządzeniu odpowiada jeden węzeł wspólny. Wszystkie operacje wymagające synchronizacji oraz odczyty i zapisy do urządzenia kierowane są przez węzeł wspólny.

Rysunek: Schemat działania systemu plików specfs.
\begin{figure}\centering\includegraphics{ela-obrazki/specfs.ps}
\end{figure}

System plików procesora

System plików procesora (ang. Processor File System) udostępnia interfejs do poszczególnych procesów na komputerze wieloprocesorowym. Jest zamontowany w katalogu /system/processor i ma po jednym pliku dla każdego procesora. Nazwy plików są numerami procesorów, są tylko do odczytu. Zawierają następujące informacje:

Ponadto system plików procesora zawiera plik ctl, do którego może pisać tylko superużytkownik. Zapis do tego pliku powoduje wykonanie operacji sterujących na procesorze, np. odłączenie go.

Informacja o procesorze w Linuksie
[ela@karamba /]$ cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 6
model           : 10
model name      : AMD Athlon(tm) XP 2500+
stepping        : 0
cpu MHz         : 1830.035
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 1
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge
		  mca cmov pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow
bogomips        : 3643.80

System plików TFS

Powstanie. System plików TFS (ang. Translucent File System (Półprzezroczysty)) powstał w Sun Microsystems. Celem było stworzenie systemu do współdzielenia plików bez duplikowania ich. System wspiera tworzenie dużego oprogramowania:

Współdzielony katalog. TFS implementuje warstwy projektu, każda warstwa jest fizycznym katalogiem. Warstwy są połączone w listę za pomocą plików ukrytych - dowiązań wyszukiwania (ang. search links). Pliki widoczne w katalogu TFS są sumą plików ze wszystkich warstw. Dodatkowo TFS umożliwia tworzenie warstw wariantowych, np. dla różnych platform.

Prywatne hierarchie. Każdy użytkownik może pobrać pliki z dowolnej warstwy. Domyślnie dostęp jest do najnowszej, zewnętrznej warstwy. Jeśli potrzebne są wcześniejsze warstwy, trzeba przejść jawnie po łańcuchu wyszukiwania. Gdy użytkownik zmodyfikuje plik w swojej hierarchii, zmiany stają się widoczne dla innych w momencie zapisania go do systemu plików (kopiowanie przy zapisie). Plik zostanie zapisany do najbardziej zewnęrznej warstwy, a warstwy niższe są chronione przed jakimkolwiek zapisem.

Wydajność. System TFS nie jest bardzo wydajny, gdyż pobranie pliku wymaga zwykle przeszukania kilku warstw. Aby przyspieszyć wyszukiwanie korzysta się z pamięci podręcznej.

System plików namefs

Powstanie. System plików namefs został wprowaddzony do SVR4. Jego celem jest umożliwienie związania pliku z otwartym nazwanym strumieniem (ang. named STREAM) i sworzenie w ten sposób ,,kanału komunikacyjnego''.

Implementacja. Wprowadzono funkcję fattach(), która monutuje system namefs na pliku. Związuje się ,,głowę'' strumienia z punktem montowania, co pozwala przekierowywać operacje we-wy na pliku do strumienia.

Przykład. Za pomocą IP STREAM można implementować protokł TCP/IP lub UDP/IP.

Systemy plików fifofs, fdfs, swapfs, lofs

fifofs

Powstanie. System plików fifofs został wprowadzony do SVR4, działa analogicznie do specfs, lecz dla łącz nazwanych (kolejek FIFO).

Implementacja Gdy użytkownik próbuje się ,,dobrać'' do pliku, który jest łączem nazwanym, dochodzi do wywołania funkcji fifovp(), która zwraca v-węzeł systemu fifofs i odpowiednio inicjalizuje pole v_op na fifo_vnodeops.

fdfs

Implementacja. System plików file descriptor filesystem, zwykle montowany na /dev/fd, jest wygodnym interfejsem do otwartych plikow (proces ma dostęp do swoich otwartych plików). Używa się tego głównie w językach skryptowych, np. bash, perl, awk, itd.

Przykład. Dwa wywołania:
fd = open ("/dev/fd/n", mode);
fd = dup (n)
są identyczne.

swapfs

Swapfs został wprowadzony do systemu operacyjnego Solaris, aby rozwiązać problem z nieużywaną pamięcią operacyjną (ponieważ każda strona pamięci miała mieć odpowiadającą stronę przestrzeni wymiany; problem powstawał, gdy przestrzeń wymiany była za mała).

System plików swapfs umożliwia zamontowanie wirtualnej przestrzeni wymiany, która obejmowała:

lofs

System plików Loopback File System tworzy wirtualny system pliów, którym można nakryć lub zduplikować pliki. Są one wówczas dostępne z obu ścieżek.


next up previous contents
Next: Zadania Up: Systemy plików specjalnego przeznaczenia Previous: Tymczasowe systemy plików   Spis rzeczy
Elżbieta Krępska 2004-01-19