Samouczek jądra Linux dla początkujących

Samouczek jądra Linux dla początkujących

Informacje o systemach operacyjnych

System operacyjny, skrócony jako system operacyjny, to oprogramowanie, które kontroluje sprzętowe komponenty systemu, czy to telefon, laptop lub komputer stacjonarny. Jest odpowiedzialny za komunikację między oprogramowaniem a sprzętem. Windows XP, Windows 8, Linux i Mac OS X to przykłady systemów operacyjnych. System operacyjny składa się z:

  • Bootloader: Oprogramowanie odpowiedzialne za proces rozruchu urządzenia.
  • Kernel: rdzeń systemu i zarządza urządzeniami procesora, pamięcią i urządzeniami peryferyjnymi.
  • Demony: usługi w tle.
  • Networking: Systemy komunikacyjne do wysyłania i pobierania danych między systemami.
  • Shell: zawiera proces polecenia, który umożliwia manipulację urządzeniem za pośrednictwem poleceń wprowadzonych do interfejsu tekstowego.
  • Serwer graficzny: podsystem, który pokazuje grafikę na ekranie.
  • Środowisko stacjonarne: właśnie z tym użytkownicy zwykle wchodzą w interakcje.
  • Aplikacje: to programy wykonujące zadania użytkownika, takie jak edytory tekstu.

Przestrzeń jądra i przestrzeń użytkowników

Przestrzeń jądra: jądro znajduje się w podwyższonym stanie systemowym, który obejmuje chronioną przestrzeń pamięci i pełny dostęp do sprzętu urządzenia. Ten stan systemu i przestrzeń pamięci jest całkowicie określona jako przestrzeń jądra. W przestrzeni jądra podstawowy dostęp do usług sprzętowych i systemowych jest zarządzany i świadczony jako usługa dla reszty systemu.

Przestrzeń użytkownika: Aplikacje użytkownika są przeprowadzane w przestrzeni użytkownika, gdzie mogą osiągnąć podzbiór dostępnych zasobów maszyny za pośrednictwem wywołań systemu jądra. Korzystając z podstawowych usług, które zapewniło jądro, aplikacja na poziomie użytkowników może być tworzona jak na przykład gra lub oprogramowanie do produktywności biurowej.

Linux

Linux zyskał popularność przez lata, ponieważ jest open source, a zatem oparty na projekcie unix i przeniesiony do większej liczby platform w porównaniu z innymi konkurencyjnymi systemami operacyjnymi. Jest to system operacyjny, jak wskazano, przypomina system operacyjny UNIX-stabilny wielozadaniowy system operacyjny, który został zmontowany jako bezpłatne i otwarte oprogramowanie do rozwoju i dystrybucji. Co oznacza, że ​​każda osoba lub firma ma zgodę na używanie, naśladowanie, studiowanie i zmianę systemu operacyjnego Linux w dowolny sposób.

Jądro Linux

Od pierwszego wydania 17 września 1991 r. Został zwolniony przez Linusa Torvalds i wykorzystuje GNU/Linux do opisania systemu operacyjnego. Android OS na podstawie smartfonów na bazie jądra Linux sprawił, że Linux pokonał konkurencję jako największa zainstalowana baza systemu operacyjnego wszystkich systemów operacyjnych ogólnego przeznaczenia. Historię jądra Linux można znaleźć tutaj.

Jądro może być monolityczne, mikrokernelowe lub hybrydowe (jak OS X i Windows 7). Kernel Linux to monolityczne jądro systemu operacyjnego, które przypomina system UNIX. Linia systemów operacyjnych Linux powszechnie określanych jako rozkłady Linuksa oparte jest na tym jądrze. Monolityczne jądro, w przeciwieństwie do mikrokernelu, nie tylko obejmuje centralną jednostkę przetwarzającą, pamięć i IPC. Najlepiej komunikować się ze sprzętem i wykonywanie kilku zadań jednocześnie. Z tego powodu procesy tutaj reagują w szybkim tempie.

Jednak kilka niepowodzeń to ogromny zasięg instalacji i pamięci i nieodpowiednie bezpieczeństwo, ponieważ wszystko działa w trybie superwizora. Natomiast mikrokernel może powoli reagować na wywołania aplikacji, ponieważ usługi użytkownika i jądro są oddzielone. Są zatem mniejsze w porównaniu z jądrem monolitycznym. Mikrokernele są łatwo rozszerzalne, ale do napisania mikrokernelu potrzebne jest więcej kodu. Jądro Linux jest zapisane w językach programowania C i Montażu.

Relacja jądra Linux ze sprzętem

Jądro może zarządzać sprzętem systemu za pośrednictwem tego, co nazywa się przerwania. Kiedy sprzęt chce współpracować z systemem, wydano przerwanie, które przerywa procesor, który z kolei robi to samo z jądrem. Aby zapewnić synchronizację, jądro może wyłączyć przerwania, czy to jeden, czy wszystkie z nich. Jednak w systemie Linux przewodnicy nie działają w kontekście procesu, zamiast tego działają w kontekście przerwania niezwiązanego z żadnym procesem.Ten konkretny kontekst przerwania istnieje wyłącznie po to, aby umożliwić przerywnik szybko zareagować na indywidualne przerwanie, a następnie w końcu wyjść.

Co odróżnia jądro Linux od innych klasycznych jądrów Unix?

Istnieją istotne różnice między jądrem Linux a klasycznym jądrem UNIX; Jak wymieniono poniżej:

  1. Linux obsługuje dynamiczne obciążenie modułów jądra.
  2. Jądro Linux jest zapobiegawcze.
  3. Linux ma symetryczne wsparcie wieloprocesorowe.
  4. Linux jest bezpłatny ze względu na otwartą naturę oprogramowania.
  5. Linux ignoruje niektóre standardowe funkcje UNIX, które twórcy jądra nazywają „słabo zaprojektowanym."
  6. Linux zapewnia model urządzenia zorientowany na obiekty z klasami urządzeń, zdarzeniami w zakresie hot-pluggable i systemem plików urządzenia użytkownika
  7. Jądro Linux nie rozróżnia wątków od normalnych procesów.

Architechture

Składniki jądra Linux

Jądro jest po prostu menedżerem zasobów; Zarządzane zasobem może być procesem, pamięcią lub urządzeniem sprzętowym. Zarządza i arbitruje dostęp do zasobów między wieloma konkurującymi użytkownikami. Jądro Linux istnieje w przestrzeni jądra, poniżej przestrzeni użytkownika, w którym wykonywane są aplikacje użytkownika. Aby przestrzeń użytkownika mogła komunikować się z przestrzenią jądra, włączona jest biblioteka GNU C, która zapewnia forum dla interfejsu wywołania systemowego, aby połączyć się z przestrzenią jądra i umożliwić przejście do przestrzeni użytkownika.

Jądro Linux można podzielić na trzy poziomy pierwotne:

  1. Interfejs systemowy połączenia; To jest najwyższa i podejmuje podstawowe działania, takie jak odczyt i pisanie.
  2. Kod jądra; znajduje się poniżej interfejsu wywołania systemowego, jest powszechny dla wszystkich architektur procesorów obsługiwanych przez Linuksa, czasami jest definiowany jako kod jądra niezależnego od architektury.
  3. Kod zależny od architektury; Jest pod kodem niezależnym od architektury, formuje to, co zwykle nazywa się pakietem obsługi płyty (BSP) - zawiera mały program o nazwie Bootloader, który umieszcza system operacyjny i sterowniki urządzeń w pamięci.

Perspektywa architektoniczna jądra Linux składa się z: interfejsu wywołania systemu, zarządzania procesami, wirtualnego systemu plików, zarządzania pamięcią, stosem sieci, architektury i sterowników urządzeń.

  1. Interfejs połączenia systemowego; jest cienką warstwą używaną do podejmowania połączeń funkcyjnych z miejsca użytkownika do jądra. Ten interfejs może zależeć od architektury
  2. Zarządzanie procesem; jest głównie w celu wykonania procesów. Są one określane jako wątek w jądrze i reprezentują indywidualną wirtualizację konkretnego procesora
  3. Zarządzanie pamięcią; Pamięć jest zarządzana w tak zwanych stronach wydajności. Linux zawiera metody zarządzania dostępną pamięcią, a także mechanizmy sprzętowe dla mapowań fizycznych i wirtualnych. Zapewniono również przestrzeń wymiany
  4. Wirtualny system plików; Zapewnia standardową abstrakcję interfejsu dla systemów plików. Zapewnia warstwę przełączania między interfejsem wywołania systemowym a systemami plików obsługiwanych przez jądro.
  5. Stos sieciowy; jest zaprojektowany jako architektura warstwowa modelowana po konkretnych protokołach.
  6. Sterowniki urządzeń; Znaczna część kodu źródłowego w jądrze Linux znajduje się w sterownika. Samouczek sterownika urządzenia
  7. Kod zależny od architektury; Te elementy zależne od architektury, na której działają, muszą rozważyć projekt architektoniczny dla normalnego działania i wydajności.

Interfejsy

Wywoływanie i przerwania systemowe

Aplikacje przekazują informacje do jądra za pośrednictwem połączeń systemowych. Biblioteka zawiera funkcje, z którymi aplikacje działają. Biblioteki następnie za pośrednictwem interfejsu wywołania systemu instruują jądro, aby wykonało zadanie, którego chce aplikacja. Co to jest połączenie systemowe Linux?

Przerwania oferują sposób, w jaki jądro Linux zarządza sprzętem systemowym. Jeśli sprzęt musi komunikować się z systemem, przerwanie procesora wykonuje sprawę, a to jest przekazywane do jądra Linux.

Interfejsy jądra Linux

Kernel Linux oferuje różne interfejsy dla aplikacji przestrzeni użytkowników, które wykonują różne zadania i mają różne właściwości. Istnieją dwa odrębne interfejs programowania aplikacji (API); Przestrzeń-użytkownika jądra i jądro wewnętrzne. API Linux to przestrzeń jądra-użytkownika API; Daje dostęp do programów w przestrzeni użytkowników do zasobów systemowych i usług jądra. Składa się z interfejsu wywołania systemowego i podprogramów z biblioteki GNU C.

Linux ABI

Odnosi się to do przestrzeni ABI użytkownika jądra (interfejs binarny aplikacji). Wyjaśnia to jako interfejs między modułami programu. Porównując API i ABI, różnica polega na tym, że ABI są używane do dostępu do kodów zewnętrznych, które są już kompilowane, podczas gdy API są strukturami zarządzania oprogramowaniem. Definiowanie ważnego ABI jest głównie dziełem rozkładów Linuksa niż dla jądra Linux. Konkretne ABI należy zdefiniować dla każdego zestawu instrukcji, na przykład x86-64. Użytkownicy produktów Linux są zainteresowani ABIS, a nie API.

Interfejs połączenia systemowego

Jak wspomniano wcześniej, odgrywa to bardziej znaczącą rolę w jądrze. Jest to denominacja całej części wszystkich istniejących wywołań systemowych.

Biblioteka standardowa C

Wszystkie wywołania systemowe jądra znajdują się w bibliotece GNU C, podczas gdy API Linux składa się z interfejsu wywołania systemowego i biblioteki GNU C, zwanej także Glibc.

Przenośny interfejs systemu operacyjnego (POSIX)

POSIX jest zbiorowym terminem standardów utrzymywania kompatybilności między systemami operacyjnymi. Deklaruje API wraz z interfejsami użytkowymi i powłokami wiersza poleceń. API Linux, ma nie tylko użyteczne cechy zdefiniowane przez POSIX, ale także dodatkowe cechy w jądrze:

  1. Cgroups Podsystem.
  2. System bezpośredniego renderowania menedżera.
  3. A Readhead funkcja.
  4. Getrandom Call, które jest obecne w v 3.17.
  5. Wywołania systemowe, takie jak Futex, epoll, splatać, dnotify, fanotify I Inotyfy.

Więcej informacji o Posx Standard jest tutaj.

Modułowe jądro

Poprzednie wersje jądra Linux były w taki sposób, że wszystkie ich części zostały ustalone statycznie w jednym, monolitycznym. Jednak współczesne jądra Linux mają większość ich funkcjonalności zawartej w modułach, które są dynamicznie wkładane do jądra. To w przeciwieństwie do typów monolitycznych, jest określane jako jądra modułowe. Taka konfiguracja pozwala użytkownikowi załadować lub wymienić moduły w działającym jądrze bez konieczności ponownego uruchomienia.

Moduł jądra załadowanego Linux (LKM)

Podstawowym sposobem dodania kodu w jądrze Linux jest wprowadzenie plików źródłowych do drzewa źródłowego jądra. Jednak możesz dodać kod podczas działania jądra. Dodany kod w ten sposób jest określany jako moduł jądra załadowanego. Te konkretne moduły wykonują różne zadania, ale są określone na trzy: sterowniki urządzeń, sterowniki systemu i wywołania systemowe.

Moduł ładowania jądra można porównać z rozszerzeniami jądra w innych systemach operacyjnych. Możesz umieścić moduł do jądra, albo ładując go jako LKM, albo wiązając go z jądrem podstawowym.

Korzyści z LKM w stosunku do wiązania z jądrem podstawowym:

  • Odbudowanie jądra często nie jest konieczne, oszczędzając czas i unika błędów.
  • Pomagają w rozwiązywaniu problemów systemowych, takich jak błędy.
  • LKMS oszczędzają przestrzeń, ponieważ je załadujesz tylko wtedy, gdy trzeba ich użyć.
  • Daj znacznie szybszy czas konserwacji i debugowania.

Zastosowania LKM

  1. Sterowniki urządzeń; jądro wymienia informacje ze sprzętem. Jądro musi mieć sterownik urządzenia przed użyciem.
  2. Sterowniki systemu plików; To tłumaczy zawartość systemu plików
  3. Wywołania systemowe; Programy w przestrzeni użytkowników wykorzystują wywołania systemowe do pozyskiwania usług z jądra.
  4. Sterowniki sieciowe; interpretuje protokół sieciowy
  5. Interpretatorzy wykonywalni; ładuje się i zarządza wykonywalnym.

Kompilowanie jądra Linux

W przeciwieństwie do tego, co mówi większość ludzi, kompilowanie jądra Linux jest prostym zadaniem. Poniżej znajduje się ilustracja procesu za pomocą jednej z rozkładów Linuksa: Fedora 13 kde. (Wskazane jest tworzenie kopii zapasowych danych i grub.Con Con, na wypadek, gdyby coś poszło nie tak)

  1. Z http: // jądro.Witryna ORG, pobierz źródło.
  2. Podczas gdy w katalogu pobierania wyodrębnij źródło jądra z archiwum, wprowadzając następujące polecenie w terminalu:
    TAR XVJF Linux-2.6.37.smoła.BZ2
  3. Użyj polecenia, czyń MRProper, aby wyczyścić obszar kompilacji przed każdą kompilacją.
  4. Użyj konfiguracji, powiedz Xconfig, te konfiguracje są zaprojektowane tak, aby ułatwić uruchamianie dowolnego programu w Linux.
  5. Podaj moduły i funkcje, które chcesz zawierać jądro.
  6. Po uzyskaniu .konfigurator Plik, następnym krokiem jest przejście do Makefile
  7. Uruchom polecenie Make i poczekaj, aż kompilacja przejdzie.
  8. Zainstaluj moduły za pomocą polecenia Make Modules_Install
  9. Skopiuj swoje jądro i mapę systemową do /rozruch.
  10. Uruchom New-Kernel-PKG, aby zbudować listę zależności modułów i podobnych rzeczy żarcie.conf

Uaktualnianie jądra

Możliwe jest uaktualnienie jądra Linux ze starszej wersji do nowszej, przy jednoczesnym zachowaniu wszystkich opcji konfiguracji z wcześniejszej wersji. Aby to osiągnąć, trzeba najpierw poprzeć .konfigurator plik w katalogu źródła jądra; Jest to na wypadek, gdyby coś poszło nie tak, gdy próbuje ulepszyć twoje jądro. Kroki to:

  1. Uzyskaj najnowszy kod źródłowy z głównego jądra.Witryna ORG
  2. Zastosuj wariacje do starego drzewa źródłowego, aby przynieść je do najnowszej wersji.
  3. Ponownie konfiguruj jądro na podstawie poprzedniego pliku konfiguracyjnego jądra.
  4. Zbuduj nowe jądro.
  5. Teraz możesz zainstalować nową kompilację jądra.

Pobieranie nowego źródła; Programiści jądra Linux rozumieją, że niektórzy użytkownicy mogą nie chcieć pobierać pełnego kodu źródłowego aktualizacji jądra, ponieważ marnuje to czas i przepustowość. Dlatego udostępniono łatkę, która może ulepszyć starsze wydanie jądra. Użytkownicy muszą tylko wiedzieć, która łatka dotyczy konkretnej wersji, ponieważ plik łatki jądra będzie aktualizować tylko kod źródłowy z jednej konkretnej wersji. Różne pliki łatek można zastosować na następujące sposoby;

  1. Stabilne plastry jądra, które mają zastosowanie do podstawowej wersji jądra.
  2. Base Base Release Patches mają tylko do poprzedniej wersji jądra podstawowego
  3. Przyrostowa aktualizacja łat od konkretnej wersji do następnej wersji. Pozwala to programistom uniknąć zgnicia, a następnie modernizowanie jądra. Zamiast tego mogą przejść ze swojej obecnej stabilnej wersji na następną stabilną wersję.

Oto bardziej szczegółowe kroki dla procesu aktualizacji jądra ze źródła na Debian oraz z wstępnie zbudowanych binarów na Centos i Ubuntu.

Wniosek

Kernel Linux działa głównie jako menedżer zasobów działający jako warstwa abstrakcyjna dla aplikacji. Aplikacje mają połączenie z jądrem, co z kolei oddziałuje ze sprzętem i usługami aplikacji. Linux to system wielozadaniowy umożliwiający jednoczesne wykonywanie wielu procesów. Kernel Linux jest popularny ze względu na naturę typu open source, która pozwala użytkownikom zmienić jądro na to, co jest dla nich odpowiednie, a ich sprzęt. Dlatego może być używany w różnych urządzeniach, w przeciwieństwie do innych systemów operacyjnych.

Modułowa charakterystyka jądra Linux dodaje użytkownikom więcej dreszczyku emocji. Wynika to z szerokiej gamy modyfikacji, które można tutaj wykonać bez ponownego uruchomienia systemu. Elastyczność daje użytkownikom duży pokój do aktualizacji ich wyobraźni.

Co więcej, monolityczna natura jądra jest wielką zaletą, ponieważ ma wysoką zdolność przetwarzania niż mikrokernel. Głównym niepowodzeniem w stosunku do jądra Linux jest to, że jeśli jakakolwiek z jego usług awansuje, wówczas cały system się z tym opada. Najnowsze wersje zostały zaprojektowane w sposób, w jaki dodanie nowej usługi nie ma potrzeby modyfikacji całego systemu operacyjnego. Jest to poprawa w porównaniu z poprzednimi wersjami.

Źródła

  1. Kernel Wikipedia Linux
  2. Interfejsy jądra Wikipedia Linux
  3. Moduł jądra załadowanego Linux, jak to zrobić
  4. Linux.Przewodnik dla początkujących com
  5. https: // www.Quora.com/co-go-dobro-tutorials-to-learn-linux-kernel
  6. https: // unix.Stackexchange.COM/PYTANIA/1003/LINUX-KRENLEL-DOOD-BEGINERS-TUTORIAL
  7. https: // www.Howtogeek.com/howto/31632 // co-is-the-linux-kernel-i-co-what-does-it-do/