Co sprawia, że ​​system operacyjny jest „uniksowy”?


20

Często spotykam się z terminem „unix-like” na wielu stronach internetowych.

Nie ma standardu; jest tak, jak się zachowuje.

Ale jeśli miałbym opracować jądro od zera, co sprawiłoby, że uznano by go za „uniksopodobny”?

Zasadniczo, jakie są rzeczy, które tworzą kod napisany jak Unix?


Odpowiedzi:


15

Nie ma standardu; jest tak, jak się zachowuje.

Wierzę, że większość „uniksowych” systemów operacyjnych podejmuje bardzo poważny wysiłek, aby zastosować się do standardu POSIX , który jest nadzorowany przez Open Group, która kontroluje również specyfikację Single UNIX, która definiuje „prawdziwy UNIX”. Ten pierwszy jest rdzeniem tego drugiego.

Tak więc istnieje standard określający praktyczne cechy systemów operacyjnych typu unix . Przejrzyj listę „w pełni” i „głównie” zgodnych systemów operacyjnych na końcu artykułu w Wikipedii na temat POSIX.

Istnieje kilka oczywistych powodów, dla których linux w szczególności może nie być uważany za w pełni zgodny ze specyfikacją Single Unix Specification (SUS), ale nie dzieje się tak, ponieważ jakikolwiek system linux jest z nim niekoniecznie kompatybilny. Artykuł w Wikipedii podsumowuje specyfikację w ten sposób:

SUSv3 liczy około 3700 stron, które są tematycznie podzielone na cztery główne części:

Definicje podstawowe (XBD) - lista definicji i konwencji używanych w specyfikacjach oraz lista plików nagłówkowych C, które muszą być dostarczone przez zgodny system. Łącznie udostępniono 84 pliki nagłówków.

Shell and Utilities (XCU) - lista narzędzi i opis powłoki, sh. Łącznie określono 160 narzędzi.

Interfejsy systemowe (XSH) - zawiera specyfikację różnych funkcji, które są realizowane jako wywołania systemowe lub funkcje biblioteczne. Łącznie określono 1123 interfejsy systemowe.

Uzasadnienie (XRAT) - wyjaśnienie standardu.

Standardowym wierszem poleceń i interfejsem skryptowym jest powłoka POSIX, rozszerzenie powłoki Bourne Shell oparte na wczesnej wersji powłoki Korn.

Inne programy, usługi i narzędzia na poziomie użytkownika obejmują awk, echo, ed, vi i setki innych. Wymagane usługi na poziomie programu obejmują podstawowe usługi We / Wy (plik, terminal i sieć).

Zestaw testowy towarzyszy standardowi. Nazywa się PCTS lub POSIX Certification Test Suite.

Dodatkowo SUS zawiera specyfikację CURSES (XCURSES), która określa 372 funkcji i 3 pliki nagłówkowe. Podsumowując, SUSv3 określa interfejsy 1742.

Odnosi się to oczywiście w szczególności do wielu komponentów użytkownika (takich jak powłoka), które po prostu nie są częścią jądra Linuksa. Więc nie ma mowy, żeby linux.org et. glin. może mieć certyfikat samego jądra - w tym sensie wcale nie jest to system operacyjny. Mogą oczywiście próbować certyfikować jakiś konkretny system za pomocą jądra, ale byłoby to bez znaczenia w świetle ogólnego schematu dystrybucji: jądro i ludzie, którzy go utrzymują, są niezależni od ludzi, którzy utrzymują rdzeń użytkownika (GNU) którzy są niezależni od ludzi, którzy utrzymują rzeczywiste złożone wersje systemu operacyjnego (Debian, Fedora itp.).

Podejrzewam, że Debian lub Fedora sami mogliby zaangażować się w proces certyfikacji (więc np. RedHat Enterprise może stać się „certyfikowanym unixem”), ale rodzi to pytanie, czy tak naprawdę jest to pożądane. Zakładam, że głównym powodem, dla którego systemy SUS są uruchamiane (na skalę komercyjną, nie-konsumenckie), jest oprogramowanie napisane dla takich systemów, co po prostu nie jest niszą linuksową - ludzie, którzy to robią, zapłacą tysiące dolarów za licencję na system operacyjny, w tym wiele wsparcia itp., ponieważ płacą także dziesiątki lub setki tysięcy dolarów za licencję za każde dodatkowe oprogramowanie, które chcą uruchomić w systemie. Z drugiej strony Linux i inne wartości odstające mają na celu osiągnięcie celów projektowych wykraczających poza zwykłą zgodność do celów komercyjnych, i istnieją różne przykłady tego, np. (Zhttp://en.wikipedia.org/wiki/STREAMS ):

STREAMS było wymagane w celu zapewnienia zgodności ze specyfikacją Single UNIX w wersji 1 (UNIX 95) i 2 (UNIX 98), ale w wyniku odmowy programistom BSD i Linux udostępnienia strumieni, [wymaganie cytowania] oznaczono jako opcjonalne dla POSIX zgodność z Austin Group w wersji 3 (UNIX 03).

Interesujące zakwaterowanie, które podkreśla, że ​​SUS i The Open Group! = Linux,! = BSD itp.


2
Pamiętaj, że certyfikacja różni się od zgodności. Na przykład nie jest praktyczne, aby Linux Foundation certyfikowało każdą wersję jądra, ze względu na koszty i tempo rozwoju. Ale to nie znaczy, że (jądro) nie jest w pełni lub w większości zgodne.
strugee

2
@strugee Standard POSIX nie dotyczy jądra. Standaryzowane są polecenia (shell, ls, cat, ...) i interfejsy API (co zapewnia libc, wątki). To, co sprawia, że ​​dystrybucja oparta na systemie Linux jest uniksowa, to głównie komponenty GNU (polecenia i glibc). Jądro jest poza zakresem certyfikacji / zgodności.
jlliagre

1
Nie do obalenia, ale do wyjaśnienia (powtarzam to z mojego komentarza do odpowiedzi illuminé): standardy to „co”, jądro to „jak”. Przeczytałem tylko fragmenty standardów, ale nie sądzę, żeby w ogóle odnosiły się do „jądra” (to po prostu „system”). Tak więc certyfikacja i zgodność WRT: to „co” robi jądro / system operacyjny, a nie „jak” to robi.
goldilocks

3
@strugee Specyfikacja Single Unix dotyczy interfejsów użytkownika. Jądro jest oczywiście ostatecznie zaangażowane, ale mój komentarz dotyczył twojego stwierdzenia o certyfikacji jądra przez Linux Foundation. Jądro nie może być certyfikowane, brakuje wszystkich komponentów, z którymi współdziała proces certyfikacji. To, co można certyfikować (lub przynajmniej starać się, aby było ono jak najbardziej zgodne), to system operacyjny, czyli tak zwana dystrybucja w społeczności Linux.
jlliagre

2
@strugee To byłby możliwy powód, jednak nie chodzi tu o szybkie przechodzenie, ale fakt, że nie zobowiązujemy się do zapewnienia, że ​​nie zostaną dodane żadne niezgodne zmiany. Na przykład Solaris 10 jest zgodny, gwarantuje tę zgodność, a od czasu certyfikacji Unix03 wprowadzono kilkanaście aktualizacji. Co więcej, kombinacja Gnu / Linux stara się być tak zgodna, jak to tylko możliwe, ale nie więcej. (Prawie) nigdy nie próbował uzyskać certyfikatu, ponieważ jest to zarówno kosztowny proces i i tak nie byłby zgodny, ponieważ niektóre wymagania zostały (celowo) pominięte, a niektóre rozszerzenia są niezgodne
jlliagre

12

Aby rozwinąć pierwszą odpowiedź na temat POSIX, aby zrozumieć, co oznacza „uniksopodobny”, najpierw należy spróbować zrozumieć, czym dokładnie jest UNIX. Patrząc na dokumentację Open Group , która jest właścicielem znaku towarowego Unix, znajdziesz szczegółowe informacje na temat ewolucji specyfikacji Single UNIX - oto UNIX03 :

Norma produktu UNIX 03 jest znakiem dla systemów zgodnych z wersją 3 specyfikacji Single UNIX. Jest to znacznie ulepszona wersja standardu produktu UNIX 98. Obowiązkowe udoskonalenia obejmują dostosowanie do ISO / IEC 9989: 1999 C Programming Language, IEEE Std 1003.1-2001 i ISO / IEC 9945: 2002. Ten standard produktu obejmuje następujące obowiązkowe standardy produktu: Międzynarodowe wywołania systemowe i biblioteki Rozszerzone V3, Polecenia i narzędzia V4, Język C V2 oraz Międzynarodowe interfejsy terminalowe.

UNIX98 :

Standard produktu UNIX 98 jest znacznie ulepszoną wersją standardu produktu UNIX 95. Obowiązkowe rozszerzenia obejmują (1) interfejsy wątków, (2) rozszerzenie obsługi wielobajtowej (MSE), (3) obsługę dużych plików, (4) dynamiczne łączenie, (5) zmiany w celu usunięcia zależności lub ograniczeń sprzętowych długości danych oraz (6) ) Zmiany w roku 2000. Ponadto uwzględniono następujące opcjonalne ulepszenia: narzędzia do administrowania oprogramowaniem i zestaw interfejsów API do obsługi w czasie rzeczywistym. Ten standard produktu obejmuje następujące obowiązkowe standardy produktu: Międzynarodowe połączenia systemowe i biblioteki Rozszerzone V2, Polecenia i narzędzia V3, Język C, Usługa transportowa (XTI) V2, Gniazda V2 i Międzynarodowe interfejsy terminalowe. Ponadto może być również zgodny ze standardem produktu do administrowania oprogramowaniem.

UNIX95 (mój nacisk):

Niniejszy standard produktu definiuje skonsolidowaną platformę do obsługi szerokiej gamy aplikacji pierwotnie opracowanych dla jednej z systemów operacyjnych, które zostały opracowane na podstawie kodu systemu operacyjnego UNIX i / lub interfejsów pierwotnie opracowanych przez AT&T , oprócz udostępnionych udogodnień według standardu produktu podstawowego. Ma szerszy zakres niż baza. Ten standard produktu obejmuje następujące standardy produktu: Rozszerzone międzynarodowe połączenia systemowe i biblioteki, Polecenia i narzędzia V2, Język C, Usługa transportowa (XTI), Gniazda i Międzynarodowe interfejsy terminalowe.

Wersje serwerowe standardu dodają w niektórych przypadkach serwer internetowy i IPv6.

Widzimy więc, że odniesienie do AT&T Bell Laboratories, a język C jest sednem tego, czym jest UNIX: język C, modułowe narzędzia podstawowe i powłoka oraz sposób, w jaki jądro, system plików i inne kluczowe komponenty systemu operacyjnego zostały zaprojektowane i wdrożone .

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Właśnie tam książka The Design of UNIX Operating System autorstwa Maurice J. Bacha staje się nieocenioną lekturą, ponieważ w tym momencie ma ona znaczenie historyczne. Należy oczywiście zauważyć, w jaki sposób jest to związane z innymi wynalazkami, takimi jak język C. C został opracowany przez AT&T Bell do implementacji Uniksa w języku, który może być tak szybki jak asemblacja, ale przenośny na różnych urządzeniach, a wiele POSIX jest rozszerzeniem standardu C.

Jeśli chodzi o samo jądro, często znajduje się schemat koncepcyjny, taki jak ten, który ilustruje, o co tradycyjnie chodziło w jądrze UNIX:

wprowadź opis zdjęcia tutaj

Oto kilka fragmentów klasycznej książki pana Bacha (1986), która omawia podstawy jądra systemu UNIX System V.

Jednak wszystkie [podsystemy i programy aplikacji] korzystają z usług niższego poziomu ostatecznie dostarczanych przez jądro i korzystają z tych usług za pośrednictwem zestawu wywołań systemowych. System V zawiera około 64 wywołań systemowych, z których często używanych jest mniej niż 32. Mają proste opcje, dzięki którym są łatwe w użyciu, ale zapewniają użytkownikowi dużą moc. Zestaw wywołań systemowych i algorytmy wewnętrzne, które je implementują, tworzą jądro jądra [...]

[...] jego dwoma głównymi komponentami są podsystem plików i podsystem procesów.

Pliki są zorganizowane w systemy plików, które są traktowane jako urządzenia logiczne; urządzenie fizyczne, takie jak dysk, może zawierać kilka urządzeń logicznych (systemów plików). Każdy system plików ma superblok opisujący strukturę i zawartość systemu plików, a każdy plik w systemie plików jest opisany przez i-węzeł, który podaje atrybuty pliku. Wywołania systemowe, które manipulują plikami, robią to przez i-węzły. [i pula buforów]

[...] Istnieją dwie wersje i-węzła: kopia dysku, która przechowuje informacje i-węzła, gdy plik nie jest używany, oraz wewnętrzna kopia, która rejestruje informacje o aktywnych plikach.

Wykonywanie procesów użytkownika w systemach UNIX jest podzielone na dwa poziomy: użytkownik i jądro. Gdy proces wykonuje wywołanie systemowe, tryb realizacji procesu zmienia się z trybu użytkownika do trybu jądra : gdy sporządzi i próby systemu operacyjnego do obsługi żądania użytkownika [...]

[...] filozofią systemu UNIX jest dostarczanie prymitywów systemu operacyjnego, które umożliwiają użytkownikom pisanie małych, modułowych programów, które można wykorzystać jako bloki konstrukcyjne do budowania bardziej złożonych programów. Jednym z takich prymitywnych elementów widocznych dla użytkowników powłoki jest możliwość przekierowania we / wy .

[...] Oprócz obsługi wywołań systemowych, jądro zajmuje się ogólną księgowością dla społeczności użytkowników, kontrolowaniem planowania procesów, zarządzaniem przechowywaniem i ochroną procesów w pamięci głównej, przetwarzaniem przerwań, zarządzaniem plikami i urządzeniami oraz dbaniem o błąd systemowy warunki.

Jeśli interesują Cię różne implementacje jądra w systemach operacyjnych typu Unix, możesz także zajrzeć do implementacji FreeBSD (4.4BSD) lub jądra Macha lub spojrzeć na porównanie tych funkcji.

Im więcej wiesz o projekcie UNIX, tym bardziej rozumiesz, co stało się na poniższym diagramie o pochodzeniu UNIX i jego historii . Pan Bach mówi głównie o Systemie V w swojej książce, ale omawia także BSD:

wprowadź opis zdjęcia tutaj

Jest w tym coś więcej niż na pierwszy rzut oka . Na przykład Mac OSX ma certyfikat UNIX03, ale czy widzisz, że jest podłączony do jednego z czystych UNIXów (głównie w kolorze czerwonym)?

wprowadź opis zdjęcia tutaj

Powyżej widać, jak BSD, GNU, Microsoft i różne osoby przyczyniły się do powstania tego wszechświata. Mimo że GNU i ostatecznie Linux nie mają bezpośredniego rodowodu dla UNIX, widać, że GNU stara się przeprojektować w świecie open source narzędzia i oprogramowanie z komercyjnego UNIXa, które zostały zamknięte. Tak więc spojrzenie na utrzymywane oprogramowanie GNU daje pomysł na przykład na początkowe prototypowe aplikacje i biblioteki.

Wojny licencyjne odegrały pewną rolę w ewolucji (i czasami stagnacji) systemu UNIX. Od razu widać, że UNIXy są ustawione zgodnie z typem licencji - zamknięta vs. BSD ( BSD pozwala na zamknięcie kodu źródłowego ... patrz OSX) i GPL, która pozwala Linuxowi i GNU uzupełniać się w świecie copyleft. Oto klasyczna mapa jądra Linuksa opracowana początkowo przez Linusa Torvaldsa, która pokazuje także, jak „jądro” może być w systemie operacyjnym uniksopodobnym:

wprowadź opis zdjęcia tutaj

Wskazuje to na pomysł, że typ projektu „ jądra ” nie jest tym, co czyni standard UNIX ani tym, co definiuje system operacyjny typu unix. Dowodzi tego fakt, że wiele systemów uniksopodobnych może mieć monolityczne jądro lub mikrojądro - monolit był klasycznym typem projektu dla UNIX. W rzeczywistości, nawet w czystych systemach UNIX, HPUX ma monolityczne jądro, podczas gdy AIX używa mikrojądra. Ta debata na temat projektowania dotyczy wydajności i nie jest związana z pochodzeniem ani tożsamością Uniksa. Z drugiej strony istnieje tradycyjne koncepcyjne podejście do świadczenia usług dla oprogramowania, radzenia sobie z systemami plików itp. W systemach operacyjnych typu UNIX / unix.

Wierzę, że takie rozważania dodają kontekst do części twojego pytania dotyczącej systemu operacyjnego.


3
+1 Kilka dobrych punktów tutaj: 1) O związku między C i Unixem (aby dodać: C został opracowany przez AT&T Bell w celu wdrożenia Unixa z językiem, który może być tak szybki jak asembler, ale przenośny na innym sprzęcie, i wiele POSIX jest rozszerzeniem standardu C). 2) Ten projekt jądra jest niezależny od standardów. Standardy to „co”, jądra to „jak”.
goldilocks

1
@goldilocks Dziękuję, dodałem swój komentarz na temat C dosłownie. Próbowałem wyjaśnić, że względy jądra nie są powiązane ze standardem. Pytanie zakłada, że ​​jest coś specyficznego w jądrze uniksopodobnym, ale tak nie jest. Z drugiej strony historycznie pierwsze jądra uniksowe mogły być w taki i taki sposób. Moje rozumienie jest ograniczone, ale zakładam, że jądra bardzo się zmieniły, ponieważ sprzęt bardzo się zmienił od lat 70-tych. Oczywiste jest to, że jądro nie definiuje systemu uniksowego / podobnego do uniksa, pomyślał, że jądro linuksa wyraźnie definiuje GNU / Linux lub Linux.
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.