• Nie Znaleziono Wyników

Zależność oprogramowania systemowego od sprzętu

3. ARCHITEKTURA SYSTEMU OPERACYJNEGO

3.4. Zależność oprogramowania systemowego od sprzętu

Wiele systemów operacyjnych funkcjonuje na różnych platformach sprzętowych bez konieczności dokonywania głębokich zmian w systemie. Można to wyjaśnić faktem, że wiele platform sprzętowych ma analogiczne cechy wspomagające funkcjonowanie systemów operacyjnych. Dzięki temu można wydzielić stosunkowo wąską warstwę komponentów jądra systemu operacyjnego zależnych od sprzętu, podczas gdy pozostałe warstwy jądra są niezależne od sprzętu.

Sprzęt komputerowy Programy obsługi sprzętu Moduły zależne od sprzętu Podstawowe mechanizmy jądra Menedżery zasobów Interfejs wywołań systemowych

Rys. 3.7. Wielowarstwowa struktura jądra systemu operacyjnego 3.4.1. Sprzętowe środki wspomagania systemu operacyjnego

Decyzję o tym, które funkcje systemu operacyjnego będą realizowane sprzętowo, a które programowo, są podejmowane podczas projektowania systemu operacyjnego. Nie istnieje ostra granica między funkcjami realizowanymi sprzętowo i programowo. Niemniej praktycznie wszystkie współczesne platformy sprzętowe są wyposażone w typowy zbiór układów wspomagania systemu operacyjnego, do których można zaliczyć układy:

 wspomagania trybu uprzywilejowanego,

 translacji adresów,

 przełączania procesów,

 system przerwań,

 zegar systemowy,

Układ wspomagania trybu uprzywilejowanego jest oparty na rejestrze

systemowym procesora, określanym mianem słowa stanu procesora. Rejestr ten zawiera szereg znaczników określających tryb pracy procesora, a w tym znacznik trybu uprzywilejowanego. Zmiana trybu pracy procesora odbywa się poprzez wykonanie odpowiedniego rozkazu zmieniającego słowo stanu procesora.

Układy translacji adresów wykonują operacje przekształcenia adresów

wirtualnych, zawartych w wykonywanych programach, na adresy fizyczne. Do translacji adresów wykorzystywane są odpowiednie tablice przechowywane w pamięci operacyjnej, a w rejestrach procesora zapisane są jedynie wskaźniki (numery pozycji) na odpowiednie pozycje tablic. Środki translacji adresów sprzętowo realizują odpowiednie algorytmy przekształcania adresów, do których można zaliczyć segmentację oraz stronicowanie pamięci.

Układy przełączania procesów są przeznaczone do szybkiego zapisu

w pamięci kontekstu procesu, którego realizacja zostaje wstrzymana, oraz odczytu z pamięci kontekstu procesu, który staje się aktywny. Kontekst procesu zawiera zwykle wszystkie rejestry ogólnego przeznaczenia procesora, rejestr flag oraz te rejestry systemowe, które są związane z konkretnym procesem a nie z systemem operacyjnym (np. wskaźnik na tablicę translacji adresów procesu). Przełączenie kontekstu odbywa się w wyniku realizacji określonego rozkazu procesora.

System przerwań pozwala komputerowi reagować na zdarzenia zewnętrzne,

synchronizację wykonywania procesów, pracę układów WE/WY oraz przełączanie procesów. Wystąpienie przerwania informuje procesor o wystąpieniu w systemie komputerowym określonego zdarzenia niezsynchronizowanego z cyklem pracy procesora. Przykładami takich zdarzeń mogą być: zakończenie operacji WE/WY realizowanej przez urządzenie zewnętrzne, nieprawidłowe zakończenie operacji arytmetycznej (np. dzielenie przez zero), upływ określonego interwału czasu itp. Po wystąpieniu określonych warunków generacji przerwania źródło przerwania wystawia sygnał elektryczny informujący procesor o przerwaniu. Sygnał ten przerywa wykonywanie przez procesor aktualnego programu i powoduje przejście do realizacji wcześniej przygotowanej procedury obsługi przerwania. Z zasady operacja skoku do procedury obsługi przerwania jest związana ze zmianą poziomu uprzywilejowania. Po zakończeniu procedury obsługi przerwania następuje powrót do programu realizowanego przed wystąpieniem przerwania.

Zegar systemowy jest niezbędny w systemie operacyjnym do odmierzania

interwałów czasowych. Jest to najczęściej licznik elektroniczny zliczający impulsy o określonej częstotliwości, poczynając od zadanej wartości początkowej do zera. Wyzerowanie licznika powoduje generację przerwania, które następnie jest obsługiwane przez odpowiednią procedurę obsługi. Zegar systemowy służy przede wszystkim do odmierzania czasu realizacji poszczególnych procesów w systemie operacyjnym z podziałem czasu.

Układy ochrony obszarów pamięci zapewniają na poziomie sprzętowym

kontrolę adresów wystawianych przez procesor. Wystawiony adres porównywany jest z przestrzenią adresową przydzieloną danemu procesowi i w przypadku gdy adres przekracza zadany zakres, generowane jest przerwanie informujące system operacyjny o naruszeniu zadanych granic pamięci.

3.4.2. Komponenty systemu operacyjnego zależne od sprzętu

Jądro systemu operacyjnego może być zaprojektowane tak, że tylko część modułów jest zależna od sprzętu, podczas gdy pozostałe moduły są uniwersalne i nie zależą od platformy sprzętowej. Warstwa jądra systemu zależna od sprzętu jest bezpośrednio związana z warstwą środków sprzętowego wspomagania systemu operacyjnego. Taka lokalizacja znacznie ułatwia operację przeniesienia systemu operacyjnego na nową platformę sprzętową. Zasadniczym problemem występującym podczas przenoszenia systemu operacyjnego na inną platformę sprzętową jest inna lista rozkazów procesora. Problem ten jest rozwiązany dzięki tworzeniu oprogramowania systemowego w języku wysokiego poziomu (np. w języku C). W ten sposób, jeżeli producent komputera udostępnia kompilator danego języka wysokiego poziomu, to wystarczy oprogramowanie systemowe ponownie skompilować na nowej platformie sprzętowej.

Jednak w wielu przypadkach różnice w organizacji komputerów sięgają bardzo głęboko i przezwyciężenie ich jest bardzo trudne. Np. dla komputerów z jednym i z dwoma procesorami niezbędne są odmienne algorytmy przydziału procesora w systemie z podziałem czasu. Analogicznie w przypadku gdy procesor nie realizuje mechanizmów pamięci wirtualnych, moduł zarządzania pamięcią należy praktycznie napisać od nowa. W takich przypadkach niezbędne jest wprowadzenie do kodu systemu operacyjnego niezbędnych zmian związanych ze specyfiką platformy sprzętowej.

Szczególne miejsce wśród modułów jądra systemu operacyjnego posiadają niskopoziomowe sterowniki urządzeń zewnętrznych. Z jednej strony sterowniki te wchodzą w skład menedżera urządzeń WE/WY leżącego w wysoko-poziomowej warstwie jądra systemu operacyjnego (rys. 3.7), z drugiej strony niskopoziomowe sterowniki urządzeń uwzględniają wszystkie szczegóły urządzeń zewnętrznych, co powoduje, że można je przyporządkować do niskopoziomowych modułów zależnych od platformy sprzętowej. Taka dwoistość powoduje, że ścisła hierarchiczna budowa systemu operacyjnego nie jest możliwa.

3.4.3. Przenoszenie systemu operacyjnego na inną platformę

W przypadku gdy kod systemu operacyjnego może być stosunkowo łatwo przeniesiony na platformę sprzętową zawierającą inny typ procesora oraz posiadającą inną architekturę, to system taki określa się mianem mobilnego

(ang. portable). Aby system operacyjny był systemem mobilnym, należy spełnić następujące warunki.

 Zdecydowana większość oprogramowania systemowego powinna być napisana w języku wysokiego poziomu, dla którego są dostępne kompilatory na wielu platformach sprzętowych (np. język C). W przypadku gdy oprogramowanie systemowe jest napisane w assemblerze, przeniesienie systemu operacyjnego będzie możliwe wyłącznie na komputery zawierające procesory charakteryzujące się tą samą listą rozkazów. Z zasady w assemblerze pisana jest wyłącznie część oprogramowania systemowego ściśle związana ze sprzętem.

 Rozmiar części kodu systemu operacyjnego, związanego z konkretną platformą sprzętową, powinien być zredukowany do minimum.

 Fragmenty kodów opracowane na konkretną platformę sprzętową powinny być izolowane od pozostałych programów i umieszczone w określonych modułach systemu operacyjnego.

W idealnym przypadku warstwa jądra zależna od platformy sprzętowej powinna w pełni izolować pozostałą część systemu operacyjnego od szczegółów związanych z architekturą komputera (pamięci cache, sterowniki przerwań itp.). W wyniku tego ma miejsce podmiana komputera rzeczywistego maszyną wirtualną, jednakową dla wszystkich platform sprzętowych, a wszystkie warstwy jądra systemu leżące powyżej warstwy komponentów zależnych od sprzętu, mogą być napisane dla tej maszyny wirtualnej. Na rys. 3.8 przedstawiono schematycznie operację instalacji danego systemu operacyjnego na różnych platformach sprzętowych.