System operacyjny jako pośrednik między programami a sprzętem
System operacyjny (SO) to podstawowe oprogramowanie urządzenia. Zarządza podzespołami i aplikacjami, przydziela zasoby oraz udostępnia wspólne usługi użytkownikom i programom. Bez niego każda aplikacja musiałaby samodzielnie obsługiwać procesor, pamięć, dysk czy klawiaturę, a także uwzględniać różnice między modelami sprzętu.
SO tworzy warstwę pośrednią między aplikacjami a podzespołami. Program może poprosić o odczyt pliku lub wysłanie danych przez sieć za pomocą kontrolowanych interfejsów, zamiast bezpośrednio sterować urządzeniem. System przekazuje żądanie do odpowiedniego składnika, na przykład sterownika, i zwraca aplikacji rezultat. Dzięki temu programy korzystają z podobnych usług na różnych konfiguracjach sprzętowych.
Centralną częścią systemu jest jądro, czyli kernel. Zarządza ono sprzętem i zasobami oraz zapewnia podstawowe usługi pozostałym elementom oprogramowania. Z jądrem współpracują między innymi planista procesora, menedżer pamięci, system plików, sterowniki, stos sieciowy i usługi systemowe. Ich podział może się różnić zależnie od systemu.
Interfejs użytkownika nie jest tym samym co jądro. Może mieć postać graficzną, z oknami i ikonami, albo tekstową, w której polecenia wpisuje się w terminalu. To warstwa ułatwiająca korzystanie z funkcji systemu, podczas gdy jądro odpowiada za podstawowe operacje i dostęp do zasobów.
Jak system zarządza procesami i czasem procesora?
Po uruchomieniu programu system tworzy proces, czyli działający program wraz z przypisanymi mu zasobami. Kontroluje jego wykonywanie, wstrzymywanie i zakończenie, a także przydziela mu pamięć i dostęp do potrzebnych usług. W ramach procesu mogą działać wątki, będące mniejszymi jednostkami pracy. Dzięki nim program może wykonywać kilka zadań równolegle lub przeplatać je w czasie.
Za podział czasu procesora odpowiada planista. Wybiera, który gotowy proces lub wątek ma otrzymać dostęp do CPU i na jak długo. Ogranicza to ryzyko, że jedno zadanie zdominuje system, a wiele aplikacji może sprawiać wrażenie działających jednocześnie. W praktyce procesor szybko przełącza się między zadaniami, zgodnie z regułami danego systemu.
Przykładowo podczas odtwarzania muzyki SO może równolegle obsługiwać przeglądarkę i pobieranie pliku. Planista rozdziela czas procesora między gotowe zadania. Jeśli jedno z nich czeka na dane z dysku lub sieci, system może w tym czasie uruchomić inne, które jest gotowe do pracy. Takie przeplatanie pomaga lepiej wykorzystać procesor i ogranicza odczuwalne przestoje.
System monitoruje aktywne procesy oraz wykorzystanie zasobów i reaguje na błędy. Izolacja sprawia, że aplikacja nie powinna odczytywać ani nadpisywać pamięci innego programu bez zezwolenia. Programy proszą o usługi systemowe przez kontrolowane mechanizmy, takie jak wywołania systemowe. Ogranicza to skutki błędów i pozwala systemowi sprawdzać, czy żądana operacja jest dozwolona.
W jaki sposób system operacyjny zarządza pamięcią i plikami?
Każdy uruchomiony program potrzebuje pamięci. Menedżer pamięci przydziela ją procesom, odzyskuje po zakończeniu pracy i pilnuje, by programy nie ingerowały w swoje obszary bez uprawnień. System może przydzielać procesom odrębne przestrzenie adresowe, które mapuje na dostępną pamięć fizyczną. Dzięki temu aplikacje nie muszą znać dokładnego położenia swoich danych w RAM.
Jednym z mechanizmów jest pamięć wirtualna. Pozwala ona systemowi zarządzać przestrzeniami adresowymi procesów, a w razie potrzeby przenosić część danych między pamięcią operacyjną a pamięcią pomocniczą. Stronicowanie może sprowadzać dane do RAM wtedy, gdy są potrzebne, a mapowanie pliku udostępniać jego zawartość w przestrzeni adresowej procesu. W Linuksie podsystem pamięci obejmuje między innymi pamięć wirtualną, stronicowanie na żądanie i mapowanie plików.
Jeśli aplikacje potrzebują więcej pamięci, niż jest dostępne w RAM, system może skorzystać z mechanizmów pamięci wirtualnej. Nie oznacza to jednak, że dysk lub inna pamięć masowa działa równie szybko jak RAM. Intensywne przenoszenie danych może spowolnić pracę, dlatego sama informacja o dostępnej pamięci wirtualnej nie mówi, że wydajność pozostanie taka sama.
System plików organizuje dane w pliki i katalogi, utrzymuje ich nazwy oraz obsługuje odczyt i zapis. Gdy aplikacja żąda dostępu do pliku, operacja przechodzi przez warstwę systemową i odpowiednie sterowniki do urządzenia pamięci masowej. System sprawdza również uprawnienia, które określają, kto może dane odczytywać, zmieniać lub usuwać. W ten sposób zarządzanie plikami łączy się z kontrolą dostępu i ochroną informacji.
Jak system obsługuje urządzenia, sieć i bezpieczeństwo?
Programy korzystają z urządzeń za pośrednictwem sterowników i usług systemowych. Mogą wysłać żądanie wydrukowania dokumentu, odczytu danych z dysku lub pobrania informacji z karty sieciowej, nie sterując bezpośrednio każdym urządzeniem. System przekazuje żądanie do właściwego sterownika, obsługuje wejście-wyjście, a następnie zgłasza aplikacji wynik. Warstwy abstrakcji sprzętu pomagają odseparować wyższe części systemu od szczegółów konkretnego urządzenia.
SO obsługuje również komunikację między procesami oraz połączenia sieciowe. Udostępnia aplikacjom mechanizmy wymiany danych w ramach jednego urządzenia, sieci lokalnej lub internetu. Przeglądarka, komunikator czy narzędzie do synchronizacji mogą dzięki temu korzystać ze wspólnych usług sieciowych, zamiast samodzielnie zarządzać całą komunikacją ze sprzętem.
Bezpieczeństwo opiera się między innymi na rozpoznawaniu użytkowników, egzekwowaniu uprawnień i oddzielaniu aplikacji od wrażliwych zasobów. Zwykły program działa w ograniczonym trybie użytkownika i prosi system o dostęp do pliku lub urządzenia. Nie powinien bezpośrednio odwoływać się do pamięci jądra ani dowolnie sterować sprzętem. Oddzielony od niego tryb jądra pozwala wykonywać operacje wymagające wyższych uprawnień.
Te mechanizmy ograniczają skutki błędów aplikacji, ale nie zastępują aktualizacji ani innych zabezpieczeń. Tożsamość użytkownika i przypisane mu uprawnienia wpływają na dostęp do plików, urządzeń i usług. Ochrona jest więc powiązana z zarządzaniem procesami, pamięcią i danymi, a nie ograniczona do jednego ustawienia systemowego.
Jak ocenić pracę systemu operacyjnego?
System stale rozdziela zasoby między aktywne zadania, dlatego jego działanie można obserwować za pomocą różnych metryk. Przydatne są między innymi wykorzystanie procesora, zajętość RAM i pamięci wirtualnej, liczba aktywnych procesów, przepustowość dysku i sieci oraz opóźnienie operacji wejścia-wyjścia. Pokazują one, które zasoby są obciążone i czy aplikacje czekają na procesor, dane z dysku lub odpowiedź sieci.
Żadna pojedyncza wartość nie opisuje poprawnie pracy każdego urządzenia. Nie istnieje uniwersalna liczba procesów, ilość pamięci ani liczba obsługiwanych urządzeń wspólna dla wszystkich systemów. Wyniki zależą od sprzętu, konfiguracji i bieżącego obciążenia. Wysokie wykorzystanie procesora może być normalne podczas wymagającego zadania, a duża liczba procesów sama w sobie nie musi oznaczać problemu.
Współczesne systemy rozwijają zabezpieczenia, obsługę środowisk wirtualnych i procesorów wielordzeniowych oraz mechanizmy optymalizujące wydajność i zużycie energii. Konkretne rozwiązania zależą od systemu i urządzenia. Niezależnie od implementacji podstawowa rola pozostaje podobna: koordynować sprzęt i oprogramowanie, udostępniać wspólne usługi oraz sprawiać, by wiele zadań mogło bezpiecznie korzystać z ograniczonych zasobów.
Źródła
- https://docs.kernel.org/admin-guide/mm/index.html
- https://docs.kernel.org//mm/index.html
- https://github.com/linux-doc/linux
- https://learn.microsoft.com/archive/blogs/microsoft_press/new-book-windows-internals-seventh-edition-part-1