background image

Jądro systemu 
Linux 

background image

Wprowadzenie

System operacyjny jest ważną częścią prawie każdego systemu 

komputerowego.

System komputerowy można podzielić na cztery części 

składowe: sprzęt, system operacyjny, programy użytkowy i 

użytkowników.

Sprzęt (procesor, czyli jednostka centralna, pamięć i urządzenia 

wejście - wyjście) stanowi podstawowe zasoby systemu 

komputerowego. 

Programy użytkowe (kompilatory, systemy baz danych,...) 

określają sposoby użycia tych zasobów do rozwiązania zadań 

stawianych przez użytkowników. 

System operacyjny jest programem, który działa jako pośrednik 

miedzy użytkownikiem komputera a sprzętem komputerowym.

System operacyjny nadzoruje i koordynuje posługiwanie się 

sprzętem przez różne programy użytkowe ,które pracują na 

zlecenie różnych użytkowników.

System operacyjny wykonuje różne operacje podstawowe w 

imieniu procesów użytkownika. 

background image

Czym jest jądro systemu?

Jądro systemu operacyjnego stanowi jego podstawę.

Znajdują się tam główne sterowniki i programy odpowiadające 

za działanie systemu.

Każdy system komputerowy posiada zbiór programów, który 

nazywany jest systemem operacyjnym. Najważniejszym z tych 

programów jest jądro (kernel).

Jądro jest ładowane do pamięci RAM w czasie uruchamiania 

systemu, zawiera ono wiele niezbędnych dla systemu procedur.

Kształt i możliwości komputera opierają się na jego jądrze.

Często słowa "system operacyjny" używa się w odniesieniu do 

jądra systemu.

Jądro współdziała ze sprzętem poprzez programy niskiego 

poziomu.

Dostarcza też środowisko dla aplikacji działających w systemie.

Kiedy program chce wykorzystać zasoby sprzętowe, musi 

wystosować odpowiednie zapytanie.

Jądro rozważa to zapytanie i wybiera czy, jak i kiedy użyczyć 

programowi potrzebnych mu zasobów. 

background image

Budowa jądra

Wyróżniamy kilka podstawowych 

metod konstrukcji jąder:

jądro monolityczne

mikrojądro 

nanokernel.

exokernel 

cachekernel

jądro hybrydowe

background image

Jądro monolityczne

Często stosowane w systemach typu Unix.

Wszystkie zadania są wykonywane przez jądro, będące jednym, dużym 

programem działającym w trybie jądra.

Przykładami takiego jądra mogą być: Linux, OpenBSD, FreeBSD, chociaż 

większość posiada umiejętność dołączania i odłączania modułów (najczęściej 

zawierających kod sterownika urządzenia lub obsługi potrzebnego w danej 

chwili systemu plików).

Zaletą tej techniki jest prostota, stabilność, łatwość komunikacji pomiędzy 

różnymi członami jądra (to przecież w tym wypadku jeden program!).

Wadą jest, w późniejszym stadium rozwoju projektu, uciążliwość w rozwijaniu 

programu oraz w znajdywaniu błędów.

background image

Mikrojądro

Rodzaj jądra systemu operacyjnego, które zawiera tylko 

najbardziej niezbędne elementy, takie jak funkcje zarządzania 

wątkami, komunikacją międzyprocesową, oraz obsługą 

przerwań i wyjątków.

Wszelkie inne zadania, takie jak np. obsługa systemów plików, 

sieci, sprzętu realizowane są w przestrzeni użytkownika przez 

osobne serwery.

Dobrymi przykładami systemów operacyjnych opartych na 

mikrojądrze są Amoeba, QNX, BeOS , Haiku czy Hurd, 

mikrojądrami są także (używane w Hurdzie) Mach i L4.

Firma Microsoft pracuje nad własnym rozwiązaniem tego typu w 

projekcie Singularity.

background image

Jądro hybrydowe

Jest jądrem opartym o zmodyfikowane architektury jądra monolitycznego oraz 

mikrojądra używanych w systemach operacyjnych.

Ten rodzaj jądra budzi kontrowersję w porównaniu do podobnego jądra monolitycznego, 

pojęcie to, przez niektórych specjalistów zostało odebrane jako marketing.

Najczęściej akceptowalnymi rodzajami jąder są: jądro monolityczne oraz mikrojądro 

(włącznie z nanojądrem i pikojądrem które są jego mniejszymi wersjami).

Pomysł stojący za tym nowym pseudo-rodzajem jądra jest struktura podobna do 

mikrojądra, ale zaimplementowana jak jądro monolityczne.

W przeciwieństwie do mikrojądra, wszystkie (lub prawie wszystkie) usługi wykonywane 

są w przestrzeni jądra.

Podobnie jak w jądrze monolitycznym, nie ma strat w wydajności wywołanych 

przepływem komunikatów mikrojądra i przełączaniem kontekstu między przestrzenią 

użytkownika a jądra.

Jednakże, podobnie jak w jądrach monolitycznych, nie ma korzyści wynikających z 

umieszczenia usług w przestrzeni użytkownika.

background image

Inne rodzaje jąder systemu

Nanokernel:

Technika zbliżona do techniki mikrojądra, różnica w wielkości - 

nanokernel jest jeszcze mniejszy.

Exokernel:

Architektura będąca odmianą nanojądra.

Cechą wyróżniającą jest możliwość zarządzania zasobami systemu 

przez nieuprzywilejowanego użytkownika, a rola jądra sprowadza 

się do zabezpieczania zasobów.

Przykładem systemu korzystającego z tego typu jądra jest system 

XOK, zbudowany w MIT Laboratory for Computer Science, 

pracujący na komputerach PC. Wyposażony on został w bibliotekę 

ExOS, która implementuje system UNIX i umożliwia uruchamianie 

większości aplikacji tego systemu.

Cachekernel:

W tej technice jądro systemu buforuje obiekty systemowe takie jak 

wątki czy przestrzenie adresowe tak jak sprzęt komputerowy 

buforuje pamięć.

Jądra aplikacji trybu użytkownika są odpowiedzialne za ładowanie 

tych danych i ponowne ich zapisanie stosując specyficzne dla 

danej aplikacji mechanizmy.

background image

Jądro Linuxa

To najważniejsza, wolna część uniksopodobnego 

systemu operacyjnego Linux napisana przez 

Linusa Torvaldsa w 1991 roku, a obecnie 

rozwijana przez licznych programistów z całego 

świata.

Początkowo działało na platformie Intel 80386, 

lecz później zostało przeniesione na wiele innych 

platform. Największa część kodu napisana jest w 

języku C, z pewnymi rozszerzeniami GCC a 

pozostała część to wstawki w asemblerze.

Kod jądra Linuksa jest objęty licencją GNU 

General Public License, jest zatem 

oprogramowaniem FLOSS.

background image

Rodzaje wersji jądra

Istnieją dwa rodzaje dostępnych wersji jądra:

stabilna (stable)

rozwojowa (development).

Stabilna przeznaczone jest dla ludzi ceniących sobie 

niezawodność i stabilność systemu jak również jego 

bezproblemową obsługę.

Natomiast wersje rozwojowe (developerskie) przeznaczone są 

dla ludzi zajmujących się rozwojem jądra, zawierają one często 

wiele nowych sterowników dla najnowszych urządzeń i wiele 

funkcji eksperymentalnych, które mogą zniknąć w następnym 

jądrze. Jądra te mogą także być niestabilne i powodować liczne 

problemy.

Pierwsza liczba oznaczenia jądra przedstawia numer wersji, 

następna czy jądro jest stabilne (liczba parzysta) czy rozwojowe 

(liczba nieparzysta), ostatnia liczba określa natomiast numer 

wydania.

Wynika z tego, że wersje stabilne to np. 2.2.40, 2.4.27, 2.6.9. 

Jądrami deweloperskimi będą np. 2.3.24, 2.5.75 i w przyszłości 

2.7.1.

background image

Różnice pomiędzy jądrami 
Linuxa w wersji 2.4 a 2.6 

Funkcja 

2.4.X 

2.6.X

Maksymalna liczba 

obsługiwanych procesorów 

16 

255, NUMA (Non-Uniform Memory 

Access) 

Maksymalny rozmiar RAM-u 

16 GB 

64 GB 

Maksymalny rozmiar 

systemu plików 

2 TB

16 TB

Obsługiwane systemy plików 

(odczyt i zapis) 

Ext2, Ext3, ReiserFS, 

JFS, HPFS, FFS, 

HFS+, MS DOS, FAT, 

VFAT, ISO9660 

Ext2, Ext3, ReiserFS, Reiser4, JFS, 

HPFS, FFS, HFS, HFS+, MS DOS, 

FAT, VFAT, ISO9660, NTFS, XFS 

Sieciowe systemy plików 

NFSv3, SMB, NCP, 

InterMezzo, Coda 

NFSv4, SMB, NCP, Intermezzo, 

Coda, AFS, CIFS 

Rodzaje wątków 

LinuxThreads

NPTL (wątki POSIX)

Obsługiwany format dźwięku  OSS 

ALSA 

Obsługa Hyper-threading 

Nie

Tak

Liczba możliwych urządzeń 

255 

4095

background image

Co to są moduły?

Są to części jądra, które nie są zawarte bezpośrednio w nim.

Kompiluje się je osobno i można je umieścić a następnie usunąć z 

uruchomionego jądra prawie zawsze.

Z powodu tej elastyczności jest to teraz preferowana metoda pisania 

niektórych fragmentów jądra.

Wiele popularnych sterowników urządzeń to ładowalne moduły.

Są to sterowniki różnych urządzeń, które nie są wkompilowane bezpośrednio 

w jądro.

Jednak gdy zajdzie potrzeba użycia takiego sterownika zostaje on wtedy 

załadowany dynamicznie przez specjalny program ładujący bez przerywania 

pracy naszego systemu.

Wszystkie moduły dostępne w naszym systemie znajdują się w katalogu 

/lib/modules/numer_wersji_naszego_jądra.

Korzyść z użycia modułów jest taka, że przez ich zastosowanie otrzymujemy 

mniejsze i szybsze jądro, dzięki czemu nie trwonimy bez potrzeby zasobów 

naszego komputera, w razie gdy potrzebujemy raz na jakiś czas skorzystać z 

sterownika a mamy go jako moduł, możemy załadować go na czas pracy, a 

gdy już nie będzie nam potrzebny spokojnie możemy skasować go z pamięci.

Jednak nie wszystkie sterowniki możemy użyć jako moduły, Linux potrzebuje 

część z nich jeszcze zanim zostaną one załadowane przez system, tak jest 

np. z obsługą dysku twardego czy systemu plików, aby system mógł się 

poprawnie uruchomić i obsłużyć posiadany przez nas sprzęt. 

background image

Co to są łaty (patche)?

Są sposobem na dodawanie do jądra lub 

uaktualnianie sterowników lub funkcji.

Nieraz po załataniu jądra, szczególnie 

nieoficjalnymi łatami może nie działać ono 

poprawnie, lub nawet może nie powieść się 

jego kompilacja.

Łatać jądro powinniśmy jedynie wtedy, gdy 

jesteśmy pewni jego działania i do tego 

najlepiej na osobnej kopii źródeł jądra.

Istnieją łaty oficjalne i nieoficjalne.

background image

Co to są łaty (patche)?

Łaty oficjalne możemy znaleźć na stronie 

www.kernel.org

.

Łaty te zostały zaakceptowane przez twórców jądra i 

pozwalają one aktualizować starszą wersję jądra na nowszą.

Np. jądro 2.6.7 za pomocą łaty patch-2.6.8.bz2 

zaktualizować jądro 2.6.7 do wersji 2.6.8.

Łaty te, jeśli nie użyjemy wersji testowej z dopiskiem -rc i 

nakładamy na niezałatane wcześniej jądro działają 

poprawnie.

Oprócz tego możemy także znaleźć codzienne zrzuty z 

czasu rozwoju jądra. Posiadają one dopisek -bk.

Ostatnio pojawiły się także łaty poprawiające błędy w 

stabilnej już wersji jądra. Posiadają one na końcu jeszcze 

jedna cyfrę, np. 2.6.8.1.

Łaty nieoficjalne możemy znaleźć w różnych miejscach, 

zazwyczaj poprawiają one działanie jądra, aczkolwiek nie 

muszą zawsze działać poprawnie. 

background image

Zadanie domowe

Przygotuj opis kompilacji jądra Linuxa.

Możesz korzystać z materiałów 
zgromadzonych w Internecie.

Postaraj się opisać ten proces własnymi 
słowami (plagiat obniży ocenę).

Limit stron: max. 6 (czcionka min. 12)

Format pliku: .doc lub .pdf

Gotowy opis proszę wysłać na adres: 

d.furman@vp.pl

Termin oddania prac: 11.04.2008


Document Outline