Pokazanie różnic i podobieństw występujących w implementacji
jądra
Scheduler
|
FreeBSD
|
Linux
|
podstatowa jednostka schedulera
|
thread
|
task_struct
|
reprezentacja procesu z jednym watkiem
|
proc, thread i ksegrp
|
task_struct
|
1) Decyzje schedulera sa podejmowane na bazie priorytetow. Zarowno w Linuxie jak
i w FreeBSD im nizsza jest wartosc priorytetu tym lepiej dla procesu. Wartosc
blizsza 0 reprezentuje wyzszy priorytet.
Table 1. Scheduling Priorities in Linux and
FreeBSD
Linux
|
Priorities
|
Scheduling Class
|
0-99
|
System Threads, Real time (SCHED_FIFO , SCHED_RR )
|
100-139
|
User priorities (SCHED_NORMAL )
|
FreeBSD
|
Priorities
|
Scheduling Class
|
0-63
|
Interrupt
|
64-127
|
Top-half Kernel
|
128-159
|
Real-time user (system threads are better priority)
|
160-223
|
Time-share user
|
224-255
|
Idle user
|
2) Oba systemy wspieraja interaktywne
watki/procesy. Interaktywne watki chodza z wiekszym priorytetem od
zwyklych watkow, ale przydzielany jest im mniejszy kawalek czasu.
3) W obu systemach mamy jedna kolejke "runqueue" na jeden procesor. FreeBSD i
Linux uzywaja kolejek "active" i
"expired". Watki sa przenoszone z kolejki
"active" do "expired" kiedy wykorzystaja swoj przydzielony kawalek czasu.
Kiedy kolejka "active" jest pusta jadro zamiena kolejki "active" i "expired".
FreeBSD posiada jeszcze trzecia kolejke "idle", w ktorej przechowuje
nieaktywne watki. FreeBSD uzywa jednej listy na 4 priorytety, a Linux
oddzielych list dla kazdego priorytetu.
4) Oba systemy uzywaja kalkulacji arytmetycznych bazujacych na czasie dzialania
i czasie uspienia watku.
5) Oba systemy scheduluja nastepny watek do wykonania zamiast schedulowac n
watkow naraz.
6) Oba systemy maja mechanizmy do cachowania
i balansowania obciazenia. Dla CPUs z
hyperthreadingiem FreeBSD posiada mechanizm do utrzymywania watkow na tym samym
wezle CPU.
7) Oba systemy wspieraja POSIXowe SCHED_FIFO
, SCHED_RR
, and SCHED_OTHER
(or SCHED_NORMAL
). SCHED_FIFO
i
SCHED_RR
przewaznie oznaczaja watki czasu rzeczywistego.
Zarzadzanie Pamiecia
Zarzadzanie pamiecia w obu systemach jest podobne. Roznia sie tylko nazwy
struktur danych.
Linux oddziela warstwy zalezne i niezalezne od sprzetu na wyzszym poziomie niz
to ma miejsce w FreeBSD. W FreeBSD wiekszosc kodu odpowiedzialnego za
zarzadzanie pamiecia jest niezalezna od maszyny. W Linuxie jest odwrotnie.
Rezultatem tego jest szybsze dzialanie kodu linuxowego, poniewaz jest mniej
abstrakcji. Kosztem tego jest to, ze przy zmianie architektury sprzetowej lub
zmianie modelu pamieci trzeba zmienic znacznie wiecej kodu.
Stronicowanie
1) Oba systemy uzywaja wariacji algorytmu LRU
(least recently used).
2) Oba posiadaja demony, ktore wykonuja zamiany stron. W FreeBSD demon
vm_pageout budzi sie co jakis czas lub wtedy
kiedy jest malo wolnej pamieci. Jesli dostepna pamiec zejdzie ponizej
okreslonego poziomu, vm_pageout wywoluje
funkcje vm_pageout_scan, aby przeszukala
pamiec i sprobowala zwolnic jakies strony. Jest jeden taki demon niezaleznie od
liczby jednostek CPU. Demon FreeBSD uzywa wartosci, ktore w wiekszosci sa
"zahardcodowane" albo ustawione manualnie, do okreslenia limitu wolnej pamieci.
Linux takze uzywa algorytmu LRU, ktory jest
dynamicznie kalibrowany, gdy chodzi. W odroznieniu od FreeBSD moze chodzic wiele
demonow kswapd, ale nie wiecej niz liczba
jednostek CPU.
3) FreeBSD ma pare list stron w celu trzymania informacji o tym ktore strony
byly ostatnio odwiedzane. Sa to listy:
"active",
"inactive",
"cached" i
"free". Strony sa przenoszone pomiedzy tymi
listami zaleznie od ich uzycia. Czesto odwiedzane strony zostaja raczej w liscie
"active". Strony przechowujace dane procesu, ktory sie konczy, automatycznie sa
przenoszone do kolejki "free".
Jesli vm_pageout_scan nie moze sobie
poradzic z obciazeniem (jesli system ma bardzo malo dostepnej pamieci) system
moze zapisac wszystkie strony jednego procesu na dysk. Jesli system ma
niepokojaco malo pamieci i moze to narazic stabilnosc systemu
vm_pageout_scan moze zabic najwiekszy
proces.
Linux takze uzywa roznych list stron i algorytmu LRU-podobnego. Linux dzieli
pamiec fizyczna na 3 strefy: strony DMA,
normalne strony i
dynamicznie przydzielana pamiec. Jest to
raczej spowodowane wiezami architektury x86. Strony wedruja miedzy listami
"hot", "cold" i "free". Mechanizm przenoszenia stron jest bardzo podobny do tego
zastosowanego w FreeBSD.
Systemy plikow
1) Oba systemy maja warstwe abstrakcji nad systemami plikow, aby ukryc szczegoly
implementacji przed aplikacjami.
2) Oba systemy uzywaja open, close, read, write, stat i innych wywolan
systemowych w celu dostania sie do pliku, niezaleznie od jego wewnetrznej
organizacji. W FreeBSD ten mechanizm nazywa sie VFS ("virtual file system") i
najwazniejsza struktura danych tam uzyta nazywa sie vnode, lub "virtual node".
Kazdy obiekt plikopodobny, do ktorego probujemy sie dostac ma przypisanego
vnode'a. Linux ma podobny mechanizm, ktory nazywa sie VFS ("visrtual file
switch"). W Linuxie struktura danych niezalezna od systemu plikow nazywa sie
inode. Jest to podobna struktudra do vnode w FreeBSD.
3) Linux ma dwie rozne struktury do operacji na plikach: jedna do operacji na
bezposrednio na plikach i druga do operacji na inode'ach. We FreeBSD jest tylko
jeden zestaw operacji, zawierajacy oba typy.
Table 2. Partial List of File System Types
FreeBSD
|
ufs
|
Default local file system (ufs2, based on BSD Fast Filesystem)
|
defvs
|
Keeps track of /dev files
|
ext2
|
Linux ext2 file system (GNU-based)
|
nfs
|
Remote files
|
ntfs
|
Windows NT file system
|
smbfs
|
Samba file system
|
portalfs
|
Mount a process onto a directory
|
kernfs
|
Files containing various system information
|
Linux
|
ext3
|
Journaling, extent-based file system from ext2
|
ext2
|
Extent-based file system
|
ReiserFS
|
Journaling, good dealing with small files
|
XFS
|
Journaling, good dealing with big files
|
afs
|
AFS client support for remote file sharing
|
nfs
|
Remote files
|
coda
|
Another networked file system
|
procfs
|
Processes, processors, buses, platform specifics
|