Czym jest jądro Linuksa i do czego służy?


Z ponad 13 milionami linii kodu jądro Linuksa jest jednym z największych projektów open source na świecie, ale czym jest jądro i do czego służy?



Więc czym jest jądro?

Jądro to najniższy poziom łatwo wymienialnego oprogramowania, które łączy się ze sprzętem w komputerze. Jest odpowiedzialny za łączenie wszystkich aplikacji działających w trybie użytkownika ze sprzętem fizycznym i umożliwianie procesom, znanym jako serwery, uzyskiwania od siebie informacji za pomocą komunikacji między procesami (IPC).

Różne rodzaje jąder

Istnieją oczywiście różne sposoby budowania jądra i względy architektoniczne podczas budowania go od zera. Ogólnie rzecz biorąc, większość jąder należy do jednego z trzech typów: monolitycznych, mikrojądrowych i hybrydowych. Linux jest jądrem monolitycznym, podczas gdy OS X (XNU) i Windows 7 używają jądra hybrydowego. Zróbmy krótką prezentację trzech kategorii, abyśmy mogli później przejść do bardziej szczegółowych informacji.




Obraz autorstwa popcorn z śródmieścia

Mikrojądro
Mikrojądro stosuje podejście polegające na zarządzaniu tylko tym, co musi: procesorem, pamięcią i IPC. Prawie wszystko inne w komputerze może być postrzegane jako akcesorium i może być obsługiwane w trybie użytkownika. Mikrojądra mają zaletę przenoszenia, ponieważ nie muszą się martwić, jeśli zmienisz kartę graficzną, a nawet system operacyjny, o ile system operacyjny nadal próbuje uzyskać dostęp do sprzętu w ten sam sposób. Mikrojądra zajmują również bardzo mało miejsca, zarówno dla pamięci, jak i przestrzeni instalacyjnej, i wydają się być bezpieczniejsze, ponieważ tylko określone procesy działają w trybie użytkownika, który nie ma wysokich uprawnień jako tryb administratora.



Plusy

  • Ruchliwość
  • Mały ślad instalacji
  • Mały ślad pamięci
  • Bezpieczeństwo

Cons

  • Sprzęt jest bardziej abstrakcyjny dzięki sterownikom
  • Sprzęt może reagować wolniej, ponieważ sterowniki są w trybie użytkownika
  • Procesy muszą czekać w kolejce, aby uzyskać informacje
  • Procesy nie mogą uzyskać dostępu do innych procesów bez czekania

Jądro monolityczne
Jądra monolityczne są przeciwieństwem mikrojądra, ponieważ obejmują nie tylko procesor, pamięć i IPC, ale także takie elementy, jak sterowniki urządzeń, zarządzanie systemem plików i wywołania serwerów systemowych. Jądra monolityczne wydają się być lepsze w dostępie do sprzętu i wielozadaniowości, ponieważ jeśli program musi uzyskać informacje z pamięci lub innego uruchomionego procesu, ma bardziej bezpośrednią linię, aby uzyskać do niego dostęp i nie musi czekać w kolejce, aby coś zrobić. Może to jednak powodować problemy, ponieważ im więcej rzeczy działa w trybie administratora, tym więcej rzeczy może spowodować awarię systemu, jeśli ktoś nie zachowuje się właściwie.



Plusy

  • Bardziej bezpośredni dostęp do sprzętu dla programów
  • Łatwiejsza komunikacja między procesami
  • Jeśli Twoje urządzenie jest obsługiwane, powinno działać bez dodatkowych instalacji
  • Procesy reagują szybciej, ponieważ nie ma kolejki na czas procesora

Cons

  • Duży ślad instalacji
  • Duża pamięć masowa
  • Mniej bezpieczne, ponieważ wszystko działa w trybie administratora


Obraz przez schoschie na Flickr

Reklama

Jądro hybrydowe
Jądra hybrydowe mają możliwość wybierania i wybierania tego, co chcą uruchomić w trybie użytkownika i tego, co chcą uruchomić w trybie administratora. Często rzeczy takie jak sterowniki urządzeń i I/O systemu plików będą uruchamiane w trybie użytkownika, podczas gdy wywołania IPC i serwera będą utrzymywane w trybie administratora. Daje to najlepsze z obu światów, ale często będzie wymagało więcej pracy od producenta sprzętu, ponieważ cała odpowiedzialność kierowcy spoczywa na nim. Może również mieć pewne problemy z latencją, które są nieodłącznie związane z mikrojądrami.

Plusy

  • Deweloper może wybrać, co działa w trybie użytkownika, a co w trybie administratora
  • Mniejszy ślad instalacji niż jądro monolityczne
  • Bardziej elastyczny niż inne modele

Cons

  • Może cierpieć z powodu tego samego opóźnienia procesu co mikrojądro
  • Sterowniki urządzeń muszą być zarządzane przez użytkownika (zwykle)

Gdzie są pliki jądra Linuksa?

Plik jądra w Ubuntu jest przechowywany w folderze /boot i nazywa się vmlinuz- wersja . Nazwa vmlinuz pochodzi ze świata uniksowego, w którym w latach 60-tych zwykli nazywać swoje jądra po prostu unixem, więc Linux zaczął nazywać ich jądro linux, gdy został po raz pierwszy opracowany w latach 90-tych.

Kiedy opracowano pamięć wirtualną dla łatwiejszej wielozadaniowości, vm umieszczono na początku pliku, aby pokazać, że jądro obsługuje pamięć wirtualną. Przez jakiś czas jądro Linuksa nazywało się vmlinux, ale stało się ono zbyt duże, aby zmieścić się w dostępnej pamięci rozruchowej, więc obraz jądra został skompresowany, a końcówka x została zmieniona na z, aby pokazać, że jest skompresowane za pomocą kompresji zlib. Ta sama kompresja nie zawsze jest używana, często jest zastępowana LZMA lub BZIP2, a niektóre jądra nazywają się po prostu zImage.

Numeracja wersji będzie miała format A.B.C.D, gdzie A.B będzie prawdopodobnie 2.6, C będzie twoją wersją, a D wskazuje twoje łatki lub poprawki.

W folderze /boot będą również inne bardzo ważne pliki o nazwach initrd.img-version, system.map-version i config-version. Plik initrd jest używany jako mały dysk RAM który wyodrębnia i wykonuje rzeczywisty plik jądra. Plik system.map jest używany do zarządzania pamięcią przed pełnym załadowaniem jądra, a plik konfiguracyjny informuje jądro, jakie opcje i moduły należy załadować do obrazu jądra podczas kompilacji.

Architektura jądra Linux

Ponieważ jądro Linuksa jest monolityczne, ma największy ślad i największą złożoność w porównaniu z innymi typami jąder. To była cecha projektowa, która była pod sporo dyskusji we wczesnych dniach Linuksa i nadal niesie ze sobą niektóre z tych samych wad konstrukcyjnych, co monolityczne jądra.

Reklama

Jedną z rzeczy, które programiści jądra Linuksa zrobili, aby obejść te wady, było stworzenie modułów jądra, które można ładować i rozładowywać w czasie wykonywania, co oznacza, że ​​można dodawać lub usuwać funkcje jądra w locie. Może to wykraczać poza zwykłe dodanie funkcji sprzętowych do jądra, poprzez włączenie modułów, które uruchamiają procesy serwera, takie jak wirtualizacja niskiego poziomu, ale w niektórych przypadkach może również pozwolić na wymianę całego jądra bez konieczności ponownego uruchamiania komputera.

Wyobraź sobie, że możesz uaktualnić do dodatku Service Pack dla systemu Windows bez konieczności ponownego uruchamiania…

Moduły jądra

Co by było, gdyby system Windows miał już zainstalowane wszystkie sterowniki i wystarczyło włączyć potrzebne sterowniki? Zasadniczo to właśnie robią moduły jądra dla Linuksa. Moduły jądra, znane również jako ładowalny moduł jądra (LKM), są niezbędne do utrzymania działania jądra na całym sprzęcie bez zużywania całej dostępnej pamięci.

Moduł zazwyczaj dodaje funkcjonalność do jądra podstawowego dla takich rzeczy jak urządzenia, systemy plików i wywołania systemowe. LKM mają rozszerzenie pliku .ko i są zwykle przechowywane w katalogu /lib/modules. Ze względu na ich modułowy charakter można łatwo dostosuj swoje jądro ustawiając moduły do ​​ładowania lub nieładowania podczas uruchamiania za pomocą polecenia menuconfig lub edytując plik /boot/config, lub możesz ładować i rozładowywać moduły w locie za pomocą polecenia modprobe.

Moduły stron trzecich i moduły zamkniętego źródła są dostępne w niektórych dystrybucjach, takich jak Ubuntu, i mogą nie być instalowane domyślnie, ponieważ kod źródłowy modułów jest niedostępny. Twórcy oprogramowania (m.in. nVidia, ATI) nie dostarczają kodu źródłowego, ale raczej budują własne moduły i kompilują potrzebne pliki .ko do dystrybucji. Chociaż te moduły są wolni jak w piwie, nie są wolni jak w mowie i dlatego nie są uwzględniane w niektórych dystrybucjach, ponieważ opiekunowie uważają, że skażenie jądra dostarczaniem niewolnego oprogramowania.

Jądro nie jest magiczne, ale jest całkowicie niezbędne do prawidłowego działania każdego komputera. Jądro Linuksa różni się od OS X i Windows, ponieważ zawiera sterowniki na poziomie jądra i obsługuje wiele rzeczy po wyjęciu z pudełka. Mamy nadzieję, że dowiesz się nieco więcej o tym, jak działa oprogramowanie i sprzęt oraz jakie pliki są potrzebne do uruchomienia komputera.

Kernel.org
Obraz autorstwa inridtaylar

CZYTAJ DALEJ Zdjęcie profilowe Justina Garrisona Justin Garrison
Justin Garrison jest entuzjastą Linuksa i inżynierem infrastruktury chmury dla jednej z największych firm na świecie. Jest także współautorem Cloud Native Infrastructure autorstwa O'Reilly.
Przeczytaj pełną biografię

Ciekawe Artykuły