Dlaczego system operacyjny i jądro są traktowane osobno w systemie Linux? [Zamknięte]


9

Jeśli chodzi o dowolny system operacyjny Linux, w tym Ubuntu, ludzie mają tendencję do rozróżniania terminów jądro i system operacyjny . Jest to poprawne w przypadku systemu Windows i rodziny OS X, ale dlaczego jest tak rozpowszechniony wśród społeczności Linux? Czy istnieje sposób na aktualizację jądra systemu operacyjnego bez aktualizacji samego systemu operacyjnego? Lub odwrotnie? Jeśli tak, jak może to być przydatne?


3
Proste: wolność. Swoboda tworzenia własnej wersji tego, czego potrzebujesz. Jądro? Muszla? Pulpit. Idź po to.
Rinzwind

6
Ponieważ osobni? Ten sam powód, dla którego menedżer okien jest traktowany oddzielnie od serwera X (ponieważ są one oddzielne) i dlaczego powłoka jest traktowana oddzielnie od emulatora terminala (ponieważ są one również osobne). Teraz, jeśli zapytasz, dlaczego zostały zaprojektowane w ten sposób ...
user253751

Ubuntu działa teraz również na jądrze systemu Windows 10, co pokazuje, że jest to prawdziwa separacja. Oczywiście Windows nie jest wyposażony w serwer X, który nieco komplikuje sytuację, ale należy się tego spodziewać, gdy brakuje części.
MSalters

@MSalters Menedżer okien w systemie Windows jest nieco trudny, tak; Jeśli jednak ktoś chce uruchomić X w systemie Windows, istnieje wiele sposobów radzenia sobie z tym. Najłatwiejszym dla outsidera byłby prawdopodobnie „emulator” serwera na istniejącym menedżerze okien, chociaż nie mam pojęcia, jak dobrze to można odwzorować (kiedy ostatnio widziałem X wewnętrzne, nie miałem nadziei). Nie wstrzymywałbym oddechu - nie brzmi to tak, jakby wiele osób było zainteresowanych uruchomieniem X w systemie Windows.
Luaan,

Odpowiedzi:


12

Cały system GNU / Linux jest zbudowany przy użyciu podejścia modułowego. Przeważnie możesz ulepszyć ( wymienić ogólnie) pojedynczy moduł bez dotykania innych. Omawiany moduł może być bootloaderem, jądrem, powłoką, poleceniem, środowiskiem graficznym, aplikacją GUI, czymkolwiek…

Oczywiście jest to prawdą, o ile jesteś w stanie poprawnie zarządzać zależnościami. W zestawie dystrybucji wokół Ubuntu APT służy do automatycznego rozwiązywania zależności.

Możesz zainstalować inną wersję jądra za pomocą polecenia:

sudo apt install linux-image-<version>

Tak długo, jak pozwala na to APT, powinieneś być w stanie zrestartować się i używać wybranej wersji jądra, niezależnie od tego, czy jest to wersja ogólna, lowlatency itp. Albo sam zbudujesz wersję jądra, np. Real-Time Linux i używasz go z bieżącym systemem .


Wielkie dzięki, ale czy byłoby spójne? Powiedzmy, że Ubuntu 14.04 LTS ma jądro w wersji 3.19.0, aw przypadku aktualizacji jądra nie jest to już 14.04 LTS, prawda? Więc jeśli spróbuję później zaktualizować cały system lub wbudowany mechanizm aktualizacji (Software Updater) przyniesie mi nową wersję, czy będzie wiedział o zaktualizowanej wersji jądra? Czy jest w stanie sprawdzić moduły osobno i wprowadzić tylko wymagane zmiany, bez wpływu na już zaktualizowane moduły?
The Dreams Wind

1
Zobacz pakiety.ubuntu.com/search?ke words=linux-image, aby uzyskać długą listę wersji jądra obsługiwanych przez każdą wersję Ubuntu. Wersja Ubuntu zależy od różnych rzeczy od wersji jądra, ale tak naprawdę nie wiem, które… Jeśli jesteś tym zainteresowany, możesz zacząć od innego pytania.
Melebius

1
@AleksandrMedvedev Znacznie później to znalazłem! Wersja Ubuntu znajduje się w pliku /etc/issuedostarczonym przez base-filespakiet. Jak już pisałem, nie ma to związku z wersją jądra.
Melebius

5

Jak wiadomo Kernel jest ważną częścią systemu operacyjnego, w dystrybucjach GNU / Linux można łatwo aktualizować jądro bez dotykania innej części systemu operacyjnego. Jednak po prostu aktualizujemy część naszego systemu operacyjnego.

System operacyjny składa się z dwóch części: przestrzeni jądra i przestrzeni użytkownika.

Tak, możesz zaktualizować przestrzeń jądra bez dotykania przestrzeni użytkownika, jeśli tylko nowa wersja jest kompatybilna z bieżącą przestrzenią użytkownika.

A jeśli chodzi o aktualizację narzędzi przestrzeni użytkownika, to kolejne tak.

Kiedy biegniesz:

sudo apt-get upgrade

Jeśli dostępna była aktualizacja jądra, otrzymasz:

The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic

więc aktualizujesz tylko przestrzeń użytkownika i uruchamiasz coś takiego

sudo apt-get dist-upgrade

aktualizujesz wszystko, łącznie z jądrem.

Aby zaktualizować tylko jądro do nowszej wersji, użyj czegoś takiego:

$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print $1}' | head -4
linux-image-4.4.0-21-generic
linux-image-4.10.0-14-generic
linux-image-4.10.0-19-generic
linux-image-4.10.0-20-generic

aby znaleźć listę nowszych jąder, a następnie zainstaluj ją jako nowy pakiet, na przykład:

sudo apt install linux-image-4.10.0-14-generic

To zdecydowanie nie jest prawda.
mook765

Popraw mnie;) więc uczę się czegoś nowego :)
Ravexina

3
sudo apt upgradezaktualizuje także jądro, jeśli są dostępne nowe wersje. sudo apt full-upgradedobrze usunie pakiety, co asudo apt upgradenie zrobisz.
Soren A

Ponieważ teraz aktualizacja do nowego jądra jest rodzajem instalacji, a podczas korzystania z upgradepodkomendy nie instaluje on żadnego nowego pakietu, nie usuwa również żadnych pakietów, dlatego używamy dist-upgrade. przynajmniej apt-getdziała w ten sposób;) więc zaktualizowałem moje polecenia, aby zapobiec nieporozumieniom.
Ravexina,

1
Mam większe doświadczenie z aptpoleceniem, po krótkim badaniu wydaje się, że twoja odpowiedź jest teraz poprawna apti radzęapt-get sobie z tym inaczej, patrz hiroom2.com/2016/05/20/ubuntu-16-04-debian-8-apt -polecenie /… . Tak więc trochę wiedzy dla nas obu ...
mook765

3

Najpierw kilka wyjaśnień, ponieważ czuję, że nie rozumiesz, jak powstały systemy GNU / Linux. Miejcie ze sobą, jeśli nie jest to dla was nic nowego:

„Jądro” to nie tylko kolejny program, który działa, ale jest to część systemu operacyjnego zapewniająca podstawowe funkcje: jeśli chcesz uruchomić program (powiedzmy, że wpisujesz „ls” w wierszu poleceń), plik binarny musi zostać załadowany z dysku (który obejmuje niektóre operacje systemu plików w celu zlokalizowania go i pewne operacje na plikach w celu jego odczytania), następnie tworzone jest „środowisko procesowe”: pamięć jest przydzielana, wydawany jest numer procesu itp. itd. Wszystkie poprzednie działania (FS, odczyt z pliku, ...) są obsługiwane przez biblioteki systemowe, ale te ostatnie są funkcjami jądra. W pewnym sensie jądro „jest systemem operacyjnym”, a wszystko inne to tylko dekoracja wokół niego.

„Linux” jest w rzeczywistości (tylko!) Jądrem bez innych części systemu operacyjnego. Linus Torvalds zaczął pisać go, biorąc jądro Andrew OS Tanenbaumsa MINIX i uzupełniając go tak, aby było pełnowartościowym i naprawdę sprawnym jądrem. Do dnia dzisiejszego Linus (i wielu innych, którzy współuczestniczą / wnieśli swój wkład), którzy rozwijają to jądro. To jądro jest nadal bardzo podobne do UNIX, ale NIE JEST jądro UNIX.

„GNU” powstało jako inicjatywa „ulepszenia” wielu popularnych komend UNIX. Nie będę dyskutować, czy im się udało, czy nie, ale na pewno napisali dużo oprogramowania i kiedyś mieli zbiór programów narzędziowych. Zaczęli nawet opracowywać własne jądro systemu operacyjnego (HURD), które opierało się głównie na systemie UNIX, ale było zdecydowanie inne. Ale do dnia dzisiejszego HURD jest na wczesnym etapie rozwoju i prawie nie działa. „GNU” btw. jest skrótem od „GNU (is) Not UNIX” - próbowali przezwyciężyć niektóre (postrzegane lub rzeczywiste) ograniczenia UNIX-a z zamiarem stworzenia następcy UNIX-a (ponownie: nie chcę wchodzić w dyskusję, jeśli się powiedzie lub nie - nie obchodzi mnie, czy jest to „lepsze” czy „gorsze”, ale zdecydowanie jest inne!).

Tak więc, z zestawem narzędzi pozbawionych jądra i jądrem pozbawionym zestawu narzędzi, naturalnym rozwiązaniem było połączenie tych dwóch elementów: GNU / Linux.

Mimo to, aby mieć działający (i działający) system operacyjny, potrzebujesz czegoś więcej niż tylko jądra i zestawu narzędzi: potrzebujesz systemu zarządzania pakietami, procedur instalacji, konfiguracji szablonów, potrzebujesz ...

Kilka różnych osób (lub ich grup) doszło do tego wniosku i wykorzystało kombinację GNU / Linux do stworzenia systemu GNU / Linux, który im się podoba, dodając dokładnie to, o czym mówiłem powyżej: stworzyli menedżera pakietów, system pakowania , procedury instalacji i co więcej. Te różne grupy (odpowiednio wyniki ich wysiłków) są tym, czym są różne rozkłady. Obecnie istnieją trzy różne menedżery pakietów (odpowiednie dla Debiana i systemów pochodnych, takich jak * ubuntu, rpm dla RedHat i systemów pochodnych, takich jak Fedora, CentOS i więcej, pacman dla ArchLinux), ale wszystkie one po prostu zarządzają pakietami oprogramowania, które jest (zasadniczo) to samo: jak się nazywa, gdy wydajesz „ls” lub „df” itp.,

Tak więc „w zasadzie” możesz aktualizować jądro samodzielnie, tak jak ludzie, którzy stworzyli dystrybucję z różnych wersji całego oprogramowania, o którym mówiłem powyżej.

Ale to jest naprawdę duże, ALE: ponieważ jest nie tylko jądro i dodatkowe oprogramowanie, ale wiele innych rzeczy, o których należy pamiętać, takich jak narzędzia do konfiguracji systemu (systemd, z których niektóre dystrybucje korzystają, a niektóre nie), sieć narzędzia do zarządzania, takie jak NetworkManager, który z kolei zależy od niektórych wersji biblioteki GNOME itp. itd. - „dystrybucja” jest dość złożoną rzeczą i istnieje szansa, że ​​jeśli spróbujesz zaktualizować jądro, zaktualizujesz wiele inne rzeczy z powodu wielu współzależności.

Mimo to, a także „w zasadzie”, jak wyżej: możesz również stworzyć własną dystrybucję, pobierając wszystkie źródła, kompilując je, znajdując działający zestaw kombinacji wersji, wdrażając system pakowania (lub wykorzystując jeden z istniejących) ) - i tak dalej, dopóki nie będzie można rozpowszechniać, instalować i konfigurować systemu. To właśnie robią twórcy dystrybucji, takich jak Ubuntu, i to nie jest cud - po prostu dużo złożonej pracy, więc w rzeczywistości większość użytkowników unika tego i używa czegoś, co jest gotowe do użycia.

Mam nadzieję, że to odpowiada na twoje pytanie.


GNU nie zaczęło jako inicjatywa „ulepszenia” wielu popularnych komend UNIX. GNU był systemem operacyjnym od samego początku, do celów wolnego oprogramowania w odpowiedzi na restrykcyjną własność UNIX. Możesz przeczytać więcej na ich stronie internetowej . Postanowili przenieść całe swoje oprogramowanie na Linuksa, ponieważ do czasu stworzenia Linuksa GNU wciąż nie miało działającego jądra.
Ian Emnace

3

Najprostsza odpowiedź nie ma nic wspólnego z Ubuntu; jest to związane ze sposobem budowania GNU / Linux. Jeśli spróbujesz spojrzeć na to jak na programistę systemu, zobaczysz dwa światy oddzielone ostrymi ramkami (ABI).

Świat jądra, w którym pracują programiści niskiego poziomu, jest systemem sam w sobie. Ma wszystko, co zwykle można znaleźć w zwykłej aplikacji. Jedyną różnicą jest to, że użytkownik nie jest faktyczną osobą korzystającą z maszyny, ale światem przestrzeni użytkownika. „Aplikacja” jądra to pośrednik, serwer korzystający z maszyny - duch w powłoce.

Teraz przestrzeń użytkownika to normalny świat, w którym bawi się każdy użytkownik i programista. Ma sztywne interfejsy API, reguły, pliki i, co najważniejsze, abstrakcyjny, dziecinny obraz komputera, na którym działa. Ponieważ użytkownik widzi tylko tę część, a to stanowi 99% wielkości dystrybucji, łatwo jest źle nazwać ją System operacyjny. Właściwą nomenklaturę można nazwać dystrybucją oprogramowania, utworzoną przez jakiś byt (Canonical, Fedora itp.), Za pomocą jądra (Linux, HURD, BSD itp.) I zbudowaną przy użyciu zestawu narzędzi (zwykle dostarczanych przez GNU ).

Aby odpowiedzieć na twoje pytanie, w GNU / Linux (tak jak w Windows i OSX, zaufaj mi), możesz zmienić jądro, nie tylko wersję, ale całą architekturę (jądro Linux, jądro HURD) i tak długo, jak długo ABI nie jest dotknięty, nigdy nie dokonaj żadnej zmiany w świecie użytkowników ... W czasach, gdy prawdziwy człowiek musiał zbudować jądro ze źródeł, możesz przejść kilka takich zmian, aby uzyskać kiepską kamerę internetową USB pracować ... Teraz z modułowym jądrem wystarczy zainstalować moduł, a otrzymasz zupełnie nowy świat jądra, z ABI (czasem) rozszerzonym o nowe funkcje ...

Znowu to samo dla przestrzeni użytkownika. Kiedy instalujesz nową aplikację, powiedzmy, z repozytorium Ubuntu, w 99% przypadków, Twoim największym problemem jest kompatybilność innych komponentów przestrzeni użytkownika, a nie samego jądra. Są przypadki, w których wersja jądra dyktuje (poprzez ABI) zakres rzeczy, które można zainstalować w przestrzeni użytkownika, ale celem (przynajmniej dla programistów) jest to, aby odejść ...

Kolejną rzeczą do rozważenia jest to, że możesz (i jest to dość łatwe) zbudować własną, specjalną, jedyną w swoim rodzaju dystrybucję GNU / Linux. Zdobądź jądro, kilka prostych skryptów, kilka aplikacji i gotowe. To takie proste (spójrz na dystrybucje OpenWRT GNU / Linux, dla sprzętu sieciowego, cała dystrybucja mieści się w około 16 Mb lub więcej).


„ostra granica (ABI)”. Myślę, że masz na myśli API. ABI to, z braku lepszego terminu, kod do interfejsu sprzętowego. Z drugiej strony API to interfejs kod-kod.
Sam

1

Sądzę, że są trzymane osobno, ponieważ jądro jest kluczową częścią. Jądro z regresją lub po prostu nieudaną aktualizacją może wyrządzić sporo szkód. Możesz chcieć aktualizować go rzadziej; lub dopiero po pewnym czasie, aby upewnić się, że nikt nie zgłasza niepokojących błędów.

Również niektórzy zaawansowani lub profesjonalni użytkownicy ponownie kompilują jądro, aby zmodyfikować jego zachowanie, aby lepiej odpowiadało ich potrzebom. W takim przypadku oczywiście nie chcesz, aby była automatycznie zastępowana wersją fabryczną przy każdej aktualizacji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.