If-Koubou

Co to jest jądro Linuxa i co robi?

Co to jest jądro Linuxa i co robi? (Jak)


Z ponad 13 milionami linii kodu, jądro Linux 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 komputera. Jest odpowiedzialny za łączenie wszystkich aplikacji działających w "trybie użytkownika" z fizycznym sprzętem i umożliwianie procesom znanym jako serwery uzyskiwania informacji od siebie nawzajem za pomocą komunikacji między procesami (IPC).

Różne typy jąder

Istnieją oczywiście różne sposoby budowania rozważań dotyczących jądra i architektury podczas budowania jednego od zera. Ogólnie rzecz biorąc, większość ziaren może należeć do jednego z trzech typów: monolitycznego, mikrojądra i hybrydy. Linux jest monolitycznym jądrem, podczas gdy OS X (XNU) i Windows 7 używają hybrydowych jąder. Zróbmy krótką wycieczkę po trzech kategoriach, abyśmy mogli przejść do bardziej szczegółowych informacji później.


Obraz wg uptown popcorn

Mikrokernel
Mikrokernel przyjmuje podejście tylko do zarządzania tym, co musi: procesorem, pamięcią i IPC. Niemal wszystko inne w komputerze może być postrzegane jako akcesorium i może być obsługiwane w trybie użytkownika. Mikrokernele mają przewagę przenośności, ponieważ nie muszą się martwić, jeśli zmienisz kartę graficzną, a nawet system operacyjny, o ile system operacyjny nadal będzie próbował uzyskać dostęp do sprzętu w ten sam sposób. Mikrokernele mają również bardzo mały ślad, zarówno dla pamięci, jak i przestrzeni instalacyjnej, i wydają się być bardziej bezpieczne, ponieważ tylko określone procesy są uruchamiane 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 oczekiwania

Monolityczne jądro
Jądra monolityczne są przeciwieństwem mikrojądeł, ponieważ obejmują nie tylko procesor, pamięć i IPC, ale obejmują również sterowniki urządzeń, zarządzanie systemem plików i wywołania serwerów systemowych. Jądra monolityczne mają tendencję do lepszego dostępu do sprzętu i wielozadaniowości, ponieważ jeśli program potrzebuje uzyskać informacje z pamięci lub innego uruchomionego procesu, ma bardziej bezpośrednią linię dostępu do niego i nie musi czekać w kolejce, aby załatwiać sprawy. Może to jednak powodować problemy, ponieważ im więcej rzeczy jest uruchamianych w trybie administratora, tym więcej rzeczy może obniżyć twój system, jeśli nie zachowujesz się właściwie.

Plusy

  • Bardziej bezpośredni dostęp do sprzętu dla programów
  • Łatwiejszy w procesach komunikacji między sobą
  • 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ży ślad pamięci
  • Mniej bezpieczne, ponieważ wszystko działa w trybie administratora


Zdjęcie przez schoschie na Flickr

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

Plusy

  • Programista może wybrać i wybrać, co działa w trybie użytkownika, a co działa w trybie administratora
  • Mniejsze miejsce instalacji instalacji niż monolityczne jądro
  • 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 znajdują się pliki jądra systemu Linux?

Plik jądra, w systemie Ubuntu, jest przechowywany w folderze / boot i nosi nazwę vmlinuz-wersja. Nazwa vmlinuz pochodzi ze świata unixów, gdzie w latach 60-tych nazywali swoje jądra po prostu "unixem", więc Linux zaczął nazywać swoje jądro "linux", kiedy został opracowany po raz pierwszy w latach 90-tych.

Gdy pamięć wirtualna została opracowana dla łatwiejszych zadań wielozadaniowych, "vm" umieszczono na początku pliku, aby pokazać, że jądro obsługuje pamięć wirtualną. Przez pewien czas jądro Linuksa nazywało się vmlinux, ale jądro było zbyt duże, aby zmieściło się w dostępnej pamięci rozruchowej, więc obraz jądra został skompresowany, a zakończenie x zmieniono na z, aby pokazać, że kompresja została skompresowana przy użyciu kompresji zlib. Ta sama kompresja nie zawsze jest używana, często zastępowana przez LZMA lub BZIP2, a niektóre jądra są nazywane po prostu zImage.

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

W folderze / boot będą również inne bardzo ważne pliki o nazwie 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 właściwy plik jądra. Plik system.map służy do zarządzania pamięcią przed pełnym załadowaniem jądra, a plik konfiguracyjny informuje jądro, jakie opcje i moduły załadować do obrazu jądra podczas kompilacji.

Architektura jądra Linuksa

Ponieważ jądro Linuksa jest monolityczne, ma największy zasięg i największą złożoność w stosunku do innych typów jądra. Była to cecha projektowa, która była przedmiotem debaty we wczesnych czasach Linuksa i wciąż nosi w sobie te same wady konstrukcyjne, jakie są nierozerwalnie związane z monolitycznymi jądrami.

Jedną rzeczą, którą programiści jądra Linuksa zrobili, aby ominąć te wady, było stworzenie modułów jądra, które mogły być ładowane i rozładowywane w środowisku wykonawczym, co oznacza, że ​​można dodawać lub usuwać funkcje jądra w locie. Może to wykraczać poza samo dodawanie funkcji sprzętowych do jądra, włączając moduły uruchamiające procesy serwera, takie jak wirtualizacja niskiego poziomu, ale może również umożliwić zastąpienie całego jądra bez konieczności ponownego uruchamiania komputera w niektórych przypadkach.

Wyobraź sobie, że możesz uaktualnić do pakietu serwisowego Windows bez konieczności ponownego uruchamiania ...

Moduły jądra

Co się stanie, jeśli system Windows ma już zainstalowany każdy dostępny sterownik i wystarczy włączyć odpowiednie 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 we wszystkich urządzeniach bez zużywania całej dostępnej pamięci.

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

Moduły stron trzecich i modułów zamkniętych są dostępne w niektórych dystrybucjach, takich jak Ubuntu, i mogą nie być instalowane domyślnie, ponieważ kod źródłowy dla modułów nie jest dostępny. Twórca oprogramowania (np. NVidia, ATI, między innymi) nie dostarcza kodu źródłowego, ale raczej buduje własne moduły i kompiluje potrzebne pliki .ko do dystrybucji. Chociaż moduły te są darmowe jak w piwie, nie są one wolne jak w mowie i dlatego nie są uwzględniane przez niektóre dystrybucje, ponieważ opiekunowie czują, że "koryguje" jądro, dostarczając niewolne oprogramowanie.

Jądro nie jest magiczne, ale jest niezbędne dla prawidłowego działania komputera. Jądro Linuksa jest inne niż OS X i Windows, ponieważ zawiera sterowniki na poziomie jądra i sprawia, że ​​wiele rzeczy jest obsługiwanych "od razu po wyjęciu z pudełka". Mamy nadzieję, że dowiesz się nieco więcej o tym, jak działa twoje oprogramowanie i sprzęt oraz jakie pliki potrzebujesz do uruchomienia komputera.

Kernel.org
Obraz wg ingridtaylar