Systemy operacyjne

Podstawą są jądra

opublikowano przez marcinw w dniu 2010-06-07

Mówimy, że DOS, Windows, Linux, FreeBSD, OpenBSD, ReactOS, itd. są systemami operacyjnymi. Co to tak naprawdę znaczy?

Definicji jest wiele, ja odwołam się do polskiego tłumaczenie słów Andrew Tanenbauma: "System operacyjny jest warstwą oprogramowania operującą bezpośrednio na sprzęcie, której celem jest zarządzanie zasobami systemu komputerowego i  stworzenie użytkownikowi środowiska łatwiejszego do zrozumienia i  wykorzystania.".

Myślę, że definicja jest prosta i czytelna. W każdym systemie jest to rozwiązane trochę inaczej, niemniej jednak zawsze będziemy mogli mówić o podstawowym elemencie, jakim jest jądro. Jest wczytywane i uruchamiane po starcie komputera przez moduł ładujący, czyli tzw. bootloader (ten z kolei jest uruchamiany przez BIOS/EFI) i który w  obecnych systemach zawiera mechanizmy związane z obsługą procesów (ich przerywanie, kontrola uprawnień, itd.), urządzeń (sterowniki), pamięci operacyjnej, jej rozszerzenia na dysku (czyli pamięci wirtualnej), systemów plików... O ile w Windows to instalator dobiera komponenty związane z daną konfiguracją sprzętową, o tyle np. w Linuksie to użytkownik jest w stanie bardzo precyzyjnie kontrolować ten fragment systemu.

Czym tak naprawdę jest Linux? Nazwa ta określa nie jeden system, ale całą rodzinę systemów uniksopodobnych, w których wspólne jest właśnie jądro. Do niego dodane są inne programy (najczęściej powstałe w ramach projektu GNU, ale nie tylko) tworząc tzw. dystrybucję. Spotyka się tu czasem nazwę GNU/Linux. Takimi dystrybucjami są np. Debian, Ubuntu, Mint, Slackware, Fedora, itd. Każda z nich ma najczęściej jakieś swoje zasady, np. zakaz włączania oprogramowania bez kodu źródłowego, jest zazwyczaj zgodna z  normami POSIX, bywa również zgodna ze specyfikacją określoną w ramach projektu Linux Standard Base (LSB) i domyślnie proponuje jakiś znany format paczek instalacyjnych z programami (najczęściej deb jak Debian, rpm jak Fedora, archiwum tgz z dodatkowymi plikami wewnątrz jak Slackware albo lsb jak zdefiniowano w LSB).

Z historią jądra systemu GNU/Linux nierozłącznie wiąże się data 25 sierpnia 1991 i osoba Linusa Torvaldsa (wtedy studenta uniwersytetu w Helsinkach). Wysyła on wtedy swój historyczny list, w którym pisze o chęci stworzenia takiego rozwiązania na architekturę x86. Całość jest w jakiś sposób inspirowana m.in. Miniksem. We wrześniu 1991 powstaje wersja 0.01, wydanie 0.11 z grudnia 1991 jest kompilowalne na komputerze działającym pod kontrolą siebie samego, z kolei 0.12 (luty 1992) jest opublikowana pod licencją GNU General Public License (GPL). W styczniu 1992 powstaje grupa dyskusyjna alt.os.linux, wielu ochotników zaczyna wspierać pracę Linusa. Kolejne "duże" wersje pojawiają się ze stosunkowo niedużymi odstępami:

  • 14 marca 1994 - 1.0.0
  • 9 czerwca 1996 - 2.0.0
  • 25 stycznia 1999 - 2.2.0
  • 4 stycznia 2001 - 2.4.0
  • 17 grudnia 2003 - 2.6.0

Jak widać - numery wersji składają się obecnie minimum z trzech cyfr. Jeżeli środkowa jest nieparzysta, dana wersja jest testową. Z kolei czasem spotyka się również np. czwartą cyfrę. W  Ubuntu i Mincie mamy obecnie jądro 2.6.32, mimo że została już wydana stabilna wersja 2.6.34.

Z bardziej znanych wydarzeń: w 2003 SCO pozywa IBM o  złamanie należących do nich praw patentowych (a dokładniej o dodanie do jądra linuksowego fragmentów, których byli właścicielami. Całość zostaje w końcu oddalona.

Obecnie jądro linuksowe jest udostępniane na stronie www.kernel.org na licencji GNU GPL2, skąd każdy może je bezpłatnie pobrać. Można je wykorzystywać na bardzo wielu platformach sprzętowych.

Jest monolityczne. Poszczególne elementy wewnątrz takie jak sterowniki mają dostęp do wszystkich zasobów, a więc również np. pamięci zajętej przez inne elementy, czyli działają w tzw. trybie jądra. Nie jest ważne w tym przypadku, że mogą być fizycznie ładowane z oddzielnych plików na dysku. Przyspiesza to całość, ale powoduje problemy w przypadku błędów.

Ta ostatnia wada spowodowała, że od dawna próbowano stworzyć takie jądro, w którym ilość elementów z dostępem do wszystkich zasobów byłaby minimalna, a możliwie duża ilość sterowników byłaby fizycznie od siebie odseparowana (tzw. mikrojądro). W 1992 i 2006 kwestia ta (tzn. co jest lepsze - mikrojądro czy jądro monolityczne?) była dosyć gorąco omawiana między Linusem Torvaldsem i  Andrew Tanenbaumem. O ile wczesne implementacje idei mikrojądra były dosyć wolne, obecnie z ich zaletami można się zapoznać np. w systemie Minix 3.