Naciskasz przycisk zasilania. Ekran się podświetla. Klikasz na ikonę. Gdy machasz myszką, by wywołać Spotify lub Chrome, możesz poczuć się jak dyrygent orkiestry. Ale to poczucie całkowitej kontroli jest iluzją.
Za szybą ekranu pracuje niewidzialny pracownik. Zajmuje się obsługą złożonej i zawiłej logiki, więc Ty nie musisz tego robić. Ten proces roboczy to system operacyjny.
Bez tego Twój sprzęt stanie się jedynie kosztownym gadżetem. System operacyjny jest menedżerem. Decyduje, który program będzie miał dostęp do procesora. Wysyła dane do drukarki. Zapobiega awariom pamięci w przypadku otwarcia zbyt wielu kart.
Najwięksi gracze na rynku komputerów stacjonarnych
Na rynku komputerów osobistych nadal dominuje system Microsoft Windows. Jest to standardowe rozwiązanie dla większości zadań biurowych i systemów do gier. Użytkownicy Apple korzystają z systemu macOS, który jest ściśle zintegrowany ze sprzętem.
Następny jest Linux. Znacie go jako silnik Internetu. Obsługuje większość serwerów, dzięki którym działają strony internetowe. Ale Linux nie jest już tylko dla administratorów systemów. Dystrybucje takie jak Ubuntu czy Fedora stały się zaskakująco wygodne dla codziennych użytkowników, którzy chcą uciec od ekosystemu Microsoftu.
Ekosystemy mobilne i wbudowane
Rynek smartfonów to duopol. Google Android ma globalną większość. Apple iOS dominuje na rynku premium w krajach takich jak USA.
Niektórzy producenci próbują uciec od tego duopolu. Huawei korzysta z własnego HarmonyOS. Samsung aktywnie promuje powłokę One UI. Jednak większość dodatków do Androida nadal opiera się na tym samym jądrze.
Apple nie ogranicza się tylko do telefonów. iPad działa na iPadzie. Apple Watch – na watchOS. Dekoder Apple TV – w systemie tvOS. Każdy z nich jest wariacją na ten sam temat: ścisła kontrola, wysokie bezpieczeństwo i głęboka integracja sprzętu.
Wyłącz ekran
Często zapominamy, że teraz wszystko ma „mózg”. Twoja inteligentna lodówka to ma. Twój telewizor to ma. System multimedialny Twojego samochodu działa na niestandardowym systemie operacyjnym, często opartym na QNX lub Android Automotive.
Samochody autonomiczne to zupełnie inna historia. Ich systemy operacyjne muszą przetwarzać dane z czujników w ciągu milisekund. Opóźnienie to coś więcej niż tylko niedogodność. Jest to potencjalne zagrożenie bezpieczeństwa.
Co właściwie sprawia, że program jest systemem operacyjnym?
Nie każde oprogramowanie jest systemem operacyjnym. Procesor tekstu nie jest systemem operacyjnym. Przeglądarka internetowa nie jest systemem operacyjnym.
Aby zakwalifikować się jako system operacyjny, oprogramowanie musi spełniać trzy funkcje:
- Zarządzanie sprzętem: Współpracuje bezpośrednio z procesorem, pamięcią i urządzeniami pamięci masowej.
- Udostępnij interfejs użytkownika: Umożliwia interakcję za pomocą myszy lub ekranu dotykowego.
- Uruchamianie aplikacji: Zapewnia środowisko, w którym działają i działają inne programy.
„System operacyjny jest pomostem pomiędzy Twoimi intencjami a możliwościami maszyny.”
Bez tego mostu nie będzie można uruchamiać aplikacji. Nie będziesz mógł zapisywać plików. Nie będziesz mógł połączyć się z Wi-Fi. Znajdziesz się w ślepym zaułku.
Dlaczego jest to dla Ciebie ważne?
Zrozumienie systemu operacyjnego ma znaczenie, ponieważ od niego zależy Twoje bezpieczeństwo, prywatność i elastyczność. Aktualizacje systemu Windows mogą wymusić ponowne uruchomienie systemu. macOS blokuje dostęp do usług Apple. Linux oferuje swobodę, ale wymaga konserwacji.
W kolejnych rozdziałach przyjrzymy się szczegółowo, jak dokładnie działają te systemy. Przyjrzymy się rdzeniowi. Omówimy interfejs użytkownika. Pokażemy Ci, jak odzyskać część kontroli, którą Twoim zdaniem posiadasz.
Dlaczego większość gadżetów radzi sobie bez systemu operacyjnego
Można założyć, że każdy chip obsługujący kod potrzebuje pełnoprawnego systemu operacyjnego. To jest błędne. Włóż komputer do kuchenki mikrofalowej. Robi jedną rzecz: podgrzewa jedzenie. Dane wejściowe pochodzą z klawiatury. Sprzęt nigdy się nie zmienia.
Złożony system operacyjny jest tutaj tylko balastem. To zwiększa koszty. Dodaje niepotrzebnej złożoności. Zamiast tego takie urządzenia wykonują jedno zakodowane na stałe zadanie. To jest system wbudowany. Pracuje stale. Nie załaduje się. Nie jest aktualizowany. To po prostu działa.
Ale w przypadku innych urządzeń zasady się zmieniają.
Wartość systemu operacyjnego
Dlaczego potrzebujemy systemu operacyjnego? Ponieważ zapewniają elastyczność. Bez systemu operacyjnego jesteś ograniczony do decyzji producenta sprzętu. System operacyjny stwarza możliwość:
- Wykonuj różne zadania na tym samym sprzęcie
- Interakcja z użytkownikami w złożony sposób
- Dostosuj się do zmieniających się potrzeb w czasie
Dlatego każdy komputer stacjonarny jest wyposażony w system operacyjny. Mamy rodzinę Windows od Microsoftu. Jest macOS od Apple. Jest też rodzina UNIX, mozaika osób i korporacji tworzona przez dziesięciolecia. Oprócz nich istnieją setki innych systemów. Specjalizują się w komputerach mainframe. Robotyka. Produkcja. Kontrola w czasie rzeczywistym.
Potęga przenośnego kodu
Oto kluczowa różnica między kuchenką mikrofalową a laptopem. Jedno urządzenie można modyfikować. Inne – nie.
Systemy operacyjne używają przenośnego kodu, a nie stałych obwodów fizycznych. To nie jest wypadek. To świadomy wybór projektanta. Pozwala na dokonanie zmian bez wyrzucania urządzenia.
Dla użytkownika komputera stacjonarnego oznacza to trwałość. Otrzymujesz aktualizację zabezpieczeń. Instalujesz łatkę. Dodajesz nową aplikację. Jeśli system operacyjny stanie się zbyt rozdęty lub niekompatybilny, możesz zainstalować zupełnie nowy system operacyjny. Nie wyrzucasz komputera do kosza. Nie zaczynasz od zera, kupując nowy sprzęt. Jeśli wiesz, jak uzyskać dostęp do systemu, możesz zmienić jego zachowanie.
Co właściwie robi system operacyjny?
Usuń interfejs użytkownika. Usuń ikony. Co zostało?
W najprostszym przypadku system operacyjny spełnia dwie krytyczne funkcje.
Po pierwsze zarządza zasobami. Dotyczy to komputerów, tabletów i smartfonów. Przetwarza dane procesora. Przydziela pamięć. Zarządza przestrzenią dyskową. Ona to wszystko równoważy.
Po drugie, zapewnia stabilny interfejs. Zapewnia aplikacjom spójny sposób interakcji ze sprzętem. Aplikacja nie musi znać napięcia procesora. Nie musi znać mapy sektorów dysku twardego. System operacyjny wyodrębnia szczegóły. Umożliwia działanie oprogramowania bez znajomości tajemnic maszyny.
To właśnie ta abstrakcja pozwala na działanie oprogramowania na różnych komputerach. Dlatego nie trzeba pisać nowego sterownika za każdym razem, gdy pojawia się nowa karta graficzna. System operacyjny wykonuje tłumaczenie.
Pomyśl o jednostce centralnej (CPU) jak o ruchliwej kuchni podczas wieczornego natłoku klientów. Kilka programów wymaga uwagi jednocześnie. Niektóre wymagają więcej pamięci, inne wymagają dużej przepustowości we/wy. Bez porządku panuje chaos. Z pomocą przychodzi system operacyjny. Zachowuje się jak surowy, ale sprawiedliwy rodzic. Jego zadaniem jest takie rozdystrybuowanie zasobów, aby żadna aplikacja nie „psuła imprezy”. Zarządza ograniczoną pojemnością dla wspólnego dobra wszystkich użytkowników i aplikacji działających jednocześnie.
Dlaczego konsekwencja jest ważna
Drugim kluczowym obowiązkiem jest zapewnienie spójnego doświadczenia użytkownika. Staje się to krytyczne w przypadku wdrażania wielu komputerów tego samego typu lub wymiany komponentów sprzętowych. Sekretem jest ustandaryzowany interfejs programowania aplikacji (API).
Deweloperzy polegają na tej spójności. Piszą kod raz, a następnie wdrażają go na różnych komputerach. Robią to z dużą pewnością, że oprogramowanie będzie nadal działać, nawet jeśli maszyna docelowa ma inną ilość pamięci RAM lub miejsca na dysku. Interfejs API abstrahuje różnice sprzętowe. Programista nie musi przepisywać podstawowej logiki dla każdej konkretnej konfiguracji.
Obsługa różnorodności sprzętu
Nawet na unikalnej, ręcznie zbudowanej maszynie system operacyjny pozostaje stabilny podczas aktualizacji. Dzieje się tak, ponieważ sprzętem zarządza system operacyjny, a nie aplikacja. Aplikacja żąda jedynie usług, a system operacyjny je udostępnia.
Stwarza to ogromne wyzwanie dla programistów. Muszą zachować elastyczność systemów operacyjnych, aby wspierać tysiące producentów. Dzisiaj wchodzisz do sklepu i możesz złożyć komputer PC z drukarką marki A, dyskiem marki B i specjalistycznym urządzeniem peryferyjnym marki C. System operacyjny musi obsługiwać dowolną kombinację. Eliminuje złożoność i zapewnia działanie oprogramowania niezależnie od użytego układu krzemowego.
Typy systemów operacyjnych
Większość ludzi po prostu klika i oczekuje, że ekran zrobi to, co chce. Ale za tym kursorem kryje się złożona hierarchia typów oprogramowania. Nie wszyscy są stworzeni jednakowo. Kategoria zależy od tego, czym steruje komputer i jakie aplikacje na nim uruchamia.
Twarde systemy czasu rzeczywistego
Systemy operacyjne czasu rzeczywistego (RTOS) nie dbają o tapetę pulpitu. Obsługują sprzęt. Instrumenty naukowe. Automatyka przemysłowa.
RTOS jest jednostką szczelną. Nie posiada interfejsu użytkownika. Brak narzędzi dla użytkownika końcowego. Tylko czysta funkcja. Celem jest dokładność. Za każdym razem wykonanie danej operacji powinno zająć dokładnie tyle samo czasu.
Dlaczego to jest ważne? Wyobraź sobie złożony mechanizm. Jeśli ramię robota porusza się szybciej niż planowano po prostu dlatego, że system był bezczynny, może o coś uderzyć. Katastrofa. Jeśli porusza się wolniej ze względu na obciążenie systemu, linia produkcyjna się zatrzymuje. Obydwa wyniki to porażki. Jedynym wyznacznikiem jest konsekwencja (przewidywalność czasu reakcji).
Wykonuj jedną akcję na raz
Systemy przeznaczone dla jednego użytkownika i jednozadaniowe są w pewnym sensie przeżytkiem, ale istnieją. Pozwalają jednej osobie zrobić jedną rzecz. Kropka.
MS-DOS jest klasycznym przykładem. Otwierasz program. pracujesz. Nie można pobrać pliku w tle podczas edycji tekstu. To jest liniowe. Tylko. Niezwykle proste.
Nowoczesny standard: systemy wielozadaniowe dla jednego użytkownika
Prawdopodobnie właśnie tego teraz używasz. Jest to standard dla komputerów stacjonarnych i laptopów. Microsoft Windows. MacOS firmy Apple.
Umożliwiają wykonywanie wielu zadań jednocześnie. Możesz utworzyć dokument, pobrać plik i wydrukować wiadomość e-mail. System operacyjny przełącza się między tymi zadaniami tak szybko, że sprawia wrażenie jednoczesnego. W rzeczywistości nie jest to prawdą. Jest po prostu bardzo dobry w przełączaniu kontekstu.
Równoważenie obciążenia: systemy z wieloma użytkownikami
Systemy operacyjne obsługujące wielu użytkowników umożliwiają wielu osobom dostęp do zasobów w tym samym czasie. Ale to nie jest pobłażliwość.
System musi równoważyć wymagania. Każdy użytkownik otrzymuje osobne zasoby. Jeśli aplikacja użytkownika A ulegnie awarii, użytkownik B tego nie zauważy. Uniksa. VMS-a. Komputery mainframe, takie jak MVS. Są to urządzenia wagi ciężkiej dla środowisk korporacyjnych, w których stabilność dla społeczności użytkowników jest absolutnym wymogiem.
Przetwarzanie rozproszone
Rozproszone systemy operacyjne zarządzają nie tylko jedną maszyną, ale ich siecią.
Zamiast jednego superkomputera rozwiązującego duży problem, system operacyjny dzieli go na części. Części te wysyłane są do wielu mniejszych komputerów. Można to zobaczyć w ogromnych farmach serwerów. Ale nie tylko korporacje z tego korzystają. Entuzjaści i pedagodzy budują własne systemy rozproszone przy użyciu tanich maszyn. Czasami nawet zmieniano przeznaczenie konsol do gier.
To sposób na połączenie mocy obliczeniowej bez kupowania superkomputera.
Nie myl technologii sieciowych z dostępem wielu użytkowników
W tym miejscu robi się niejasno. System dla wielu użytkowników to nie to samo, co system online dla jednego użytkownika.
Czy pracujesz dla firmy? Najprawdopodobniej używasz systemu dla jednego użytkownika. Administrator kontroluje, co możesz zainstalować. Można drukować na udostępnionej drukarce. Możesz uzyskać dostęp do serwera plików dla dokumentów wydziałowych.
Są to technologie sieciowe. Nie dostęp dla wielu użytkowników. Sam system operacyjny nie przyznaje jednoczesnych praw dostępu różnym użytkownikom na tej konkretnej maszynie lokalnej. Po prostu współdziała z innymi maszynami.
Proces uruchamiania: jak system operacyjny przejmuje kontrolę
Po włączeniu zasilania system operacyjny nie uruchamia się natychmiast. Po pierwsze, oprogramowanie układowe działa.
Na starszych komputerach był to BIOS. Nowe maszyny korzystają z UEFI (Unified Extensible Firmware Interface). Ten kod sprawdza sprzęt. Czy wszystko działa? W UEFI sprawdza również, czy oprogramowanie rozruchowe jest legalne. Bezpieczny rozruch. Żadnych zmian.
Po pomyślnym przejściu testów oprogramowanie sprzętowe przekazuje kontrolę do modułu ładującego bootstrap.
Ładowarka
Bootloader ma jedno zadanie. Załaduj system operacyjny do pamięci. Uruchom to.
To jest mały program. Z grubsza mówiąc, proste. Konfiguruje programy sterowników dla podsystemów sprzętowych. Udostępnia pamięć. Część pamięci jest zajęta przez system operacyjny. Część to informacje o użytkowniku. Część – aplikacje.
Tworzy struktury danych. Sygnały. Flagi. Semafory. Są to linie komunikacyjne pomiędzy podsystemami i aplikacjami.
Następnie przekazuje klucze do systemu operacyjnego. Zarządzanie przechodzi w inne ręce.
Co właściwie robi system operacyjny
Po załadowaniu system operacyjny kontroluje podstawowe funkcje. Są one podzielone na następujące kategorie:
- Sterowanie procesorem
- Zarządzanie pamięcią
- Zarządzanie urządzeniami
- Zarządzanie magazynem
- Interfejs aplikacji
- Interfejs użytkownika
- Zarządzanie bezpieczeństwem systemu
To są filary. Każdy system operacyjny, od telefonu po superkomputer, obejmuje te siedem obszarów. Narzędzia, których używają do wykonywania tych funkcji, znacznie się różnią, ale cele pozostają te same. Utrzymuj sprzęt w dobrym stanie. Utrzymuj działanie oprogramowania. Nie pozwól użytkownikowi zepsuć wszystkiego.
Moc obliczeniowa jest zasobem ograniczonym. Jeśli chcesz, aby Twój komputer obsługiwał połączenie wideo, jednocześnie pobierając duży plik i przeprowadzając skanowanie antywirusowe, procesor musi dzielić swój czas. To nie magia. To jest matematyka. A to jest kontrolowane przez ścisłą hierarchię.
System operacyjny analizuje coś więcej niż tylko otwartą aplikację. Patrzy na procesy. Proces to dowolny fragment oprogramowania wykonujący jakąś czynność. Możesz myśleć o swojej przeglądarce internetowej jako o jednej. Ale to nieprawda. Tak, jest to proces, ale uruchamia inne procesy, które obsługują żądania sieciowe, alokują pamięć i renderują. W tle działa także wiele niewidocznych procesów, które zarządzają operacjami wejścia/wyjścia dysku lub sprawdzają system pod kątem złośliwego oprogramowania. To system operacyjny ustala harmonogram, a nie aplikacje widoczne na ekranie.
W procesie prawdziwa praca jest wykonywana w wątkach. Aplikacja musi mieć co najmniej jeden proces, a proces ten musi mieć co najmniej jeden wątek. Harmonogram zarządza wątkami aż do najmniejszej jednostki wykonania. Ta różnica ma znaczenie, ponieważ przełączanie wątków jest szybsze i wymaga mniej zasobów niż przełączanie procesów. Wykonując wiele zadań jednocześnie, nie wystarczy tylko przełączać okna. Przełączasz kontekst procesora pomiędzy wątkami należącymi do różnych procesów.
Rola przerwań w sterowaniu procesorem
Płynny przepływ kodu nieustannie zakłóca rzeczywistość. Przerwania to sygnały wysyłane przez sprzęt lub oprogramowanie w celu zwrócenia uwagi procesora. Wyobraź sobie spotkanie, podczas którego ktoś nagle podnosi rękę. Procesor wstrzymuje swoje działanie, aby odpowiedzieć na przerwanie.
Nie wszystkie przerwania są sobie równe. System operacyjny może czasami maskować przerwania. Oznacza to, że tymczasowo ignoruje sygnały z mniej krytycznych źródeł, aby bez zakłóceń wykonać określone zadanie. Ale niektórych zakłóceń nie można zignorować. Są to przerwania niemaskowalne (NMI). Wymagają natychmiastowego działania niezależnie od tego, co robi procesor.
Dlaczego jest to dla Ciebie ważne? Weź pod uwagę baterię laptopa. Jeśli ładunek spadnie do krytycznie niskiego poziomu, zostanie wyzwolony NMI. Nie czeka, aż edytor tekstu zapisze dokument. Natychmiast inicjuje procedurę wyłączania lub uśpienia. Zignorowanie tego może spowodować utratę danych lub uszkodzenie sprzętu. Kiedy pojawiają się przerwania niemaskowalne, system operacyjny daje pierwszeństwo integralności systemu, a nie wątkowi aplikacji.
Iluzja wielozadaniowości
W systemie jednozadaniowym harmonogram jest prosty. Aplikacja działa do momentu wystąpienia przerwania lub otrzymania danych wejściowych od użytkownika. Jednak nowoczesne systemy są wielozadaniowe. System operacyjny powinien stwarzać wrażenie, że wszystko dzieje się w tym samym czasie. Nawet w przypadku procesorów wielordzeniowych każdy rdzeń przetwarza tylko jedno zadanie na raz. Iluzja jednoczesności powstaje dzięki prędkości.
System operacyjny przełącza się między procesami tysiące razy na sekundę. Dzieje się to na tyle szybko, że nie zauważasz luk. Ale mechanika procesu jest precyzyjna. Oto, co dzieje się podczas tej zmiany:
- Proces przechowuje określone zasoby w pamięci RAM, rejestrach, stosach i kolejkach.
- System operacyjny przydziela procesowi określoną liczbę cykli procesora.
- Po wygaśnięciu tych cykli zegara system operacyjny zawiesza proces.
- Zapisuje stan pierwszego procesu: kopiuje do pamięci wszystkie rejestry, stosy i kolejki. Rejestrowana jest również dokładna wartość wskaźnika instrukcji, przy której proces został zatrzymany.
- Ładuje stan kolejnego procesu: odtwarza jego rejestry i kolejki z pamięci.
- Drugi proces ma swoją kolej.
Nazywa się to przełączaniem kontekstu. Jest skuteczny, ale nie darmowy. Kopiowanie pamięci i aktualizacja rejestrów wymaga cykli zegara. Jeśli wykonujesz zadanie intensywnie obciążające procesor, częste przełączanie kontekstu może powodować opóźnienia. System operacyjny stara się to zminimalizować, grupując powiązane wątki lub przydzielając procesom o wyższym priorytecie dłuższe przedziały czasowe.
Dlaczego liczba rdzeni nie rozwiązuje wszystkich problemów
Możesz kupić 16-rdzeniowy procesor i założyć, że Twoje problemy zostały rozwiązane. Ale to nieprawda. Każdy rdzeń z natury pozostaje jednowątkowym modułem wykonawczym. Jeśli Twoje oprogramowanie jest słabo zoptymalizowane, nie będzie wykorzystywać wszystkich tych rdzeni. Załaduje jeden rdzeń, podczas gdy inne są bezczynne.
Dlatego ważna jest optymalizacja oprogramowania. Programiści powinni projektować aplikacje w taki sposób, aby uruchamiały wiele wątków, które można niezależnie planować. Jeśli aplikacja jest jednowątkowa, maksymalnie wykorzysta jeden rdzeń, pozostawiając resztę drogiego sprzętu bezczynną. System operacyjny może zaplanować działanie innych procesów na tych bezczynnych rdzeniach, ale nie może współdzielić między nimi aplikacji jednowątkowej.
Interakcja pomiędzy sprzętem i oprogramowaniem to ciągłe negocjacje. Procesor zapewnia cykle zegara. System operacyjny je oddziela. Oprogramowanie je zużywa. Kiedy jedna warstwa nie może jasno komunikować się z innymi, cierpi na tym produktywność. Odczuwasz to jako opóźnienia. System postrzega to jako nieefektywność.
Zawsze jest granica. Bez względu na to, ile rdzeni dodasz, przełączanie kontekstu powoduje narzut. Im szybciej się przełączasz, tym więcej cykli zegara poświęcasz na sam przełącznik, a nie na obliczenia. To kompromis. Małe opóźnienie ze względu na pozory równoległości. Taka jest cena nowoczesnych komputerów.
Kiedy system operacyjny przełącza się między zadaniami, nie tylko zgaduje, co się dzieje. Opiera się na specjalnej strukturze danych zwanej blokiem sterowania procesem (PCB). Pomyśl o tym bloku jako o kombinacji identyfikatora procesu i jego bieżącego podsumowania. System operacyjny potrzebuje każdego szczegółu, aby wstrzymać jedno zadanie i kontynuować inne bez utraty kontekstu.
Każdy blok zawiera unikalny identyfikator. Wskazuje, gdzie w kodzie i danych proces został ostatnio zatrzymany. Rejestruje dokładny stan rejestrów i flag. Wyświetla listę otwartych plików. Granice pamięci i stan we/wy są monitorowane. Priorytet jest również ustalany.
Bez tych szczegółów system operacyjny byłby ślepy przy zmianie kontekstu.
Proces nie zawsze jest aktywny. Czasami jest wstrzymany. Może czekać na naciśnięcie klawisza. Podczas oczekiwania nie zużywa cykli procesora. Jest w trybie bezczynności. Po nadejściu sygnału wejściowego status ulega zmianie. System przenosi go ze stanu oczekiwania do stanu działania. Blok sterowania procesem staje się wówczas instrukcją. Informuje mechanizm przełączający dokładnie, jak wznowić wykonywanie.
Dzieje się to niezauważone. Nie widzisz samego przełącznika. Widzisz tylko płynne przejścia. Każdemu procesowi przydzielana jest wystarczająca ilość czasu procesora, aby zakończyć swoją pracę. Ale jest granica. Jeśli otworzysz zbyt wiele aplikacji, system operacyjny zacznie działać. Spędzi więcej cykli na zapisywaniu i przywracaniu rejestrów. Linie będą dłuższe. Stosy są głębsze.
System spędza więcej czasu na przełączaniu niż na wykonywaniu użytecznej pracy. Nazywa się to trząśnięciem (biciem). To cyfrowy odpowiednik psychicznego przeciążenia. Komputer próbuje wykonać zbyt wiele na raz. On „dławi się”. Zwykle trzeba interweniować. Zamknij aplikacje. Uruchom ponownie system. Przywróć porządek chaosowi.
Programiści starają się projektować systemy z myślą o tym problemie. Tworzą mechanizmy obronne. Ale Ty też możesz pomóc. Dodaj pamięć RAM. Zamknij karty. Pozwól systemowi operacyjnemu efektywnie zarządzać zasobami.
Do tej pory przyglądaliśmy się harmonogramowaniu dla systemów jednoprocesorowych. Większość nowoczesnych maszyn ma wiele rdzeni. System operacyjny musi rozdzielać pracę pomiędzy nimi. Równoważy popyt i dostępne cykle.
Asymetryczne systemy operacyjne rezerwują jeden procesor tylko dla samego systemu operacyjnego. Procesy aplikacji otrzymują pozostałe procesory. System operacyjny wykonuje swoją konserwację oddzielnie.
Symetryczne systemy operacyjne rozdzielają pracę w różny sposób. Równoważą popyt i dostępność na wszystkich procesorach. Nawet jeśli działa tylko system operacyjny, obciążenie jest rozkładane. Pamięć też jest wspólna. Dotyczy to również układów wielordzeniowych.
Być może używasz teraz systemu symetrycznego. Jest to powszechne we współczesnych środowiskach.
Jeśli system operacyjny jest jedyną jednostką zużywającą czas procesora, wówczas procesor nie jest jedynym wąskim gardłem. Zarządzanie pamięcią staje się kolejnym priorytetem.
Przechowywanie pamięci i zarządzanie nią
Systemy operacyjne to zasadniczo kontrolery ruchu w pamięci komputera. Mają dwa główne zadania. Po pierwsze, zapewniają każdemu procesowi wystarczającą ilość miejsca do działania bez zakłócania pracy innych aplikacji. Po drugie, zarządzają różnymi typami pamięci sprzętowej, aby wszystko działało tak szybko, jak to możliwe.
Pierwsze wyzwanie dotyczy separacji. System operacyjny tworzy ścisłe granice pomiędzy typami oprogramowania i indywidualnymi aplikacjami.
Spójrzmy na prosty przykład. Wyobraź sobie mały system z tylko 1 megabajtem pamięci o dostępie swobodnym (RAM). Podczas uruchamiania system operacyjny przydziela sobie 300 kilobajtów. Następnie zajmuje 200 kilobajtów na dole puli sterowników sprzętu. Pozostawia to dokładnie 500 kilobajtów na rzeczywiste aplikacje.
Po uruchomieniu programów system operacyjny przydziela im część pozostałego miejsca. Jeśli otworzysz nową aplikację, gdy inne są już uruchomione, system może zmniejszyć aktywność otwartych okien, aby zwolnić zasoby. Ale co się stanie, gdy te 500 kilobajtów zostanie całkowicie zapełnione?
Możesz dokupić więcej RAMu. Większość nowoczesnych komputerów PC pozwala zwiększyć pojemność z 8 do 16 gigabajtów lub więcej. Ale nawet przy ogromnej ilości pamięci procesor może uzyskać dostęp tylko do jednego adresu na raz. Większość pamięci RAM jest bezczynna, podczas gdy jednostka centralna (CPU) przetwarza aktywne dane.
Tutaj właśnie wchodzi w grę zarządzanie pamięcią wirtualną.
System operacyjny stale usuwa nieużywane dane z pamięci RAM i ładuje dane potrzebne bieżącemu procesowi. Tworzy to iluzję, że każdy proces ma swoją prywatną i rozległą przestrzeń. Zapobiega to uszkodzeniu danych pomiędzy procesami i utrzymuje stabilność systemu nawet przy bardzo małej ilości pamięci fizycznej.
Ale miejsce na dysku to nie jedyny czynnik. System operacyjny musi równoważyć potrzeby pomiędzy trzema różnymi poziomami pamięci, uporządkowanymi według szybkości.
Zrozumienie hierarchii pamięci i stronicowania
Szybkość ma znaczenie. Jeśli procesor musi poczekać, wszystko zwalnia. Hierarchia wygląda następująco:
- Duża pamięć podręczna: To mała, niesamowicie szybka pamięć umieszczona obok procesora. Kontrolery pamięci podręcznej przewidują, jakie dane będą wkrótce potrzebne i pobierają je z pamięci głównej, zanim jeszcze o nie poprosisz. Wszystko zależy od przewidywania i szybkości.
- Pamięć główna: To jest standardowa pamięć o dostępie swobodnym (RAM). Jest ona mierzona w gigabajtach i to właśnie ona zwiększa się, gdy komputer zaczyna zwalniać.
- Pamięć dodatkowa: To jest dysk twardy (HDD) lub dysk półprzewodnikowy (SSD). Jest znacznie wolniejszy niż pamięć RAM, ale oferuje ogromną ilość pamięci. W zarządzaniu pamięcią wirtualną pamięć dodatkowa działa jako zbiornik nadmiarowy dla wirtualnej pamięci RAM.
System operacyjny zarządza tymi warstwami. Przenosi dane w blokach zwanych stronami pomiędzy dostępnymi typami pamięci, ponieważ procesy wymagają więcej zasobów. To ciągły, niewidzialny akt równoważenia.
Czy jeden proces potrzebuje więcej pamięci podręcznej? System operacyjny przenosi strony, aby sprostać tej potrzebie. Ktoś inny potrzebuje więcej fizycznej pamięci RAM? Przerzuca bezczynne strony na dysk SSD.
Dlaczego jest to dla Ciebie ważne? Ponieważ pozwala na jednoczesne uruchamianie wielu ciężkich aplikacji na komputerze bez awarii. Bez takiego zarządzania system zatrzymałby się w momencie zapełnienia pamięci RAM. System operacyjny utrzymuje system w działaniu, decydując, co ma pozostać na szybkim pasie, a co parkuje na wolnym pasie.
Ale kompromisem jest zawsze szybkość. Stronicowanie danych do pamięci dodatkowej powoduje opóźnienia. Dlatego posiadanie większej ilości fizycznej pamięci RAM często wydaje się bezpośrednim wzrostem wydajności. Zmniejszasz potrzebę wykonywania kosztownych operacji stronicowania.
System operacyjny dba o złożoność. Pozostaje tylko wynik: system, który obsługuje wiele aplikacji, utrzymuje je w izolacji i nie brakuje mu miejsca.
Ukryty tłumacz w twoim systemie
Sterowniki są niewidzialnymi pośrednikami w przetwarzaniu danych. Nie widzisz, że działają, ale za każdym razem, gdy naciśniesz klawisz lub zapiszesz plik, są zajęte. Ścieżka między systemem operacyjnym (OS) a prawie każdym sprzętem, który nie jest przylutowany do płyty głównej, przechodzi bezpośrednio przez te programy. Ich zadaniem jest tłumaczenie. Zamieniają chaos elektryczny podsystemów sprzętowych w język wysokiego poziomu, który system operacyjny i aplikacje mogą faktycznie zrozumieć.
Pomyśl o tym. System operacyjny widzi dane jako pliki. Drukarka widzi impulsy świetlne. Dysk SSD widzi poziomy napięcia w określonych komórkach pamięci. Kierowcy wypełniają tę lukę. Pobierają plik zdefiniowany przez system operacyjny i tłumaczą go na strumienie bitów zapisywane na nośniku lub na impulsy laserowe skierowane na papier. Bez tej warstwy translacyjnej Twój komputer będzie jedynie stertą drogiego metalu i krzemu, która nie wie, co ze sobą zrobić.
Dlaczego sterowniki żyją poza jądrem
Sterowniki są oddzielone od głównego rdzenia systemu operacyjnego z konkretnego powodu: elastyczności. Gdyby każde nowe wymaganie wymagało modyfikacji jądra, ponownej kompilacji i ponownej dystrybucji całego systemu operacyjnego, nigdy nie zobaczylibyśmy aktualizacji. Utrzymywanie sterowników zewnętrznych umożliwia producentom dodawanie funkcjonalności do podsystemów sprzętowych bez wpływu na podstawy systemu.
To oddzielenie oznacza również, że twórcy systemów operacyjnych nie muszą pisać każdego sterownika. Producenci sprzętu często tworzą własne sterowniki lub płacą za ich rozwój. Daje im to bezpośrednią kontrolę nad aktualizacją i ulepszaniem możliwości wejścia/wyjścia (I/O). Taki jest podział pracy. System operacyjny zapewnia scenę. Producent sterownika pisze skrypt.
Przepaść między sterownikami społecznościowymi a sterownikami korporacyjnymi
Łatwo jest poczekać na aktualne sterowniki w systemie Windows lub macOS. Duże, dochodowe firmy stojące za tymi systemami operacyjnymi mają zasoby zapewniające kompatybilność. Linux i inne systemy open source podążają inną ścieżką. Polegają na programistach społecznościowych. Wolontariusze poświęcają swój czas i umiejętności programistyczne, aby zapewnić sterowniki do systemów i urządzeń peryferyjnych. To jest praca miłości. I to zwykle działa. Jednak spójność może się różnić w zależności od tego, kto w danym momencie utrzymuje kod.
Bufory i kolejki: kontrolery ruchu
Zarządzanie we/wy to coś więcej niż tylko tłumaczenie. Chodzi także o kontrolę tempa. System operacyjny zarządza operacjami we/wy poprzez kolejki i bufory. Są to specjalne magazyny, które przechwytują strumień bitów z urządzenia. Może to być klawiatura. Może to być port szeregowy. Bufor przechowuje te bity i przesyła je do procesora tak szybko, jak procesor może je przetworzyć.
Dlaczego to jest ważne? Ponieważ procesy konkurują o czas procesora. System operacyjny instruuje bufor, aby kontynuował przyjmowanie danych wejściowych z urządzenia, nawet jeśli procesor jest zajęty. Przestaje wysyłać dane do procesora, dopóki proces korzystający z tego wejścia nie zostanie zawieszony. Po wznowieniu tego procesu bufor zwalnia zgromadzone dane.
Mechanizm ten pozwala na pracę szybkich urządzeń z pełną wydajnością. Klawiatura radzi sobie z szybkimi naciśnięciami klawiszy. Modem może obsłużyć duże ilości danych. Nawet jeśli procesor jest przeciążony i nie może natychmiast przetworzyć danych wejściowych, system nie ulega awarii. Dane czekają w buforze. To prosta koncepcja. Zapobiega utracie danych w warunkach dużego obciążenia.
Rzeczywistość w czasie rzeczywistym
Zarządzanie wszystkimi tymi zasobami zajmuje większość funkcjonalności systemu operacyjnego. W systemach operacyjnych czasu rzeczywistego może to być prawie cała potrzebna funkcjonalność. W przypadku systemu operacyjnego ogólnego przeznaczenia głównym celem jest zapewnienie spójnego interfejsu. Aplikacje i ludzie potrzebują łatwego dostępu do możliwości sprzętu. Kierowca jest kluczem otwierającym te drzwi.
To nie jest idealne. Kierowcy mogą powodować awarie. Mogą kolidować. Stanowią jednak konieczne połączenie między twoją intencją a reakcją maszyny. Bez nich sprzęt jest ślepy i głuchy. Dzięki nim staje się narzędziem.
Złożoność jest ukryta na widoku. Naciskasz. Kierowca tłumaczy. Sprzęt działa. Cykl trwa.
Interfejsy programowania aplikacji (API) rozwiązują konkretny problem programistów. Eliminują potrzebę zrozumienia najdrobniejszych szczegółów przetwarzania instrukcji przez procesor. Podobnie jak sterowniki urządzeń abstrakcyjnie złożoność sprzętu, interfejsy API umożliwiają programistom wywoływanie funkcji systemu operacyjnego bez konieczności śledzenia każdego stanu sprzętu niskiego poziomu.
Rozważmy utworzenie pliku. Naukowiec rejestrujący dane z instrumentu musi zapisać wyniki. System operacyjny udostępnia funkcję API o nazwie MakeFile. Programista pisze polecenie takie jak:
MakeFile [1, %Nazwa, 2]
Ta pojedyncza linijka wyraża złożoną intencję. Liczba „1” oznacza dostęp losowy. Alternatywna wartość „0” wskazywałaby plik sekwencyjny. %Name bezpośrednio zastępuje nazwę pliku wprowadzoną przez użytkownika. Liczba „2” określa zachowanie podczas przechowywania. Wskazuje na plik o zmiennym rozmiarze. Zero oznacza stały rozmiar. Jedna oznacza, że plik rośnie wraz z danymi, ale nigdy się nie zmniejsza.
Resztę pracy wykonuje system operacyjny. Żąda pierwszego dostępnego wolnego obszaru na dysku. Następnie aktualizuje metadane systemu plików. Wpis ten śledzi bloki początkowe i końcowe, nazwę pliku, typ pliku i stan archiwizacji. Rejestruje uprawnienia użytkownika i znaczniki czasu tworzenia.
Ta abstrakcja ma kluczowe znaczenie dla programistów. Nie muszą zarządzać kodami instrukcji ani typami danych dla każdego możliwego dysku twardego lub napędu taśmowego. System operacyjny, obsługiwany przez sterowniki sprzętowe, zarządza tymi zmieniającymi się szczegółami. Deweloper pisze kod dla API i ufa systemowi.
Ale to zaufanie ma swoją cenę. Interfejsy API otwierają wektory ataku. Hakerzy mogą wykorzystywać luki w wywołaniach API, aby uzyskać nieautoryzowany dostęp. Nie oznacza to, że same interfejsy API są złe. Oznacza to, że programiści muszą agresywnie eliminować słabe punkty. Bezpieczeństwo nie jest cechą; jest to podstawowy wymóg.
Interfejsy API to także pola bitew gospodarczych. Firmy rozumieją, że kontrola API oznacza kontrolę nad segmentem branży. Niektórzy programiści bezpłatnie udostępniają czytniki lub przeglądarki, aby przyciągnąć konsumentów. Następnie pobierają tantiemy od innych programistów, których oprogramowanie chce integrować się z tymi narzędziami. Inni udostępniają interfejsy API za darmo, aby budować ekosystemy. Strategia jest różna, ale cel jest zawsze ten sam – kontrola nad rynkiem.
Interfejsy graficzne, powłoki i obszary robocze
Podczas gdy interfejsy API standaryzują sposób, w jaki aplikacje komunikują się z systemem, interfejs użytkownika (UI) strukturyzuje sposób, w jaki ludzie komunikują się z systemem. W ciągu ostatniej dekady rozwój zdecydowanie faworyzował graficzny interfejs użytkownika (GUI). Apple macOS i Microsoft Windows dominują w tej przestrzeni, zdobywając przytłaczający udział w rynku.
Linux jest inny. Większość dystrybucji zawiera GUI, ale wybór jest zdecentralizowany. Zespół dystrybucyjny wybiera środowisko pracy. Użytkownicy nie są z tym związani. Jeśli chcą, mogą zmienić środowisko. Popularne opcje obejmują Cinnamon, GNOME, KDE i Xfce. Ta elastyczność jest cechą charakterystyczną filozofii Linuksa.
Następnie jest wiersz poleceń (CLI). Ten interfejs tekstowy, często kojarzony z systemem UNIX, opiera się na wpisywanych poleceniach. Użytkownicy przyzwyczajeni do wskazywania i klikania mogą wydawać się onieśmielający. Oferuje jednak moc i elastyczność, których często brakuje GUI. Korn Shell i C Shell to klasyczne przykłady. Zapewniają narzędzia, które ułatwiają manipulowanie funkcjami systemu operacyjnego osobom znającym składnię.
Użytkownicy systemu UNIX często mają jednocześnie otwartych wiele okien powłoki. Umożliwia to równoległe wątki robocze, którymi trudniej jest zarządzać w graficznym interfejsie użytkownika. Jednak użytkownicy systemów UNIX i Linux nie są ograniczeni do wiersza poleceń. Mogą uruchamiać GUI wraz z narzędziami CLI.
Windows, macOS i Linux oferują powłoki lub aplikacje terminalne. Są przeznaczone dla użytkowników potrzebujących bezpośredniego dostępu do wiersza poleceń.
Ważne jest, aby pamiętać, gdzie te interfejsy znajdują się na stosie. Interfejs użytkownika to warstwa znajdująca się nad systemem operacyjnym. Jest to program lub zestaw programów. Podstawowe funkcje zarządzania leżą u podstaw. Jądro wykonuje ciężką pracę. Połączenia między rdzeniem, interfejsem użytkownika i oprogramowaniem pomocniczym definiują doświadczenie użytkownika. Dzięki tej zależności macOS różni się od Windowsa lub dlatego Linux oferuje tak zróżnicowane środowisko graficzne. Rdzeń pozostaje niezmieniony. Interfejs się zmienia. I ta różnica będzie nadal kształtować sposób, w jaki współdziałamy z komputerami w dającej się przewidzieć przyszłości.
Łączność sieciowa nie jest już tylko funkcją. To jest poziom podstawowy. Nie można tak naprawdę mówić o nowoczesnym systemie operacyjnym bez uwzględnienia jego ciągłej komunikacji z serwerami i innymi maszynami. Programiści polegają na Internecie jako głównym kanale otrzymywania poprawek, poprawek zabezpieczeń i głównych aktualizacji. Tak, możesz nadal używać napędu DVD lub USB. Ale to staje się anachronizmem. Większość systemów po prostu pobiera wszystko w tle, gdy śpisz.
Jednak pod powierzchnią kryje się większy spór. Chodzi o filozofię dystrybucji oprogramowania. Czy jeden model może zadowolić zarówno korporacyjnych gigantów, jak i zwykłych konsumentów? Odpowiedź jest skomplikowana.
Otwarte a zamknięte oprogramowanie
Linux zmienił grę. Udowodnił, że oprogramowanie open source może naprawdę sprawdzić się w całej branży. Stanowi to wyraźny kontrast w stosunku do modelu zamkniętego źródła, który dominuje na rynku komputerów stacjonarnych. Większość komercyjnych sterowników i narzędzi jest dostarczana w postaci plików wykonywalnych. Otrzymasz plik binarny. Uruchomisz to. Nie widzisz kodu źródłowego. Nie możesz tego studiować. Nie możesz tego zmienić. To jest czarna skrzynka.
Otwarte oprogramowanie odwraca tę sytuację. Oryginalne materiały źródłowe są dostępne dla każdego. Możesz je przeczytać. Możesz je dostosować. Można na ich podstawie stworzyć coś nowego i podzielić się tym z innymi. Na tym polega cykl przejrzystości. To właśnie ta filozofia dała początek narzędziom, które często uważamy za oczywiste. GIMP do obróbki zdjęć. LibreOffice dla tych, którzy nie chcą płacić za Worda. Apache to silnik, który napędza ogromną część stron internetowych.
Kryte mobilne ogrody
Spójrz na swój telefon. Zauważ, jak czysty jest interfejs? To jest zamierzone. Urządzenia konsumenckie celowo ukrywają system operacyjny przed wzrokiem użytkownika. Dlaczego? Ponieważ użytkownicy mogą zepsuć wszystko. Mogą usunąć niezbędne komponenty. Potrafią zamienić swoje urządzenia w cegły, próbując „zoptymalizować” coś, co nie wymaga optymalizacji.
Dlatego producenci blokują dostęp. Ale zostawiają lukę w drzwiach. „Tryb programisty” lub „tryb programisty”. Jeśli wiesz, gdzie szukać, możesz uzyskać do niego dostęp. Ale kiedy już wejdziesz do środka, smycz jest krótka. Możesz dokonać zmian, ale tylko w ściśle ograniczonym zakresie. Nie dano ci kluczy do całego królestwa. Tylko zapasowy klucz do szopy.
Tworzy to dziwną dychotomię. Na komputerach stacjonarnych masz swobodę (i odpowiedzialność) wprowadzania zmian. Na urządzeniach mobilnych masz wygodę kosztem kontroli. Które podejście jest najlepsze dla długoterminowego stanu naszej infrastruktury cyfrowej? Granice się zacierają, ale zasadniczy kompromis pozostaje niezmienny. Albo widzisz, jak działają mechanizmy, albo po prostu cieszysz się jazdą.





























