Jądro Linux: rozwój, opis procesu projektowania, kompilacja, instalacja, aktualizacja. Jak uaktualnić jądro Linuksa?

10.06.2019

Oczywiście najczęstszym dzisiaj są systemy operacyjne Windows wydane przez Microsoft, ale nie wszyscy użytkownicy wiedzą, że tak naprawdę nie jest to pierwszy, a na pewno nie jedyny system operacyjny na świecie. Jak wiadomo, systemy operacyjne zostały pierwotnie opracowane już w latach 60. ubiegłego wieku, ale ze względu na wiele specyficznych cech dystrybucji komputerów w tamtym czasie, nie stały się tak powszechne, reprezentując wyłącznie projekty naukowe.

Jak pojawił się Linux?

jądro Linux

Pierwszym systemem, który wykroczył poza granice swojego rodzica, jest Unix, który natychmiast rozprzestrzenił się na różne instytucje edukacyjne, mające całkowicie otwarty charakter. Z biegiem czasu postanowiono ukryć kod źródłowy Uniksa jako tajemnice handlowe w rezultacie deweloperzy musieli zadowolić się tylko teorią. Sytuacja zmieniła się diametralnie po wydaniu systemu operacyjnego Minix, a także jego następcy o nazwie Linux. Główną cechą tych systemów operacyjnych jest to, że zawierają w pełni otwarty kod źródłowy, to znaczy, że jądro Linuksa jest dostępne dla wszystkich użytkowników. Z tego powodu ten system operacyjny jest dziś najczęściej spotykany.

Co o nim wiadomo?

We współczesnej literaturze można znaleźć nie tyle konkretne informacje o działaniu poszczególnych podsystemów, co znacznie komplikuje rozwój i dalszą poprawę tego systemu operacyjnego, jak zauważa twórca poprzednika, studiując tylko teorię, studenci zaczynają formować zbyt jednostronny pogląd na to, jak może wyglądać jak pełnoprawny system operacyjny. Rzeczy naprawdę znaczące można po prostu pominąć, ponieważ teoria nie wchodzi w ich głębię.

Warto zauważyć, że użytkownicy wyrażają bardzo duże zainteresowanie, w jaki sposób działa jądro Linuksa, iw zasadzie cały system operacyjny. Tak więc wkrótce po pojawieniu się Minixa pojawiła się również osobna grupa dyskusyjna o nazwie USENET, przeznaczona wyłącznie do omawiania tego systemu. Po kilku tygodniach grupa ta miała ponad 40 000 subskrybentów, z których większość próbowała dodać wiele okazji do systemu, starając się uczynić go znacznie większym i lepszym. Każdego dnia setki ludzi na całym świecie zastanawiało się, jakie inne pomysły i fragmenty kodu można zaproponować.

Jednak wielu zastanawia się, dlaczego tak mało jest obecnie dostępnej literatury na temat jądra Linuksa, ale w rzeczywistości może istnieć kilka przyczyn.

Wartość handlowa dokumentacji

jak zaktualizować jądro Linuxa

Po pojawieniu się Unixa jego kody były znane masom, w wyniku czego były aktywnie badane na całym świecie. Najbardziej znaną książką opisującą ten system operacyjny był Lions Commentary on Unix, który został po raz pierwszy opublikowany w 1977 roku. Ta książka opisała pracę tego systemu operacyjnego tak szczegółowo, jak to możliwe, w wyniku czego została wykorzystana na różnych kursach uniwersyteckich poświęconych badaniu systemów operacyjnych. Jednak z biegiem czasu stało się jasne, że Unix stopniowo przekształca się w produkt komercyjny, w wyniku czego całkowicie zabroniono studiowania kodu źródłowego na różnych kursach, tak aby status tajemnicy handlowej nie był zagrożony.

Jak mówią eksperci, aby stworzyć warunki niezbędne dla prawdziwie pomyślnej działalności prywatnej, najpierw trzeba stworzyć całkowicie zamkniętą infrastrukturę komercyjną, dzięki której można zrozumieć Kodeks, i powinien on działać wyłącznie dla firmy. Wszelkie ukrywanie informacji o architekturze jest niezwykle skuteczną strategią kontrolowania projektu, w którym znajdują się kody open source.

Trudności z opanowaniem tekstów

opis jądra Linux

Krzywa kosztowa wymagana do szczegółowego badania jądra Linux jest coraz bardziej stroma, ponieważ system jest coraz bardziej złożony, a jego objętość wzrasta.

Właściwa interpretacja programów jest dziś dość poważnym problemem i polega na tym, że nie zawsze wystarcza posiadanie własnych źródeł. W przypadku, gdy system lub program jest napisany w języku o relatywnie niskim poziomie, takim jak Cobol, Fortran lub C, a także ma dokumentację niskiej jakości, wówczas wszelkie główne rozwiązania projektowe całkowicie rozpuszczają się w kodowaniu ciekawostek, w wyniku czego wymagają całkowitej rekonstrukcji. W takich przypadkach wartość bardziej wydajnej dokumentacji, w tym szczegółowego opisu architektury, a także specyfikacji interfejsu, może ostatecznie być nawet wyższa niż wartość samego tekstu źródłowego.

Zaproponowano jedno możliwe podejście Linus Torvalds, który był rozwinięciem jądra Linuksa. Zaproponował pełną klarowność kodu źródłowego, czyli zapewnienie wyjątkowo przejrzystej struktury, przyjaznych dla użytkownika interfejsów, a także przestrzeganie zasady "rób trochę, ale rób to jakościowo".

Jeśli mówimy o podejściu zaproponowanym przez Andrew Mortona, tutaj oferujemy więcej komentarzy bezpośrednio w samym kodzie źródłowym, aby czytelnik mógł zrozumieć ostateczną intencję programisty.

Jakie są różnice między jądrem Unix a Linuksem?

Naturalnie, opis jądra Linux znacznie różni się od podstawowego opisu Uniksa, ale wielu nie wie, jakie są te różnice.

Z powodu tego samego interfejsu API, jak i wspólnego pochodzenia, współczesne jądra Uniksa są do siebie bardzo podobne, a wyjątkami są tutaj niektóre monolityczne statyczne pliki binarne, które istnieją jako duże pliki wykonywalne, które działają tylko raz i używają pojedynczej kopii przestrzeni adresowej. Aby zapewnić normalne działanie systemu Unix, konieczne jest zapewnienie kompletnego systemu z kontrolerem pamięci przywoławczej, za pomocą którego będzie można zapewnić skuteczną ochronę pamięci w systemie, a także zapewnić każdemu procesowi własną wirtualną przestrzeń adresową.

Jądro Linuksa nie jest oparte na żadnym systemie uniksowym i jest całkowicie monolityczne. Jednak mimo to jego struktura zapewnia pewne właściwości architektury mikronuklearnej.

Różnice

instalacja jądra Linux

Istnieje kilka różnic, które pozwalają zrozumieć, jak rozpoznać jądro Linux:

  • Przede wszystkim warto wspomnieć o możliwości obsługi dynamicznie ładowanych modułów. Pomimo tego, że jądro tego systemu operacyjnego jest całkowicie monolityczne, możliwość dynamicznego ładowania i usuwania kodu w przypadku takiej potrzeby jest dodatkowo wspierana. Ta funkcja pierwotnie pojawiła się w wersji 0.99 i przyczyniła się do tego Peter MacDonald.
  • Jądro może obsługiwać symetryczne przetwarzanie wieloprocesorowe. W przytłaczającej większości komercyjnych wersji Unix OS ta funkcja jest obsługiwana, ale w tradycyjnych implementacjach takie wsparcie jest często nieobecne.
  • Jądro Linuksa jest wyprzedzające, to znaczy może całkowicie wyprzeć zadanie wykonawcze, nawet jeśli działa w tym trybie jądra. Spośród większości komercyjnych implementacji, jądro wyprzedzające systemu operacyjnego Unix ma tylko same IRIX, Solaris i Unix.
  • W Linuksie zwyczajowo stosowano zupełnie inne podejście do implementacji wątków, dlatego praktycznie nie różnią się one od standardowych procesów. Rozważając je z punktu widzenia jądra, można powiedzieć, że wszystkie procesy są absolutnie identyczne, tylko niektóre z nich różnią się dostępnością wspólnych zasobów.
  • Jądro Linuksa, którego opis będzie później pokazywany, nie ma pewnych funkcji Uniksa, które zostały źle zaimplementowane. W szczególności dotyczy to STREAMS i kilku innych.

Moduły

jak rozpoznać jądro Linuxa

Pomimo tego, że system jest monolityczny, może być użyty do dynamicznego wstawiania lub usuwania kodu jądra w czasie działania. Kernel ładowalne obiekty są modułami jądra Linux.

W jego rdzeniu moduł jest programem standardowym, ponieważ ma również punkty wyjścia i wejścia, i znajduje się w jego pliku binarnym. Należy jednak zauważyć, że moduły mają bezpośredni dostęp do różnych funkcji i struktur jądra. W przypadku programów znajdujących się w przestrzeni użytkownika dostęp ten jest ograniczony przy użyciu interfejsów biblioteki kompilującej.

Moduły uczestniczą w wielu różnych procesach, z którymi powiązany jest system operacyjny, w tym również w aktualizacji jądra systemu Linux. Niektóre funkcje mogą być dostępne wyłącznie dla tych modułów, które są dystrybuowane na licencji GPL, w szczególności odnosi się to do możliwości pracy z kolejkami procesów.

Zgromadzenie

Jądro Linux zbudowane jest przy użyciu specjalistycznego programu Make. Po uzyskaniu kodu źródłowego jądra, musisz rozpakować archiwum linux-2.6.18.tar.bz2, które jest wykonywane za pomocą specjalnego narzędzia Tar, które otwiera się w imieniu superużytkownika.

Polecenie makeconconfig pozwoli ci użyć standardowej konfiguracji dla tej architektury, ale powinieneś zrozumieć, że w większości przypadków to nie wystarczy, więc musisz ręcznie skonfigurować jądro. Aby wywołać program konfiguracyjny jądra, wprowadź polecenie make menuconfig. Wszystkie dodatkowe informacje dotyczące parametrów polecenia make znajdują się w oddzielnym pliku README.

Aby uruchomić jądro w minimalnej konfiguracji, wystarczy podać sterownik kontrolera IDE, którego używasz w sekcji "Obsługa mikroukładu PCI IDE". Ponadto należy zwrócić uwagę na sekcję "Systemy plików", w której należy zaznaczyć obecne systemy plików.

Kompilacja jądra rozpoczyna się po naciśnięciu polecenia make. W większości przypadków używana jest komenda make -j2, ponieważ możliwa jest szybsza aktualizacja jądra systemu Linux. W tym przypadku parametr -j2 wskazuje, że dwa wątki wykonania są uruchamiane jednocześnie.

Ostrożnie

moduły jądra Linux

Przeprowadzanie eksperymentów z jądrem może prowadzić do bardzo różnych szkodliwych procesów, ponieważ nie każdy specjalista może zaktualizować jądro Linux. Konsekwencje mogą być najpoważniejsze, w tym całkowita awaria systemu i całkowite zniszczenie informacji na dysku. Z tego powodu, aby zapewnić maksymalne bezpieczeństwo, zaleca się używanie tylko oddzielnej dystrybucji, która jest zainstalowana na maszynie wirtualnej.

Oprócz zabezpieczeń można go użyć do uzyskania jednolitej konfiguracji wszystkich komputerów, które brały udział w tej procedurze. Zaleca się używanie Slackware Linux jako takiej dystrybucji, ponieważ używa niezmodyfikowanych składników oprogramowania. VMware lub QEMU może działać jako maszyna wirtualna, ale nie jest to konieczne.

Instalacja jądra Linux zajmuje około 20 minut, a warto zauważyć, że kompilacja jądra, zbudowana zgodnie ze standardową konfiguracją, może być wykonana bez tworzenia dysku RAM, ponieważ w tym przypadku nie ma żadnych ważnych sterowników rozruchowych.

Rozwój

rozwój jądra Linuksa

Jądro to zbiór interfejsów nazywanych wywołania systemowe, które zapewniają interakcję między różnymi programami aplikacji działającymi w przestrzeni użytkownika, a także sprzętem systemu. Na przykład podczas pracy z poszczególnymi plikami narzędzia mogą nie uwzględniać typu dysku twardego, a także używanego systemu plików.

Za pomocą wywołań systemowych zapewnia się gwarancję stabilnej i bezpiecznej pracy systemu. Ponieważ rdzeń jest pośrednikiem między różnymi programami i zasobami systemowymi, mogą podejmować decyzje dotyczące przyznawania dostępu w pełnej zgodności z prawami użytkownika, a także z wieloma innymi kryteriami.

Rozwój programów aplikacyjnych odbywa się za pomocą wyspecjalizowanych interfejsów aplikacji. W tym przypadku nie ma potrzeby korelowania między interfejsami przy użyciu aplikacji i tych dostarczanych przez samo jądro. Może istnieć całkowicie identyczny interfejs API dla kilku systemów operacyjnych, a jego implementacja może być doskonała. Na przykład, system Linux i system FreeBSD są do tej pory w pełni zgodne ze standardem POSIX, w wyniku czego większość aplikacji napisanych specjalnie dla jednego systemu operacyjnego może być później przeniesiona do innego, jeśli to konieczne.

W pewnej części interfejs funkcji systemu jest zapewniany przez bibliotekę C. Na przykład funkcja printf umożliwia utworzenie linii odpowiadającej określonemu formatowi, w wyniku czego to zlewozmywak zostanie przeniesiony do systemu zapisu, który wyśle ​​go do standardowego urządzenia wyjściowego, którym może być na przykład terminal .

Dodatkowo osobna biblioteka funkcje językowe C zapewnia także dość dużą część standardu API POSIX. W szczególności, za pomocą komendy strace, jeśli jest to konieczne, można szczegółowo prześledzić odwołanie określonego programu do jądra, jeśli jest wykonywane przy użyciu wywołań systemowych. Z tego powodu polecenie to jest często używane, gdy występują błędy, aby je usunąć, a także znaleźć przyczynę ich wystąpienia.

Między innymi warto zauważyć, że Linux ma absolutnie unikalną implementację wątków, ponieważ nie ma różnicy pomiędzy wątkami i procesami. Wielowątkowość jest zorganizowana jako proces z udostępnionymi zasobami, podczas gdy istnieją osobne wątki w przestrzeni jądra, które są tam wykonywane wyłącznie. Jednak ich planowanie i wykonanie odbywa się w taki sam sposób, jak w przypadku standardowych procesów. Gdy tylko jest to możliwe, wszystkie programy uruchamiane w jądrze są nazywane oddzielnymi zadaniami, podczas gdy programy działające w trybie użytkownika są nazywane procesami.

Warto zauważyć, że w nowoczesnych systemach procesy wykorzystują jednocześnie dwa zasoby wirtualne.