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