Struktura systemów komputerowych i operacyjnych


Streszczenie

W niniejszym wykładzie przedstawiamy elementy architektur systemów komputerowych i struktur systemów komputerowych. Omawiając architektury systemów komputerowych koncentrujemy się na tych elementach, które są najistotniejsze dla konstrukcji systemu operacyjnego: mechanizmach wejścia/wyjścia, pamięci i mechanizmach ochrony. Omawiając strukturę systemów komputerowych, przedstawiamy pokrótce składowe systemu, funkcje systemowe oraz budowę systemu operacyjnego.


Elementy architektury systemu komputerowego

W uproszczeniu, architektura współczesnego komputera uniwersalnego wygląda tak, jak to przedstawiono na rysunku poniżej. Komputer składa się z: procesora, urządzeń zewnętrznych, sterowników urządzeń zewnętrznych, pamięci operacyjnej, pamięci podręcznej, sterownika pamięci i magistrali systemowej.
Każdy sterownik jest odpowiedzialny za określoną grupę urządzeń, nadzoruje ich pracę i pośredniczy w przesyłaniu informacji z i do urządzeń. Sterownik ma własną pamięć, w której może buforować dane przesyłane do i z urządzeń. Pozwala to na szybkie przesłanie informacji magistralą systemową, niezależnie od prędkości urządzenia. Do magistrali systemowej mogą też być podłączone sterowniki, które łączą główną magistralę z magistralami niższego poziomu (np. PCI, ISA), do których też mogą być podłączone sterowniki, itd. Często też urządzenia zewnętrzne są podłączone do sterownika za pomocą odpowiedniej magistrali (np. SCSI). Tak więc w systemie zwykle mamy wiele magistral.

Wszystkie urządzenia podłączone do magistrali mogą działać równolegle. Swoje działania muszą synchronizować jedynie wówczas, gdy chcą korzystać z magistrali, czyli głównie przy przesyłaniu informacji do i z urządzenia. Taka równoległość zwiększa wydajność systemu.

Mechanizm przerwań

Mechanizm przerwań służy informowaniu o zdarzeniach zachodzących w urządzeniach wejścia/wyjścia. Typowe takie zdarzenia to zakończenie zleconej operacji wejścia/wyjścia oraz zdarzenia zewnętrzne, takie jak naciśnięcie klawisza na klawiaturze, ruch myszki, czy otrzymanie przez sieć pakietu danych. W momencie zajścia zdarzenia urządzenie generuje sygnał przerwania. W odpowiedzi na ten sygnał procesor przerywa wykonywanie aktualnie wykonywanego ciągu instrukcji, zapamiętuje na stosie systemowym adres określający gdzie przerwano wykonywanie instrukcji i wykonuje określoną procedurę obsługi przerwania. Po jej zakończeniu następuje powrót do przerwanego ciągu instrukcji. Przypomina to trochę wywołanie procedury, tyle że bodziec do wywołania procedury pochodzi z urządzenia wejścia/wyjścia, a nie z programu.

Przerwania powodowane przez urządzenia wejścia/wyjścia są nazywane przerwaniami sprzętowymi. Możliwe jest również programowe wywoływanie przerwań. Polega ono na wykonaniu specjalnej instrukcji wywołującej odpowiednią procedurę obsługi przerwania. Różnice między wywoływaniem przerwań programowych, a wywoływaniem procedur są związane z mechanizmami ochrony i omówimy je dalej.

Istnieje wiele możliwych przerwań. W jaki sposób jedne przerwania są odróżniane od innych? Stosowane są dwa rozwiązania:

Zwykle procedura obsługi przerwania powinna mieć charakter atomowy, tzn. jej wykonanie nie powinno być przerywane, np. przez inne procedury obsługi przerwań. Nie można jednak zagwarantować, że w trakcie wykonywania procedury obsługi przerwania nie pojawi się żadne przerwanie sprzętowe. Dlatego też istnieje możliwość blokowania przerwań. Jeżeli przerwania są zablokowane, to obsługa pojawiających się przerwań sprzętowych jest odłożona do momentu odblokowania przerwań. Istnieje jednak wyjątek od tej zasady. Niektóre przerwania, tzw. przerwania nieblokowalne (niemaskowalne), sygnalizujące błędy krytyczne dla działania systemu komputerowego nie podlegają blokowaniu.

Synchroniczne i asynchroniczne wejście/wyjście

System operacyjny zlecając operację wejścia/wyjścia musi wiedzieć kiedy taka operacja zostanie wykonana. Stosowane są dwa rozwiązania: Synchroniczne operacje wejścia/wyjścia są łatwiejsze do zaimplementowania, jednak operacje asynchroniczne pozwalają na zwiększenie wydajności systemu. W środowisku wieloprogramowym pozwalają one na równoczesne wykonywanie wielu operacji wejścia/wyjścia i obliczeń. Podobnie, jeżeli zadanie chce wykonać operację wejścia/wyjścia na urządzeniu, które aktualnie jest zajęte wykonywaniem innej operacji, to wykonanie takiego zadania jest wstrzymywane, aż do momentu, gdy dane urządzenie będzie dostępne i zlecona operacja zostanie wykonana. System operacyjny, który wykonuje operacje wejścia/wyjścia asynchronicznie musi pamiętać informacje o wszystkich wykonywanych i oczekujących operacjach wejścia/wyjścia. Informacje te są przechowywane w tablicy stanów urządzeń. Tablica ta zawiera po jednej pozycji dla każdego urządzenia w systemie. Na pozycję w takiej tablicy składa się opis aktualnego stanu urządzenia oraz kolejka zleceń operacji wejścia/wyjścia. Jeżeli urządzenie nie wykonuje żadnej operacji wejścia/wyjścia, to odpowiadająca mu kolejka jest pusta. W przeciwnym przypadku, pierwsze zlecenie w kolejce odpowiada aktualnie wykonywanej operacji, a kolejne zlecenia odpowiadają operacjom oczekującym na wykonanie. Zlecenia w kolejce zawierają m.in. informacje o zadaniu, od którego pochodzi zlecenie, tak że w momencie wykonania zlecenia system operacyjny wie, które zadanie należy wznowić.

Układ DMA

W trakcie wykonywania asynchronicznej operacji wejścia/wyjścia następujące czynności zajmują czas pracy procesora: obsługa tablicy stanów urządzeń, zlecenie wykonania operacji sterownikowi urządzenia, przesłanie zapisywanych/odczytywanych danych, obsługa przerwania kończącego wykonanie operacji. Jeżeli zapisywane/odczytywane są pojedyncze znaki, tak jak w przypadku odczytywania znaków z klawiatury, to takie rozwiązanie jest akceptowalne. Jeśli jednak przesyłane są duże ilości danych, jak to ma miejsce w przypadku zapisu/odczytu z dysku, to procesor nie musi sam kopiować danych z/do pamięci operacyjnej do/z sterownika urządzenia. Może go w tym wyręczyć układ DMA (bezpośredniego dostępu do pamięci, ang. direct memory access), a procesor może w tym czasie wykonywać obliczenia. Układ DMA do przesyłania informacji potrzebuje oczywiście dostępu do magistrali systemowej. Korzysta z niej jednak w tych chwilach, gdy procesor z niej nie korzysta.

Rodzaje pamięci

W systemie komputerowym znajduje się wiele rodzajów pamięci. Jednym z podstawowych rodzajów pamięci jest pamięć operacyjna. Programy i dane, aby mogły być bezpośrednio przetwarzane przez procesor muszą być umieszczone w pamięci operacyjnej. Gdyby nie dwie jej wady, byłaby to pamięć idealna: Procesor przetwarzając informacje zawarte w pamięci operacyjnej przechowuje niektóre dane w rejestrach. Rejestry możemy traktować jak bardzo małą pamięć, do której procesor ma bardzo szybki dostęp.

Istnieje jeszcze jeden rodzaj pamięci dostępnej procesorowi -- pamięć podręczna procesora. Pamięć podręczna jest szybsza od pamięci operacyjnej, ale jest też od niej mniejsza. Zawiera ona kopię tych obszarów pamięci operacyjnej, z których aktualnie (najczęściej) korzysta procesor. Ponieważ pamięć podręczna dubluje funkcjonalność pamięci operacyjnej, jest ona niewidoczna z programistycznego punktu widzenia. Zastosowanie pamięci podręcznej procesora istotnie polepsza wydajność systemu.

Większość systemów komputerowych jest wyposażona w masową pamięć trwałą, czyli taką, która nie traci swojej zawartości po odłączeniu zasilania. W pamięci tej przechowywane jest wykorzystywane oprogramowanie, najrozmaitsze dane, jak również programy tworzące system operacyjny. Najczęściej pamięć ta jest zrealizowana w postaci dysków magnetycznych, choć możliwe są też inne rozwiązania. Zwykle istnieje też możliwość podłączenia do systemu komputerowego wymiennych nośników pamięci trwałej: dyskietek, taśm magnetycznych, dysków CD/DVD itp. Nośniki te są wolniejsze od dysków magnetycznych, jednak ich zaletą jest wymienność, możliwość przenoszenia danych między systemami komputerowymi oraz niska cena.

Dyski magnetyczne mają następującą konstrukcję: zestaw sztywnych dysków pokrytych dwustronnie nośnikiem magnetycznym osadzony jest na wspólnej osi i obraca się ze stałą dużą prędkością. Podobnie jak ramię gramofonu przesuwa się nad płytą gramofonową, tak nad powierzchniami dysków przesuwają się ramiona z głowicami magnetycznymi. Ramiona te są osadzone na wspólnej osi i znajdują się zawsze w tej samej pozycji jedno nad drugim. Informacja zapisana po jednej stronie dysku jest podzielona na ścieżki i sektory. Ścieżka ma kształt okręgu i po umieszczeniu głowicy nad ścieżką może być odczytana bez konieczności przesuwania głowicy. Ścieżka jest dalej podzielona na sektory -- podstawowe jednostki zapisu/odczytu. Sektory mają zwykle wielkość 512B. Zestaw ścieżek, które mogą być odczytane przez wszystkie głowice, przy zadanym ich położeniu tworzy tzw. cylinder. Sposób rozmieszczenia informacji na dysku nie jest bez znaczenia. Informacje, które są zapisane w obrębie jednego cylindra mogą być odczytane stosunkowo szybko. Natomiast jeżeli odczytanie informacji wymaga przemieszczania głowic, to wiąże się to z dużo większym opóźnieniem.

Porównując różne rodzaje pamięci w systemie komputerowym można zauważyć, że układają się one w hierarchię: od pamięci szybkich, drogich i niedużych, do pamięci wolniejszych, tanich i masowych. Na szczycie tej hierarchii znajdują się rejestry procesora, dalej jest pamięć podręczna procesora, pamięć operacyjna i pamięci dyskowe. Oczywiście w przypadku konkretnych systemów komputerowych hierarchia ta może być bogatsza.

W obrębie hierarchii pamięci system operacyjny realizuje dwa przeciwstawne mechanizmy: buforowanie i pamięć wirtualna. Mechanizm buforowania polega na tym, że zamiast przechowywać aktualnie wykorzystywane informacje w wolniejszej pamięci, przechowuje się je w wydzielonym obszarze szybszej pamięci. Za cenę zużycia części szybszej pamięci zyskujemy na wydajności. Przykładami buforowania są: buforowanie operacji dyskowych i pamięć podręczna procesora. Mechanizm pamięci wirtualnej polega na tym, że część informacji, które powinny być przechowywane w szybszej pamięci, ale nie są w danej chwili używane, są przechowywane w wolniejszej pamięci. Dopiero, gdy są faktycznie potrzebne, są przenoszone do szybszej pamięci. Za cenę pewnego wydłużenia czasu dostępu do informacji zyskujemy złudzenie, że dysponujemy obszerniejszą pamięcią szybką. Mimo, że mechanizmy te wydają się wzajemnie przeciwstawne, to współdziałają one w efektywniejszym wykorzystaniu systemu. Informacje, które są w danej chwili często wykorzystywane migrują do pamięci szybszych, a te, które w danej chwili nie są potrzebne są spychane do pamięci wolniejszych.

Sprzętowe mechanizmy ochrony

Systemy operacyjne stanowią środowisko wykonywania dla wielu zadań pochodzących często od wielu użytkowników. Zadania te współdzielą między siebie rozmaite zasoby systemowe. Dlatego też system operacyjny pełni nie tylko rolę pomocniczą, ale i nadzorczą. Pilnuje, czy każde z zadań korzysta jedynie z tych zasobów, które zostały mu przydzielone i nie szkodzi innym zadaniom. (Takie szkodliwe działania nie muszą wynikać ze złośliwości programistów, lecz ze zwykłych błędów programistycznych.) Aby pełnić funkcje nadzorcze, system operacyjny wymaga pewnych sprzętowych mechanizmów ochronnych.

Jednym ze sprzętowych mechanizmów ochronnych jest dualny tryb pracy procesora. Polega on na tym, że procesor może pracować w dwóch trybach: systemowym (uprzywilejowanym) i użytkownika (ograniczonym). System operacyjny pracuje w trybie systemowym, a zadania użytkowników w trybie użytkownika. Procesor będąc w trybie systemowym może wykonywać wszystkie instrukcje, natomiast w trybie użytkownika wykonanie pewnych instrukcji jest zabronione. Instrukcje takie nazywamy instrukcjami uprzywilejowanymi.

Zastanówmy się jakich instrukcji nie można wykonywać w trybie użytkownika. Oczywiście zmiana trybu pracy procesora jest instrukcją uprzywilejowaną. Jedyną metodą powrotu z trybu użytkownika do trybu systemowego jest przerwanie (sprzętowe lub programowe) -- procedury obsługi przerwań są wykonywane w trybie systemowym. W konsekwencji, cały mechanizm przerwań pozostaje w gestii systemu. Tak więc blokowanie i odblokowywanie przerwań są również instrukcjami uprzywilejowanymi.

Jednym ze współdzielonych przez zadania zasobów jest pamięć. Każde zadanie powinno mieć dostęp tylko do przydzielonej mu przez system operacyjny pamięci, a nie powinno mieć dostępu do obszarów pamięci innych zadań, ani do pamięci systemu operacyjnego. Tak więc, w trybie użytkownika przy każdym dostępie do pamięci trzeba sprawdzić, czy aktualnie wykonywane zadanie ma prawo odwoływania się do danej komórki pamięci. Jest to realizowane przez sprzętowy mechanizm adresowania pamięci. Zajmiemy się tym tematem dokładniej przy okazji zarządzania pamięcią.

Zadanie
Podaj przykład obszaru pamięci, który nigdy nie może być dostępny w trybie użytkownika.
Rozwiązanie.

Urządzenia wejścia/wyjścia są również współdzielone przez zadania użytkowników. Nadzór nad ich wykorzystaniem należy do systemu operacyjnego. Dlatego też instrukcje komunikacji z urządzeniami zewnętrznymi (ich sterownikami) są instrukcjami uprzywilejowanymi. Dotyczy to również układu DMA i innych programowalnych mechanizmów sprzętowych, nawet jeśli nie są one urządzeniami wejścia/wyjścia.

Zadanie
Podaj przykład innego urządzenia sprzętowego, które nie jest urządzeniem wejścia/wyjścia, a które może być ustawiane/programowane tylko w trybie systemowym.
Rozwiązanie.

Kolejnym zasobem współdzielonym przez zadania jest sam procesor. Jeżeli zadanie zleci wykonanie operacji wejścia/wyjścia (lub ogólniej, wywoła jakąkolwiek funkcję systemową), to system może wstrzymać jego wykonywanie i przydzielić procesor innemu zadaniu. Jeżeli jednak zadanie jest zajęte wykonywaniem obliczeń, to w jaki sposób można zapobiec zawłaszczeniu przez nie dostępu do procesora? Jest to zrealizowane za pomocą mechanizmu przerwań zegarowych. W systemie komputerowym działa programowalny zegar, który z określoną częstotliwością generuje przerwanie sprzętowe. Jeżeli zadanie powinno przekazać dostęp do procesora innemu zadaniu, to przy okazji najbliższego przerwania zegarowego procedura obsługi przerwania może wstrzymać wykonywanie zadania i uruchomić inne zadanie. Oczywiście programowanie zegara stanowi instrukcję uprzywilejowaną.

Do instrukcji uprzywilejowanych należy też kilka instrukcji, o których nie było tu mowy, np. instrukcja zatrzymania systemu komputerowego halt.

Rola przerwań w systemie operacyjnym

Spróbujmy podsumować wszystkie sytuacje, w których w systemie operacyjnym występują przerwania. Sygnalizują one zakończenie operacji wejścia/wyjścia. Informują o zewnętrznych zdarzeniach i komunikacji docierającej do systemu komputerowego. Przerwania programowe, dzięki temu, że powodują przejście w tryb systemowy, są zwykle wykorzystywane jako forma wywoływania funkcji systemowych. Można więc śmiało powiedzieć, że wszystkim zdarzeniom w systemie operacyjnym towarzyszą przerwania. Inaczej mówiąc: system operacyjny jest sterowany przerwaniami (ang. event-driven).

Struktura systemu operacyjnego

Składowe systemu operacyjnego

System operacyjny to duży i bardzo złożony system informatyczny. Systemy takie muszą mieć modularną strukturę, inaczej trudno poradzić sobie z ich złożonością. W typowym systemie operacyjnym wyróżniamy następujące podsystemy:

Podsystem zarządzania procesami

Zanim dokładniej przedstawimy ten podsystem, musimy pokrótce przedstawić pojęcie procesu. Proces to wykonujący się program. Program to obiekt pasywny (tak jak plik na dysku), a proces to obiekt aktywny (uruchomiony program). W szczególności jeżeli równocześnie kilka razy uruchomimy ten sam program, to będziemy mieli do czynienia z kilkoma procesami, ale z tylko z jednym programem. Pojęcie procesu jest dokładniej przedstawione w kolejnym wykładzie. Do tej pory używaliśmy pojęcia zadania, jest to jednak pojęcie bardziej ogólne. Jeżeli wykonanie zadania polega na uruchomieniu programu i przetworzeniu konkretnych danych, to możemy używać tych pojęć zamiennie. Zadanie może jednak obejmować kilka współbieżnie działających, współpracujących ze sobą procesów. Wówczas są to dwa różne pojęcia. Możemy też mieć do czynienia z procesami systemowymi, które nie przynależą do żadnych zadań -- np. proces buforujący drukowane dokumenty.

Podsystem zarządzania procesami śledzi wszystkie procesy działające w systemie (zarówno systemowe, jak i procesy użytkowników), przydzielone im zasoby, ich stan oraz to, który proces w danej chwili jest wykonywany. Podsystem ten odpowiada za:

Problematyka zarządzania procesami przedstawiona jest w wykładach 4-6.

Podsystem zarządzania pamięcią

Podsystem ten śledzi, które obszary pamięci operacyjnej są wolne, a które są zajęte i przez kogo. Przydziela on pamięć procesom i zwalnia ją. Zajmuje się on również pamięcią wirtualną. W środowisku wieloprogramowym decyduje on też o tym, które programy mają być załadowane do pamięci operacyjnej, a które mają oczekiwać na uruchomienie. Dokładniej zajmujemy się tym podsystemem w wykładach 7 i 8.

Podsystem systemu plików

Podsystem ten realizuje pojęcia plików i katalogów, ukrywając jednocześnie przed użytkownikiem sposób ich realizacji. Realizuje on: Podsystem ten jest opisany dokładniej w wykładzie 9.

Podsystem wejścia/wyjścia

Podsystem ten ukrywa przed użytkownikiem szczegóły dotyczące urządzeń wejścia/wyjścia. W jego skład wchodzą: Dokładniej zajmujemy się tym podsystemem w wykładzie 10.

Podsystem pamięci pomocniczej

Podsystem ten zarządza urządzeniami pamięci pomocniczej (zwykle jest to pamięć dyskowa), śledzi, które obszary są wolne, a które zajęte, przydziela pamięć, szereguje odwołania do pamięci pomocniczej. Podsystem ten świadczy usługi zarówno podsystemowi systemu plików, jak i pamięci wirtualnej. Zagadnienia dotyczące tego podsystemu są omówione w wykładzie 11.

Podsystem usług sieciowych

System rozproszony to system składający się z wielu komputerów połączonych siecią komputerową. Pewne funkcje takiego systemu nie są realizowane w obrębie pojedynczego komputera, lecz są rozproszone między połączone komputery. Podsystem ten realizuje komunikację między połączonymi komputerami oraz rozproszone funkcje systemu. Przykładem takich rozproszonych funkcji może być sieciowy system plików omówiony w wykładzie 12.

Podsystem ochrony

W systemie, z którego korzysta wielu użytkowników, istnieje potrzeba określenia z jakich zasobów mogą korzystać poszczególni użytkownicy i w jakim zakresie. Zajmuje się tym właśnie podsystem ochrony.

Interpreter poleceń i programy użytkowe

W skład systemu operacyjnego wchodzi również interpreter poleceń systemowych, który stanowi dla użytkowników interfejs do wydawania poleceń systemowi operacyjnego. W wykładzie 2 przedstawiliśmy przykładowy interpreter poleceń bash. Interpreter poleceń staje się potężnym narzędziem dopiero, gdy korzysta się z niego w połączeniu z rozmaitymi programami użytkowymi dostarczanymi w ramach systemu operacyjnego.

Usługi systemu operacyjnego

System operacyjny tworzy środowisko udostępniające pewne usługi użytkownikom oraz ich programom. Można powiedzieć, że system operacyjny udostępnia dwa interfejsy. Jeden z nich, przeznaczony dla programów użytkowników, tworzą funkcje systemowe. Drugi z nich, przeznaczony dla użytkowników, tworzą programy systemowe oraz systemowy interfejs użytkownika. Funkcjonalność tych dwóch interfejsów zachodzi na siebie, choć nie jest identyczna. Usługi systemowe udostępniane w ramach tych dwóch interfejsów można pogrupować w następujący sposób:

Funkcje systemowe

Programy użytkowników mają dostęp do usług systemu operacyjnego poprzez tzw. funkcje systemowe. Funkcje te są widoczne w języku programowania podobnie jak funkcje z tego języka, a ich konkretny mechanizm wywoływania jest ukryty przed programistą. Czasami też w języku dostępne są operacje trochę wyższego poziomu, które są zaimplementowane za pomocą funkcji systemowych. Na przykład, dostępne operacje na plikach mogą być niskopoziomowe -- pliki traktowane są w nich tak jak widzi je system operacyjny -- lub mogą implementować pewną strukturę pliku -- np. to, że plik jest ciągiem rekordów -- która nie jest znana systemowi operacyjnemu. Funkcje udostępniane przez system operacyjny możemy pogrupować w następujący sposób:

Programy systemowe

Programy systemowe są to programy rozprowadzane razem z systemem, które umożliwiają użytkownikowi dostęp do pewnych usług systemowych. Niektóre z nich są tylko interfejsem do funkcji systemowych, niektóre łączą proste funkcje systemowe w bardziej złożone usługi, a niektóre implementują usługi niedostępne w postaci funkcji systemowych. Programy systemowe można podzielić na następujące kategorie:

Struktura systemu

System operacyjny, to bardzo złożony system informatyczny. Musi on mieć odpowiednią strukturę, tak aby jego zadania mogły być podzielone na mniejsze moduły o dobrze określonej funkcjonalności i interfejsach.

Niestety nie zawsze tak jest. Czasami systemy operacyjne powstawały jako niewielkie systemy o ograniczonej funkcjonalności, pozbawione właściwej struktury, a z czasem rozrastały się do systemów operacyjnych, ciągnąc ze sobą bagaż złych decyzji projektowych. Przykładem takiego systemu może być MS-DOS. Można w nim wyróżnić cztery moduły:

  1. BIOS (ang. basic input-output system) -- moduły obsługi urządzeń zapisane w pamięci stałej ROM (ściśle rzecz biorąc nie wchodzą one w skład MS-DOS, lecz są przezeń wykorzystywane).
  2. Moduł obsługi urządzeń.
  3. Rezydentna część systemu i programy rezydentne.
  4. Interpreter poleceń i programy użytkownika.
Jeden z problemów polega na tym, że moduły te nie tworzą kolejnych "warstw", poziomów abstrakcji. Programy rezydentne i programy użytkownika mogą równie dobrze bezpośrednio komunikować się ze sterownikami urządzeń, korzystać z modułów BIOS, jak korzystać z funkcji systemowych. W takiej sytuacji nie można zapewnić należytej ochrony w systemie i nie można tego poprawić nie zmieniając struktury systemu.

System Unix ma inną strukturę. Składa się on z jądra i programów systemowych. Programy systemowe znajdują się powyżej interfejsu funkcji systemowych, a jądro poniżej tego interfejsu. Można więc powiedzieć, że Unix składa się z warstw przedstawionych na poniższym rysunku. Jednakże funkcjonalność zebrana w jądrze może wydawać się nadmierna.

Użytkownicy
Programy użytkowe
Interpreter poleceń
programy systemowe
biblioteki systemowe
Jądro
Interfejs funkcji systemowych
Podsystem plików
Komunikacja międzyprocesowa
Buforowanie
Szeregowanie procesów
Obsługa urządzeń
Zarządzanie pamięcią
Interfejs sterowania urządzeniami

Urządzenia
Trochę inne podejście zastosowano w systemie Mach. Jądro systemu zostało tam zredukowane do minimum, a wszystkie pozostałe funkcje zostały przeniesione do programów systemowych, lub wręcz programów użytkowych. W tym przypadku mówimy o architekturze mikrojądra.

Pewnym rozwiązaniem problemu modularyzacji systemu operacyjnego jest tzw. podejście warstwowe. W podejściu tym dzielimy system operacyjny na warstwy. Każda warstwa udostępnia warstwie powyżej pewien interfejs. Implementacja danej warstwy może korzystać z operacji udostępnianych przez warstwę poniżej. Zwykle część operacji udostępnianych przez daną warstwę polega na wywoływaniu operacji niższej warstwy, a część jest zaimplementowanych w danej warstwie. Sprzęt możemy traktować jako warstwę najniższą, a środowisko pracy użytkownika, jako interfejs warstwy najwyższej. Pewną wadą podejścia warstwowego jest zmniejszona efektywność wywoływania operacji implementowanych przez niższe warstwy, wynikająca z przekazywania wywołania operacji między kolejnymi warstwami.


Podsumowanie

Omówiliśmy w tym wykładzie dwa tematy: elementy architektur systemów komputerowych i struktury systemów komputerowych. Przedstawiliśmy te podstawowe pojęcia z architektury systemów komputerowych, które będą nam potrzebne w dalszym toku przedmiotu. Prezentując strukturę systemów operacyjnych, przedstawiliśmy strukturę usług udostępnianych przez system, rodzaje funkcji systemowych i programów systemowych, a także strukturę budowy systemu. Kolejne wykłady będą stanowiły rozwinięcie wybranych tematów zasygnalizowanych przy okazji przedstawiania struktury systemów operacyjnych.

Słownik

asynchroniczne operacje wejścia/wyjścia
implementacja operacji wejścia/wyjścia, w której po zleceniu operacji procesor zaczyna wykonywać inne zadanie, a o zakończeniu wykonywania operacji wejścia/wyjścia jest informowany za pomocą przerwania.
blokowanie przerwań
mechanizm polegający na czasowym wstrzymaniu reagowania na część przerwań sprzętowych.
dualny tryb pracy procesora
mechanizm ochrony polegający na wyróżnieniu dwóch trybów pracy procesora: systemowego i użytkownika; wykonywanie instrukcji uprzywilejowanych jest zabronione.
funkcje systemowe
funkcje udostępniane przez system operacyjny programom użytkowników; tworzą one interfejs programistyczny między systemem operacyjnym a programami użytkowników.
instrukcje uprzywilejowane
instrukcje, których wykonywanie jest dozwolone tylko w trybie systemowym procesora.
mikrojądro
struktura systemu, w której system składa się z jądra i programów systemowych, lecz jądro zawiera minimum funkcjonalności.
odpytywanie
cykliczne wysyłanie zapytań do urządzeń wejścia/wyjścia, czy zaszły jakieś zdarzenia istotne dla systemu operacyjnego.
procedura obsługi przerwania
procedura wykonywana w reakcji na zajście przerwania; jej adres jest zwykle przechowywany w wektorze przerwań.
pamięć operacyjna
pamięć, w której umieszczane są programy i dane w celu przetwarzania ich przez procesor.
pamięć trwała
to pamięć, która nie traci swojej zawartości po odłączeniu zasilania.
pamięć ulotna
pamięć, której zawartość znika po wyłączeniu zasilania.
przerwanie
mechanizm informowania systemu operacyjnego przez urządzenia zewnętrzne o zajściu określonych zdarzeń, polegający na wysłaniu przez urządzenie sygnału, który przerywa aktualnie wykonywany ciąg instrukcji i wykonanie odpowiedniej procedury obsługi przerwania; przerwania mogą być też powodowane przez wykonanie odpowiedniej instrukcji procesora.
przerwanie programowe
przerwanie spowodowane wykonaniem specjalnej instrukcji w programie.
przerwanie sprzętowe
przerwanie spowodowane przez urządzenie wejścia/wyjścia lub zegar.
przerwanie zegarowe
przerwanie generowane przez wbudowany, programowalny zegar.
synchroniczne operacje wejścia/wyjścia
implementacja operacji wejścia/wyjścia, w której po zleceniu operacji procesor aktywnie czeka na jej zakończenie.
tablica stanów urządzeń
tablica zawierająca opisy stanów urządzeń wejścia/wyjścia oraz kolejki zleceń operacji wejścia/wyjścia.
układ DMA
Direct memory access -- układ bezpośredniego dostępu do pamięci; układ służący do przesyłania obszarów pamięci do/ze sterowników urządzeń bez udziału procesora.
wektor przerwań
tablica adresów procedur obsługi przerwań.

Zadania

  1. (2p.) Jakie zastosowanie ma układ DMA?
  2. (4p.) Dlaczego wszystkie przerwania muszą być obsługiwane przez procedury systemowe, a nie użytkownika?
  3. (4p.) Jeżeli system komputerowy nie ma dualnego trybu pracy procesora, to czy można na nim zaimplementować bezpieczny system operacyjny?

Strona przygotowana przez Marcina Kubicę i Krzysztofa Stencla.