System operacyjny definiuje nasze doświadczenia z komputerem. Jest to pierwsze oprogramowanie, które widzimy, gdy włączamy komputer, i ostatnie, które widzimy, gdy komputer jest wyłączony. Jest to oprogramowanie, które umożliwia działanie wszystkich używanych przez nas programów. System operacyjny organizuje i kontroluje sprzęt na naszych biurkach i w naszych rękach, ale większość użytkowników nie potrafi z całą pewnością powiedzieć, co dokładnie robi system operacyjny.
W tym wydaniu HowStuffWorks, powiemy ci, co musi zrobić kawałek oprogramowania, aby zostać nazwanym systemem operacyjnym, i pokażemy ci, jak system operacyjny działa, aby przekształcić kolekcję sprzętu w potężne narzędzie obliczeniowe!
The Bare Bones
Ważne jest, aby zdać sobie sprawę, że nie wszystkie komputery mają systemy operacyjne. Komputer, który kontroluje kuchenkę mikrofalową w twojej kuchni, na przykład, nie potrzebuje systemu operacyjnego. Ma on jeden zestaw stosunkowo prostych zadań do wykonania, bardzo proste metody wejścia i wyjścia (klawiatura i ekran LCD) oraz prosty, nigdy nie zmieniający się sprzęt do sterowania. Dla komputera takiego jak ten, system operacyjny byłby zbędnym bagażem, dodającym złożoności tam, gdzie nie jest potrzebny. Zamiast tego, komputer w kuchence mikrofalowej po prostu uruchamia jeden program przez cały czas.
Dla systemów komputerowych, które wykraczają poza złożoność mikrofalówki, jednak system operacyjny może być kluczem do większej wydajności operacyjnej i łatwiejszego rozwoju aplikacji. Wszystkie komputery stacjonarne mają systemy operacyjne. Najpopularniejsze z nich to rodzina systemów operacyjnych Windows, rodzina systemów operacyjnych UNIX oraz systemy operacyjne Macintosh. Istnieją setki innych systemów operacyjnych dostępnych do zastosowań specjalnych, w tym specjalizacje dla komputerów typu mainframe, robotyki, produkcji, systemów sterowania w czasie rzeczywistym i tak dalej.
Na najprostszym poziomie system operacyjny robi dwie rzeczy:
- Zarządza zasobami sprzętowymi i programowymi systemu komputerowego. Zasoby te obejmują takie rzeczy, jak procesor, pamięć, przestrzeń dyskowa itp.
- To zapewnia stabilny, spójny sposób dla aplikacji do czynienia ze sprzętem bez konieczności znajomości wszystkich szczegółów sprzętu.
Pierwsze zadanie, zarządzanie zasobami sprzętowymi i programowymi, jest bardzo ważne, ponieważ różne programy i metody wprowadzania danych konkurują o uwagę centralnej jednostki obliczeniowej (CPU) i żądają pamięci, przechowywania i przepustowości wejścia/wyjścia (I/O) do własnych celów. W tym charakterze, system operacyjny odgrywa rolę dobrego rodzica, upewniając się, że każda aplikacja dostaje niezbędne zasoby, grając ładnie ze wszystkimi innymi aplikacjami, jak również zarządzanie ograniczoną pojemność systemu do największego dobra wszystkich użytkowników i aplikacji.
Drugie zadanie, zapewnienie spójnego interfejsu aplikacji, jest szczególnie ważne, jeśli ma być więcej niż jeden z danego typu komputera korzystającego z systemu operacyjnego, lub jeśli sprzęt tworzący komputer jest kiedykolwiek otwarty na zmiany. Spójny interfejs programu aplikacyjnego (API) pozwala twórcy oprogramowania napisać aplikację na jeden komputer i mieć wysoki poziom pewności, że będzie ona działać na innym komputerze tego samego typu, nawet jeśli ilość pamięci lub ilość pamięci masowej jest różna na tych dwóch maszynach. Nawet jeśli dany komputer jest wyjątkowy, system operacyjny może zapewnić ciągłość działania aplikacji w przypadku modernizacji i uaktualnień sprzętu, ponieważ to system operacyjny, a nie aplikacja, jest odpowiedzialny za zarządzanie sprzętem i dystrybucję jego zasobów. Windows 98 jest doskonałym przykładem elastyczności, jaką zapewnia system operacyjny. Windows 98 działa na sprzęcie pochodzącym od tysięcy producentów. Może obsługiwać tysiące różnych drukarek, napędów dyskowych i specjalnych urządzeń peryferyjnych w każdej możliwej kombinacji.
W obrębie szerokiej rodziny systemów operacyjnych, istnieją generalnie cztery typy, skategoryzowane na podstawie typów komputerów, które kontrolują i rodzaju aplikacji, które obsługują. Te szerokie kategorie to:
- System operacyjny czasu rzeczywistego (RTOS) – Systemy operacyjne czasu rzeczywistego są używane do sterowania maszynami, instrumentami naukowymi i systemami przemysłowymi. RTOS zazwyczaj ma bardzo małe możliwości interfejsu użytkownika i nie ma narzędzi dla użytkownika końcowego, ponieważ system będzie „zamkniętą skrzynką”, gdy zostanie dostarczony do użytku. Bardzo ważną częścią RTOS jest zarządzanie zasobami komputera tak, aby dana operacja wykonywała się w dokładnie takim samym czasie za każdym razem, gdy się pojawia. W złożonej maszynie, szybszy ruch części tylko dlatego, że zasoby systemowe są dostępne, może być równie katastrofalny w skutkach, jak brak ruchu, ponieważ system jest zajęty.
- Pojedynczy użytkownik, pojedyncze zadanie – Jak sama nazwa wskazuje, ten system operacyjny jest przeznaczony do zarządzania komputerem tak, aby jeden użytkownik mógł efektywnie wykonywać jedną rzecz w tym samym czasie. Palm OS dla komputerów przenośnych Palm jest dobrym przykładem nowoczesnego systemu operacyjnego dla pojedynczego użytkownika, pojedynczego zadania.
- Jednostanowiskowy, wielozadaniowy – To jest typ systemu operacyjnego, którego większość ludzi używa na swoich komputerach stacjonarnych i przenośnych dzisiaj. Windows 98 i MacOS są przykładami systemu operacyjnego, który pozwala jednemu użytkownikowi mieć kilka programów działających w tym samym czasie. Na przykład jest całkowicie możliwe, aby użytkownik Windows pisał notatkę w edytorze tekstu, pobierał plik z Internetu i jednocześnie drukował tekst wiadomości e-mail.
- Multi-user – system operacyjny typu multi-user pozwala wielu różnym użytkownikom na jednoczesne korzystanie z zasobów komputera. System operacyjny musi dbać o to, aby wymagania różnych użytkowników były zrównoważone, a każdy z używanych przez nich programów miał wystarczające i oddzielne zasoby, tak aby problem z jednym użytkownikiem nie dotyczył całej społeczności użytkowników. Unix, VMS i systemy operacyjne dla komputerów mainframe, takie jak MVS, są przykładami systemów operacyjnych dla wielu użytkowników.
Ważne jest, aby rozróżnić tutaj pomiędzy wieloużytkownikowymi systemami operacyjnymi a systemami operacyjnymi dla pojedynczego użytkownika, które obsługują sieci. Windows 2000 i Novell Netware mogą obsługiwać setki lub tysiące użytkowników podłączonych do sieci, ale same systemy operacyjne nie są prawdziwymi wielodostępnymi systemami operacyjnymi. Jedynym „użytkownikiem” systemu Windows 2000 lub Netware jest administrator systemu. Obsługa sieci i wszystkie zdalne logowania użytkowników, które sieć umożliwia, są, w ogólnym planie systemu operacyjnego, programem uruchamianym przez użytkownika administracyjnego.
Mając w pamięci różne typy systemów operacyjnych, czas przyjrzeć się podstawowym funkcjom dostarczanym przez system operacyjny.
Wake-Up Call
Po włączeniu zasilania komputera pierwszym uruchamianym programem jest zwykle zestaw instrukcji przechowywanych w pamięci komputera przeznaczonej tylko do odczytu (ROM), który bada sprzęt systemowy, aby upewnić się, że wszystko działa prawidłowo. Ten autotest włączania zasilania (POST) sprawdza procesor, pamięć i podstawowe systemy wejścia-wyjścia (BIOS) pod kątem błędów i zapisuje wynik w specjalnej lokalizacji pamięci. Po pomyślnym zakończeniu POST, oprogramowanie załadowane do pamięci ROM (czasami nazywane firmware) rozpocznie aktywację dysków komputera. W większości nowoczesnych komputerów, gdy komputer aktywuje dysk twardy, znajduje pierwszy element systemu operacyjnego: program ładujący bootstrap.
Ładowacz startowy jest małym programem, który ma jedną funkcję: ładuje system operacyjny do pamięci i pozwala mu rozpocząć działanie. W najbardziej podstawowej formie, bootstrap loader ustawia małe programy sterowników, które łączą się z różnymi podsystemami sprzętowymi komputera i sterują nimi. Ustawia podziały pamięci, w których przechowywany jest system operacyjny, informacje o użytkowniku i aplikacje. Ustanawia struktury danych, które będą przechowywać niezliczone sygnały, flagi i semafory, które są używane do komunikacji wewnątrz i pomiędzy podsystemami i aplikacjami komputera. Następnie przekazuje kontrolę nad komputerem systemowi operacyjnemu.
Zadania systemu operacyjnego, w najbardziej ogólnym sensie, dzielą się na sześć kategorii:
- Zarządzanie procesorem
- Zarządzanie pamięcią
- Zarządzanie urządzeniami
- Zarządzanie pamięcią masową
- Interfejs aplikacji
- Interfejs użytkownika
Chociaż są tacy, którzy twierdzą, że system operacyjny powinien wykonywać więcej niż te sześć zadań, a niektórzy producenci systemów operacyjnych wbudowują w swoje systemy operacyjne o wiele więcej programów użytkowych i funkcji pomocniczych, to jednak te sześć zadań definiuje rdzeń prawie wszystkich systemów operacyjnych. Przyjrzyjmy się narzędziom, których system operacyjny używa do wykonywania każdej z tych funkcji.
Zarządzanie procesorem
Serce zarządzania procesorem sprowadza się do dwóch powiązanych ze sobą kwestii:
- Zapewnienia, że każdy proces i aplikacja otrzymują wystarczającą ilość czasu procesora do prawidłowego działania
- Używania jak największej liczby cykli procesora do rzeczywistej pracy
Podstawową jednostką oprogramowania, z którą system operacyjny ma do czynienia przy planowaniu pracy wykonywanej przez procesor, jest proces lub wątek, w zależności od systemu operacyjnego.
Kuszące jest myślenie o procesie jako aplikacji, ale to daje niepełny obraz tego, jak procesy odnoszą się do systemu operacyjnego i sprzętu. Aplikacja, którą widzisz (edytor tekstu, arkusz kalkulacyjny lub gra) jest rzeczywiście procesem, ale ta aplikacja może spowodować uruchomienie kilku innych procesów do zadań, takich jak komunikacja z innymi urządzeniami lub innymi komputerami. Istnieje również wiele procesów, które działają bez bezpośredniego dowodu, że w ogóle istnieją. Proces jest więc oprogramowaniem, które wykonuje jakieś działanie i może być kontrolowane – przez użytkownika, inne aplikacje lub system operacyjny.
To właśnie procesy, a nie aplikacje, są kontrolowane przez system operacyjny i planowane do wykonania przez procesor. W systemie jednozadaniowym harmonogram jest prosty. System operacyjny pozwala aplikacji rozpocząć pracę, zawieszając jej wykonywanie tylko na tyle długo, by poradzić sobie z przerwaniami i danymi wejściowymi użytkownika. Przerwania to specjalne sygnały wysyłane przez sprzęt lub oprogramowanie do procesora. To tak, jakby jakaś część komputera nagle podniosła rękę, by poprosić o uwagę procesora podczas ożywionego spotkania. Czasami system operacyjny tak ustawia priorytet procesów, że przerwania są maskowane – to znaczy, że system operacyjny ignoruje przerwania z niektórych źródeł, aby określone zadanie mogło być zakończone tak szybko, jak to możliwe. Istnieją pewne przerwania (takie jak te pochodzące z błędów lub problemów z pamięcią), które są tak ważne, że nie mogą być ignorowane. Te niemaskowalne przerwania (NMI) muszą być obsługiwane natychmiast, niezależnie od innych zadań.
Podczas gdy przerwania dodają pewną komplikację do wykonywania procesów w systemie jednozadaniowym, zadanie systemu operacyjnego staje się znacznie bardziej skomplikowane w systemie wielozadaniowym. Teraz system operacyjny musi tak zorganizować wykonywanie aplikacji, aby użytkownik uwierzył, że dzieje się kilka rzeczy naraz. Jest to skomplikowane, ponieważ procesor może wykonywać tylko jedną rzecz w tym samym czasie. Aby sprawić wrażenie, że wiele rzeczy dzieje się w tym samym czasie, system operacyjny musi przełączać się między różnymi procesami tysiące razy na sekundę. Oto jak to się dzieje.
- Proces zajmuje pewną ilość pamięci RAM. Korzysta również z rejestrów, stosów i kolejek w przestrzeni pamięci procesora i systemu operacyjnego.
- Gdy dwa procesy są wielozadaniowe, system operacyjny przydziela jednemu programowi określoną liczbę cykli wykonania procesora.
- Po tej liczbie cykli system operacyjny wykonuje kopie wszystkich rejestrów, stosów i kolejek używanych przez procesy oraz odnotowuje punkt, w którym proces przerwał wykonywanie.
- Następnie ładuje wszystkie rejestry, stosy i kolejki używane przez drugi proces i zezwala mu na pewną liczbę cykli procesora.
- Po ich zakończeniu wykonuje kopie wszystkich rejestrów, stosów i kolejek używanych przez drugi program i ładuje pierwszy program.
Wszystkie informacje potrzebne do śledzenia procesu podczas przełączania są przechowywane w pakiecie danych zwanym blokiem sterowania procesem. Blok sterowania procesem zawiera zazwyczaj:
- Numer identyfikacyjny, który identyfikuje proces
- Wskaźniki do miejsc w programie i jego danych, w których ostatnio wystąpiło przetwarzanie
- Zawartość rejestrów
- Stany różnych flag i przełączników
- Wskaźniki do górnej i dolne granice pamięci wymaganej przez proces
- Lista plików otwartych przez proces
- Priorytet procesu
- Stan wszystkich urządzeń wejścia/wyjścia potrzebnych procesowi
Gdy zmienia się stan procesu, z oczekującego na aktywność, na przykład, lub z zawieszonego na uruchomiony, informacje w bloku sterowania procesem muszą być używane jak dane w każdym innym programie do kierowania wykonaniem części systemu operacyjnego przełączającej zadania.
Ta zamiana procesów odbywa się bez bezpośredniej ingerencji użytkownika, a każdy proces dostaje wystarczająco dużo cykli procesora, aby wykonać swoje zadanie w rozsądnym czasie. Kłopoty mogą się jednak pojawić, jeśli użytkownik spróbuje mieć zbyt wiele procesów działających w tym samym czasie. Sam system operacyjny wymaga pewnej ilości cykli procesora, aby wykonać zapisywanie i zamianę wszystkich rejestrów, kolejek i stosów procesów aplikacji. Jeśli uruchomiona zostanie wystarczająca liczba procesów i jeśli system operacyjny nie został starannie zaprojektowany, system może zacząć wykorzystywać większość dostępnych cykli procesora do wymiany pomiędzy procesami, a nie do uruchamiania procesów. Kiedy tak się dzieje, nazywa się to thrashingiem i zazwyczaj wymaga jakiejś bezpośredniej interwencji użytkownika, aby zatrzymać procesy i przywrócić porządek w systemie.
Jednym ze sposobów, w jaki projektanci systemów operacyjnych zmniejszają prawdopodobieństwo thrashingu, jest ograniczenie potrzeby tworzenia nowych procesów do wykonywania różnych zadań. Niektóre systemy operacyjne pozwalają na tworzenie „procesów lżejszych”, zwanych wątkami, które mogą wykonywać wszystkie prace intensywnie obciążające procesor, jak normalne procesy, ale na ogół nie zajmują się różnymi typami operacji wejścia/wyjścia i nie tworzą struktur wymagających rozbudowanego bloku sterowania procesem, jak w przypadku zwykłych procesów. Proces może uruchomić wiele wątków lub innych procesów, ale wątek nie może uruchomić procesu.
Do tej pory wszystkie omawiane przez nas harmonogramy dotyczyły pojedynczego procesora. W systemie z dwoma lub więcej procesorami, system operacyjny musi podzielić obciążenie pomiędzy procesory, próbując zrównoważyć wymagania wymaganych procesów z dostępnymi cyklami na różnych procesorach. Asymetryczne systemy operacyjne wykorzystują jeden procesor do własnych potrzeb i rozdzielają procesy aplikacji pomiędzy pozostałe procesory. Symetryczne systemy operacyjne dzielą się między różne procesory, równoważąc zapotrzebowanie i dostępność procesorów, nawet jeśli sam system operacyjny jest wszystkim, co jest uruchomione.
Nawet jeśli system operacyjny jest jedynym oprogramowaniem mającym potrzeby wykonawcze, procesor nie jest jedynym zasobem, który musi być zaplanowany. Zarządzanie pamięcią jest kolejnym kluczowym krokiem w upewnianiu się, że wszystkie procesy działają płynnie.
Zarządzanie pamięcią i przechowywaniem
Gdy system operacyjny zarządza pamięcią komputera, do wykonania są dwa szerokie zadania:
- Każdy proces musi mieć dość pamięci, w której może się wykonywać, i nie może ani wbiegać w przestrzeń pamięci innego procesu, ani być wbiegany przez inny proces.
- Różne typy pamięci w systemie muszą być używane prawidłowo, aby każdy proces mógł działać najbardziej efektywnie.
Pierwsze zadanie wymaga od systemu operacyjnego ustalenia granic pamięci dla typów oprogramowania i dla poszczególnych aplikacji.
Jako przykład przyjrzyjmy się wyimaginowanemu systemowi z 1 megabajtem (1000 kilobajtów) pamięci RAM. Podczas procesu uruchamiania, system operacyjny naszego wyimaginowanego komputera jest zaprojektowany tak, aby przejść na szczyt dostępnej pamięci, a następnie „cofnąć się” wystarczająco daleko, aby zaspokoić potrzeby samego systemu operacyjnego. Załóżmy, że system operacyjny potrzebuje 300 kilobajtów do działania. Teraz system operacyjny idzie na dno puli pamięci RAM i zaczyna budować się z różnymi sterownikami wymaganymi do kontrolowania podsystemów sprzętowych komputera. W naszym wyimaginowanym komputerze sterowniki zajmują 200 kilobajtów. Tak więc po całkowitym załadowaniu systemu operacyjnego na procesy aplikacji pozostaje 500 kilobajtów.
Gdy aplikacje zaczynają być ładowane do pamięci, są one ładowane w blokach o rozmiarach określonych przez system operacyjny. Jeśli rozmiar bloku wynosi 2 kilobajty, to każdy załadowany proces otrzyma kawałek pamięci o rozmiarze będącym wielokrotnością 2 kilobajtów. Aplikacje będą ładowane w tych stałych rozmiarach bloków, z blokami zaczynającymi się i kończącymi na granicach ustalonych przez słowa o długości 4 lub 8 bajtów. Te bloki i granice pomagają zapewnić, że aplikacje nie będą ładowane na siebie nawzajem przez źle obliczony bit lub dwa. Mając to zapewnione, większym pytaniem jest, co zrobić, gdy 500-kilobajtowa przestrzeń na aplikacje zostanie zapełniona.
W większości komputerów możliwe jest dodanie pamięci poza jej oryginalną pojemnością. Na przykład, można rozszerzyć pamięć RAM z 1 do 2 megabajtów. Działa to dobrze, ale zazwyczaj jest stosunkowo drogie. Ignoruje również podstawowy fakt w informatyce – większość informacji, które aplikacja przechowuje w pamięci, nie jest używana w danym momencie. Procesor może uzyskać dostęp do pamięci tylko w jednym miejscu na raz, więc zdecydowana większość pamięci RAM jest nieużywana w danym momencie. Ponieważ przestrzeń dyskowa jest tania w porównaniu z pamięcią RAM, przeniesienie informacji z pamięci RAM na dysk twardy może znacznie zwiększyć przestrzeń RAM bez ponoszenia kosztów. Ta technika jest nazywana zarządzaniem pamięcią wirtualną.
Pamięć dyskowa jest tylko jednym z typów pamięci, które muszą być zarządzane przez system operacyjny, i jest najwolniejsza. Uszeregowane w kolejności prędkości, rodzaje pamięci w systemie komputerowym są:
- Szybka pamięć podręczna – Jest to szybka, stosunkowo niewielka ilość pamięci, która jest dostępna dla procesora za pośrednictwem najszybszych połączeń. Kontrolery pamięci podręcznej przewidują, które części danych procesor będzie potrzebował w następnej kolejności i wyciągają je z pamięci głównej do szybkiej pamięci podręcznej, aby przyspieszyć działanie systemu.
- Pamięć główna – Jest to pamięć RAM, którą widzisz mierzoną w megabajtach, gdy kupujesz komputer.
- Pamięć wtórna – Jest to najczęściej jakiś rodzaj obrotowej pamięci magnetycznej, która utrzymuje aplikacje i dane dostępne do wykorzystania, i służy jako wirtualna pamięć RAM pod kontrolą systemu operacyjnego.
System operacyjny musi zrównoważyć potrzeby różnych procesów z dostępnością różnych typów pamięci, przenosząc dane w blokach (zwanych stronami) między dostępną pamięcią, jak dyktuje harmonogram procesów.
Zarządzanie urządzeniami
Ścieżka między systemem operacyjnym a praktycznie całym sprzętem, który nie znajduje się na płycie głównej komputera, przechodzi przez specjalny program zwany sterownikiem. Znaczna część funkcji sterownika polega na byciu tłumaczem między sygnałami elektrycznymi podsystemów sprzętowych a językami programowania wysokiego poziomu systemu operacyjnego i programów użytkowych. Sterowniki pobierają dane, które system operacyjny zdefiniował jako plik i tłumaczą je na strumienie bitów umieszczanych w określonych miejscach na urządzeniach pamięci masowej lub na serie impulsów laserowych w drukarce.
Ponieważ istnieją tak duże różnice w sprzęcie kontrolowanym przez sterowniki, istnieją różnice w sposobie działania programów sterowników, ale większość z nich jest uruchamiana, gdy urządzenie jest wymagane, i działa tak samo jak każdy inny proces. System operacyjny będzie często przypisywał bloki o wysokim priorytecie do sterowników, aby zasoby sprzętowe mogły być zwolnione i przygotowane do dalszego użycia tak szybko, jak to możliwe.
Jednym z powodów, dla których sterowniki są oddzielone od systemu operacyjnego, jest to, że nowe funkcje mogą być dodawane do sterownika – a tym samym do podsystemów sprzętowych – bez konieczności modyfikacji, rekompilacji i redystrybucji samego systemu operacyjnego. Poprzez rozwój nowych sterowników urządzeń sprzętowych, rozwój często wykonywany lub opłacany przez producenta podsystemów, a nie wydawcę systemu operacyjnego, możliwości wejścia/wyjścia całego systemu mogą być znacznie zwiększone.
Zarządzanie wejściem i wyjściem jest w dużej mierze kwestią zarządzania kolejkami i buforami, specjalnymi obiektami pamięci masowej, które pobierają strumień bitów z urządzenia, być może z klawiatury lub portu szeregowego, przechowują te bity i uwalniają je do procesora w tempie wystarczająco wolnym, aby procesor mógł sobie z nimi poradzić. Funkcja ta jest szczególnie ważna, gdy działa wiele procesów, które zajmują czas procesora. System operacyjny poinstruuje bufor, aby kontynuował przyjmowanie danych wejściowych z urządzenia, ale aby przestał wysyłać dane do CPU, podczas gdy proces korzystający z danych wejściowych jest zawieszony. Następnie, gdy proces wymagający wejścia zostanie ponownie uaktywniony, system operacyjny wyda polecenie buforowi, aby wysyłał dane. Ten proces pozwala klawiaturze lub modemowi na obsługę zewnętrznych użytkowników lub komputerów z dużą szybkością, nawet jeśli są chwile, kiedy CPU nie może używać danych wejściowych z tych źródeł.
Zarządzanie wszystkimi zasobami systemu komputerowego stanowi dużą część funkcji systemu operacyjnego, a w przypadku systemów operacyjnych czasu rzeczywistego może stanowić praktycznie całą wymaganą funkcjonalność. Dla innych systemów operacyjnych, jednak, zapewnienie stosunkowo prostego, spójnego sposobu dla aplikacji i ludzi do korzystania z mocy sprzętu jest kluczową częścią ich powodu istnienia.
Interfejs do świata
Interfejs aplikacji
Tak jak sterowniki zapewniają aplikacjom możliwość korzystania z podsystemów sprzętowych bez konieczności znajomości każdego szczegółu działania sprzętu, tak interfejsy programu aplikacyjnego (API) pozwalają programistom aplikacji korzystać z funkcji komputera i systemu operacyjnego bez konieczności bezpośredniego śledzenia wszystkich szczegółów działania procesora. Przyjrzyjmy się przykładowi tworzenia pliku na dysku twardym do przechowywania danych, aby zobaczyć, dlaczego może to być ważne.
Programista piszący aplikację do zapisywania danych z instrumentu naukowego może chcieć pozwolić naukowcowi na określenie nazwy tworzonego pliku. System operacyjny może udostępniać funkcję API o nazwie MakeFile do tworzenia plików. Podczas pisania programu programista wstawiłby linię wyglądającą tak:
MakeFile
W tym przykładzie instrukcja mówi systemowi operacyjnemu, aby utworzył plik, który będzie umożliwiał losowy dostęp do swoich danych (1), będzie miał nazwę wpisaną przez użytkownika (%Name) i będzie miał rozmiar, który zmienia się w zależności od tego, ile danych jest przechowywanych w pliku (2). Przyjrzyjmy się teraz, co robi system operacyjny, aby zamienić tę instrukcję w działanie.
- System operacyjny wysyła zapytanie do stacji dysków, aby uzyskać lokalizację pierwszego dostępnego wolnego miejsca w pamięci masowej.
- W oparciu o te informacje system operacyjny tworzy wpis w systemie plików pokazujący początkową i końcową lokalizację pliku, nazwę pliku, typ pliku, czy plik został zarchiwizowany, którzy użytkownicy mają uprawnienia do przeglądania lub modyfikowania pliku oraz datę i godzinę utworzenia pliku.
- System operacyjny zapisuje na początku pliku informacje, które identyfikują plik, ustawiają rodzaj możliwego dostępu i zawierają inne informacje, które wiążą plik z aplikacją.
W tych wszystkich informacjach zapytania do stacji dysków oraz adresy punktu początkowego i końcowego pliku są w formatach silnie zależnych od producenta i modelu stacji dysków.
Ponieważ programista napisał swój program tak, aby korzystał z API dla pamięci dyskowej, nie musi nadążać za kodami instrukcji, typami danych i kodami odpowiedzi dla każdego możliwego dysku twardego i napędu taśmowego. System operacyjny, połączony ze sterownikami dla różnych podsystemów sprzętowych, zajmuje się zmieniającymi się szczegółami sprzętu — programista musi po prostu napisać kod dla API i zaufać systemowi operacyjnemu, że zrobi resztę.
API stały się jednym z najbardziej gorących obszarów przemysłu komputerowego w ostatnich latach. Firmy zdają sobie sprawę, że programiści używający ich API ostatecznie przełożą się na możliwość kontrolowania i czerpania zysków z konkretnej części branży. Jest to jeden z powodów, dla których tak wiele firm było skłonnych udostępnić społeczeństwu aplikacje takie jak czytniki czy przeglądarki bez żadnych opłat. Wiedzą, że konsumenci będą prosić, aby programy korzystały z darmowych czytników, a firmy produkujące aplikacje będą gotowe płacić tantiemy, aby umożliwić ich oprogramowaniu dostarczanie funkcji, o które proszą konsumenci.
Interfejs użytkownika
Tak jak API zapewnia spójny sposób korzystania przez aplikacje z zasobów systemu komputerowego, interfejs użytkownika (UI) wprowadza strukturę do interakcji między użytkownikiem a komputerem. W ostatniej dekadzie, prawie cały rozwój w interfejsach użytkownika był w obszarze graficznego interfejsu użytkownika (GUI), z dwoma modelami, Macintosh firmy Apple i Windows firmy Microsoft, otrzymując większość uwagi i zdobywając większość udziału w rynku. Istnieją inne interfejsy użytkownika, niektóre graficzne, a niektóre nie, dla innych systemów operacyjnych.
Unix, na przykład, ma interfejsy użytkownika zwane powłokami, które prezentują interfejs użytkownika bardziej elastyczny i potężniejszy niż standardowy interfejs tekstowy systemu operacyjnego. Programy takie jak Korn Shell i C Shell są tekstowymi interfejsami, które dodają ważne narzędzia, ale ich głównym celem jest ułatwienie użytkownikowi manipulowania funkcjami systemu operacyjnego. Istnieją również graficzne interfejsy użytkownika, takie jak X-Windows i Gnome, które sprawiają, że Unix i Linux z punktu widzenia użytkownika bardziej przypominają komputery Windows i Macintosh.
Ważne jest, aby pamiętać, że we wszystkich tych przykładach interfejs użytkownika jest programem lub zestawem programów, który siedzi jako warstwa powyżej samego systemu operacyjnego. To samo jest prawdą, z nieco innymi mechanizmami, zarówno w przypadku systemów operacyjnych Windows, jak i Macintosh. Podstawowe funkcje systemu operacyjnego, zarządzanie systemem komputerowym, znajdują się w jądrze systemu operacyjnego. Menedżer wyświetlania jest oddzielny, choć może być ściśle związany z jądrem znajdującym się poniżej. Powiązania między jądrem systemu operacyjnego a interfejsem użytkownika, narzędziami i innym oprogramowaniem definiują wiele różnic w systemach operacyjnych dzisiaj, i będą je dalej definiować w przyszłości.
Przyszłość
Jedno pytanie dotyczące przyszłości systemów operacyjnych obraca się wokół zdolności konkretnej filozofii dystrybucji oprogramowania do stworzenia systemu operacyjnego nadającego się do wspólnego użytku przez korporacje i konsumentów.
Linux, system operacyjny stworzony i rozpowszechniany zgodnie z zasadami open source, może mieć znaczący wpływ na system operacyjny w ogóle. Większość systemów operacyjnych, sterowników i programów użytkowych jest pisana przez organizacje komercyjne, które rozpowszechniają wykonywalne wersje swojego oprogramowania – wersje, które nie mogą być badane ani zmieniane. Open source wymaga dystrybucji oryginalnych materiałów źródłowych, które mogą być badane, zmieniane i rozwijane, a wyniki ponownie swobodnie rozpowszechniane.
Ciągły rozwój Internetu i rozprzestrzenianie się komputerów, które nie są standardowymi komputerami stacjonarnymi lub przenośnymi oznacza, że systemy operacyjne będą się zmieniać, aby dotrzymać kroku, ale podstawowe funkcje zarządzania i interfejsu będą kontynuowane, nawet gdy będą ewoluować.