Chciałbym wiedzieć, jak działa system operacyjny w pigułce :
- Podstawowe elementy, na których jest zbudowany
- Jak te komponenty współpracują ze sobą
- Co sprawia, że UNIX UNIX
- Co odróżnia go od innych systemów operacyjnych, takich jak Windows
Chciałbym wiedzieć, jak działa system operacyjny w pigułce :
Odpowiedzi:
System UNIX składa się z kilku części lub warstw, jak chciałbym je nazwać.
Aby uruchomić system, program o nazwie moduł ładujący mieszka w pierwszym sektorze partycji dysku twardego. Jest uruchamiany przez system, a następnie lokalizuje jądro systemu operacyjnego i ładuje je.
Nakładanie warstw
Jądro. Jest to program centralny uruchamiany przez moduł ładujący. Wykonuje podstawową interakcję sprzętową systemu (dysk, pamięć, wideo, dźwięk) i oferuje wirtualne środowisko, w którym może uruchamiać programy. Jądro dostarcza również wszystkie sterowniki, które radzą sobie ze wszystkimi małymi różnicami między urządzeniami sprzętowymi. Dla świata zewnętrznego (wyższe warstwy) każda klasa urządzeń wydaje się zachowywać dokładnie w ten sam spójny sposób - na czym z kolei mogą się opierać programy.
Podsystemy tła. Istnieją tylko zwykłe programy, które po prostu nie przeszkadzają. Obsługują takie funkcje, jak zdalne logowanie, zapewniają centralną magistralę komunikatów i wykonują działania na podstawie zdarzeń sprzętowych / sieciowych. Na przykład wykrywanie Bluetooth, zarządzanie Wi-Fi itp. Wszelkie usługi sieciowe (serwer plików, serwer wydruku, serwer WWW) również działają na tym poziomie. W systemach UNIX są to zwykłe programy.
Narzędzia wiersza poleceń. Są to wszystkie małe programy, które można uruchomić do edytowania tekstu, pobierania plików lub administrowania systemem. W tym momencie system UNIX jest w pełni użyteczny dla administratorów systemu. W systemie Windows ta warstwa tak naprawdę już nie istnieje.
Graficzny interfejs użytkownika. To także tylko programy, jedyną różnicą jest to, że rysują okna na ekranie zamiast pisać tekst. Dzięki temu system jest łatwiejszy w użyciu dla zwykłych użytkowników.
Każda usługa lub wydarzenie przejdzie od dołu do góry.
Biblioteki - wspólna platforma
Programy wykonują wiele typowych czynności, takich jak wyświetlanie okna, rysowanie rzeczy na ekranie lub pobieranie pliku. Te rzeczy są takie same dla wielu programów, stąd kod jest umieszczany w osobnych plikach „bibliotecznych” ( .so
plikach - czyli obiekt współdzielony). Biblioteka może być współużytkowana przez wszystkie programy.
Dla każdej możliwej rzeczy jest biblioteka. Jest jeden do odczytu / zapisu plików PNG. Jest jeden do plików JPEG, do odczytu XML, do szyfrowania, do odtwarzania wideo i tak dalej.
W systemie Linux popularnymi bibliotekami dla programistów aplikacji są Qt i Gtk. Te biblioteki używają bibliotek niższego poziomu wewnętrznie do swoich specyficznych potrzeb, jednocześnie prezentując swoją funkcjonalność w przyjemny, spójny i zwięzły sposób dla twórców aplikacji, aby tworzyć aplikacje jeszcze szybciej.
Biblioteki zapewniają platformę aplikacji, na której programiści mogą budować aplikacje użytkowników końcowych dla systemu operacyjnego. Im więcej bibliotek wysokiej jakości zapewnia system, tym mniej kodu programista musi napisać, aby stworzyć piękny program.
Niektóre biblioteki mogą być używane w różnych systemach operacyjnych (na przykład Qt is), niektóre są naprawdę ściśle powiązane z jednym systemem operacyjnym. Ograniczy to możliwość uruchamiania programu tylko na tej platformie.
Komunikacja między procesami
Trzecim rogiem systemu operacyjnego jest sposób, w jaki programy mogą się ze sobą komunikować. Są to mechanizmy komunikacji między procesami (IPC). Istnieją one w kilku odmianach, np. W pamięci współdzielonej lub między dwoma programami jest ustawiony mały kanał do wymiany danych. Istnieje również centralna magistrala komunikatów, na której każdy program może wysłać wiadomość i odebrać odpowiedź. Służy to do komunikacji globalnej, gdzie nie wiadomo, który program może odpowiedzieć.
Od bibliotek po systemy operacyjne
Po zainstalowaniu bibliotek, IPC i jądra, programiści mogą budować wszelkiego rodzaju aplikacje do usług systemowych, administracji użytkowników, konfiguracji, administracji, pracy biurowej, rozrywki itp. Stanowi to kompletny pakiet, który początkujący użytkownicy uznają za „system operacyjny” „.
W systemach UNIX / Linux wszystkie usługi są tylko programami. Wszystkie narzędzia administracyjne systemu to tylko programy. Wszyscy wykonują swoją pracę i mogą być ze sobą powiązani. Podsumowałem wiele głównych programów na stronie http://codingdomain.com/linux/sysadmin/
Części wyróżniające się w systemie Windows
UNIX to głównie system programów, plików i ograniczonych uprawnień. Unika się wielu komplikacji, dzięki czemu jest to potężny system, podczas gdy wygląda na to, że ma łatwą pracę.
W szczególności są to zasady, które można znaleźć w systemach UNIX / Linux:
Istnieją jednolite sposoby uzyskiwania dostępu do informacji. („Wszystko to tylko plik”). Możesz otworzyć plik, gniazdo sieciowe, kanał IPC, parametry jądra i zablokować urządzenie jako plik. Stąd pojawienie się wirtualnych systemów plików w / dev, / sys i / proc. Jedynym API kiedykolwiek potrzebne jest open
, read
i close
.
Podstawowy system jest przejrzysty. Każdy program działa na tych samych zasadach. W przeciwieństwie do systemu Windows nie ma sztucznej różnicy między „programem konsoli”, „programem GUI” lub „usługą w tle”. Wszystkie są tylko programami, które wykonują różne rzeczy. Można je wszystkie obserwować, analizować i debugować w ten sam sposób.
Ustawienia są czytelne, edytowalne i mogą być opatrzone komentarzami. Zwykle mają format w stylu INI, ale mogą używać niestandardowego formatu na potrzeby tej aplikacji. Ponieważ są to tylko pliki, można je kopiować do innych systemów, archiwizować lub tworzyć kopie zapasowe za pomocą standardowych narzędzi.
Żadnych dużych aplikacji „zrób to wszystko na raz”. Mantra brzmi: „zrób jedną rzecz, zrób to dobrze”. Narzędzia wiersza poleceń mogą być łączone w łańcuch i razem mogą być potężne. Oddzielne usługi (np. SMTP, IMAP i POP oraz logowanie) są osobnymi podprogramami, unikając skomplikowanych problemów związanych z kodem i bezpieczeństwem. Złożone środowiska pulpitu delegują ciężką pracę do poszczególnych programów.
fork()
. Nowe programy są uruchamiane przez samo klonowanie istniejącego programu. Klon konfiguruje wszystko (np. Uchwyty plików) i opcjonalnie zastępuje się nowym kodem programu. Dzięki temu bardzo łatwo jest zastosować te same ustawienia zabezpieczeń i ograniczenia do nowych programów, współdzielić pamięć lub skonfigurować mechanizm IPC. Koszt rozpoczęcia procesu jest również bardzo niski.
System plików to jedno drzewo, w którym można montować inne partycje dysku i udziały sieciowe. Znowu istnieje uniwersalny sposób dostępu do danych. Typowe lokalizacje systemu (np. /usr
Można je łatwo zamontować jako udział sieciowy.
System został zbudowany z myślą o niskich uprawnieniach użytkownika. Po zalogowaniu każdy użytkownik (poza rootem) ogranicza swoje własne zasoby, uruchamiając tylko aplikacje i pliki. Usługi sieciowe zmniejszają swoje uprawnienia tak szybko, jak to możliwe. Istnieje jeden jasny sposób, aby uzyskać więcej uprawnień lub poprosić kogoś o wykonanie uprzywilejowanej pracy w ich imieniu. Każde inne połączenie jest ograniczone przez ograniczenia i ograniczenia programu.
Każdy program przechowuje ustawienia w ukrytym pliku / folderze katalogu domowego użytkownika. Żaden program nigdy nie próbuje zapisać pliku ustawień globalnych.
Uprzywilejowanie w stosunku do otwarcie opisanych mechanizmów komunikacji w stosunku do tajnych mechanizmów lub konkretnych mechanizmów 1 do 1. Zachęcamy innych dostawców i programistów do przestrzegania tej samej specyfikacji, dzięki czemu można łatwo łączyć, wymieniać, a jednocześnie pozostać luźno powiązanym.
UNIX to silny system operacyjny oparty na solidnej konstrukcji, która od ponad 40 lat odnosi sukcesy (to prawie wieczność w informatyce). Centralna technologia oparta jest na języku C i niezliczonych małych programach: komendach UNIX. Podstawowa filozofia została streszczona przez McIlroya:
Pisz programy, które robią jedną rzecz i robią to dobrze. Pisz programy do współpracy. Pisz programy do obsługi strumieni tekstowych, ponieważ jest to uniwersalny interfejs.
Więcej na temat filozofii UNIX można znaleźć w ESRaymond „The Art of UNIX Programming”.
Jest tu kilka doskonałych odpowiedzi. Jednak jedną rzeczą, która moim zdaniem została pominięta, jest to, jak * nix różni się od innych systemów operacyjnych, szczególnie Microsoft Windows.
Podstawowa koncepcja już omówiona powyżej: „zrób jedną rzecz, zrób to dobrze” jest tak ważna dla systemów operacyjnych * nix, że czasem można ją przeoczyć. Jednak ta filozofia projektowania sprawia, że Linux jest tak elastyczny i wydajny.
Na przykład graficzny interfejs użytkownika (GUI) dla MS Windows jest powiązany z systemem operacyjnym. Zainstalowanie systemu operacyjnego MS bez GUI jest praktycznie niemożliwe. W systemie Linux można łatwo wywołać serwer lub system osadzony, który w ogóle nie ma komponentu graficznego. Może być całkowicie sterowany z wiersza poleceń i nadal być w pełni funkcjonalnym serwerem.
Modułowa konstrukcja systemu Linux pozwala również administratorowi systemu obniżyć usługę, zaktualizować ją i przywrócić bez konieczności ponownego uruchamiania systemu operacyjnego. W rzeczywistości, jedyny raz, kiedy musisz zrestartować system operacyjny Linux, jest to, kiedy samo jądro jest modyfikowane lub uaktualniane.
Na przykład, możesz zainstalować nowego menedżera Windows (gnome, kde, cokolwiek) w systemie Linux, a użytkownik zalogowany do systemu może nigdy nie być świadomy.
W systemie Windows często najprostsze zmiany w systemie wymagają ponownego uruchomienia, chociaż czasem jest to bardziej kwestia bezpieczeństwa niż faktyczne wymagania techniczne. Chciałbym stwierdzić, że jest to jedna z podstawowych wad systemów operacyjnych MS. W systemie Linux można uaktualnić wiele modułów sterowników i mieć niewielki wpływ na użytkowników lub nie mieć go wcale. W systemie Windows może być konieczne ponowne uruchomienie całego urządzenia, jeśli po prostu zainstalujesz nową aplikację.
Ta modułowa konstrukcja zapewnia także Linuksowi niezwykłą elastyczność. Każdy system Linux można dostosować do konkretnego zadania, które należy wykonać, przy jak najmniejszym nakładzie zasobów. W systemie Windows nie można wyłączyć interfejsu GUI, aby uruchomić prosty serwer HTTP. System Windows przyjmuje ślad pamięci, który tworzy barierę, poniżej której sprzęt nie może przejść. Jest to główny powód, dla którego Linux stał się preferowanym systemem operacyjnym dla wielu aplikacji mobilnych i wbudowanych.
Mógłbym to kontynuować, ale mam nadzieję, że te przykłady pomogą wyjaśnić, dlaczego Linux stał się tak popularny i jak naprawdę różni się od tego innego systemu operacyjnego.
„Projektowanie systemu operacyjnego UNIX” byłoby dobrą książką do przeczytania.
Poleciłbym przeczytać artykuł dotyczący programowania zaawansowanego w środowisku Unix 2e, aby dowiedzieć się wiele o interfejsie API SUS (Single Unix Standard) i POSIX, który da ci wyobrażenie o tym, co sprawia, że Unix Unix oraz jak działają komponenty i jak działają razem.
Jest to jednak bardzo ciężka książka C i więcej podręcznika. Jeśli masz problem z bezsennością, po prostu weź go ze sobą do łóżka. Poza tym, jeśli jesteś programistą Unix C, to musisz go mieć.
W duchu dwóch poprzednich rekomendacji książkowych również poleciłbym
Interfejs programowania LINUX autorstwa M. Kerrisk
która, choć ukierunkowana na temat programowania systemu UNIX / Linux, ujawnia mnóstwo szczegółowych informacji o tym, jak działa system Linux i ogólnie systemy UNIX z perspektywy programisty / użytkownika. Zagłębia się bardzo szczegółowo w większość pocisków wymienionych w odpowiedzi vdboor i ujawnia wystarczająco dużo szczegółów w zrozumiały i czytelny sposób, aby uzyskać odczucie / obraz podstawowych koncepcji UNIX i ich podstaw.