WYKŁAD l
Co to jest system operacyjny?
System operacyjny jest programem, który działa Jako pośrednik między użytkownikiem komputera, a sprzętem komputerowym. Zadaniem systemu operacyjnego jest tworzenie środowiska, w którym użytkownik może wykonywać programy. Podstawowym celem systemu operacyjnego jest zatem spowodowanie, aby system komputerowy był wygodny w użyciu. Drugi cel stanowi wydajna eksploatacja sprzętu komputerowego.
System komputerowy można z grubsza podzielić na cztery części składowe; sprzęt, system operacyjny, programy użytkowe i użytkowników (rys. l).
Sprzęt (procesor, czyli jednostka centralna, pamięć i urządzenia wejścia-wyjścia) stanowi podstawowe zasoby systemu komputerowego. Programy użytkowe (kompilatory, systemy baz danych, gry komputerowe bądź programy handlowe) określają sposoby użycia tych zasobów do rozwiązania zadań stawianych przez użytkowników.
System operacyjny nadzoruje i koordynuje posługiwanie się sprzętem przez różne programy użytkowe, które pracują na zlecenie różnych użytkowników.
System operacyjny Jest podobny do rządu, Częściami składowymi systemu komputerowego są: sprzęt, oprogramowanie i dane. System operacyjny dostarcza środków do właściwego użycia tych zasobów w działającym systemie komputerowym. Podobnie jak system operacyjny nie wykonuje sam żadnej użytecznej funkcji. Po prostu tworzy środowisko, w którym inne programy mogą wykonywać pożyteczne prace.
Nieco inne spojrzenie na system operacyjny jest związane z zapotrzebowaniem na sterowanie rozmaitymi urządzeniami wejścia-wyjścia i programami użytkownika. System operacyjny jest programem sterującym. Program sterujący nadzoruje działanie pracą użytkownika, przeciwdziała błędom i zapobiega niewłaściwemu użyciu komputera. Zajmuje się zwłaszcza obsługiwaniem i kontrolowaniem pracy urządzeń wejścia-wyjścia Nie ma wszakże w pełni adekwatnej definicji systemu operacyjnego Istnienie systemów operacyjnych jest uzasadnione tym, że pozwalają one w rozsądny sposób rozwiązywać problem kreowania użytecznego systemu obliczeniowego.
Nie ma również uniwersalne akceptowanej definicji tego co jest, a co nie jest częścią systemu operacyjnego. Przyjmuje się w uproszczeniu, że należy wziąć pod uwagę to wszystko, co dostawca wysyła w odpowiedzi na nasze zamówienie na "system operacyjny".
Prawdopodobnie łatwiej definiować systemy operacyjne określając, co robią aniżeli czym są. Najważniejszym celem systemu operacyjnego jest wygoda użytkownika Systemy operacyjne istnieją, ponieważ przyjmuje się, że łatwiej z nimi niż bez nich korzystać z komputerów. Widać to szczególnie wyraźnie wówczas, gdy przyjrzymy się systemom operacyjnym małych komputerów osobistych.
Drugim celem jest efektywne działanie systemu komputerowego. Ten cel jest szczególnie ważny rozbudowanych wielodostępnych systemach z podziałem czasu. Systemy tego rodzaju są zazwyczaj bardzo kosztowne, toteż jest pożądane, aby były maksymalnie wydajne. Te dwa cele - wygoda i wydajność - są nieraz sprzeczne ze sobą. W przeszłości osiągnięcie wydajności było często przedkładane nad wygodę. Toteż teoria systemów operacyjnych skupia się przede wszystkim na optymalnym użytkowaniu zasobów komputerowych.
Początkowo komputery były obsługiwane za pośrednictwem konsoli operatora. Oprogramowanie taki, jak asemblery, programy lądujące i kompilatory poprawiły wygodę programowania, niemniej jednak wymagało ono sporo czasu na instalowanie. Aby zmniejszać czas instalowania zadań , wynajęto operatorów, a podobne zadania łączono w grupy zwane wsadami.
Systemy wsadowe pozwoliły na automatyczne porządkowanie zadań za pomocą rezydującego monitora i w znacznym stopniu zwiększyły ogólne wykorzystanie komputera. Komputer nie musiał już czekać na działanie człowieka. Jednak stopień użytkowania jednostki centralnej był wciąż niski z powodu dysproporcji między jej prędkością a całą prędkością urządzeń wejścia-wyjścia, Wprowadzono wówczas pracę pośrednią, powolnych urządzeń zewnętrznych. Inną metodą poprawiania sprawności systemu było buforowanie danych, umożliwiające równoczesne wykonywanie operacji wejściowych, wyjściowych i obliczeniowych dla danego zadania. Pomysł jest prosty. Po przeczytaniu danych, kiedy procesor może zacząć jc przetwarzać, wtedy poleca się urządzeniu wejściowemu natychmiastowe rozpoczęcie czytania następnych danych W ten sposób zarówno jednostka centralna jak i urządzenie wejściowe są zajęte. Przy odrobinie szczęścia, zanim jednostka centralna będzie gotowa do przyjęcia następnej porcji danych urządzenie wejściowe zakończy już jej czytanie. Wtedy procesor może zacząć przetwarzać nowo przeczytane dane, a urządzenie wejściowe - czytać następną porcję, Podobnie można postąpić na wyjściu. Tym czasem procesor posyła wytworzone dane do bufora, skąd może je pobierać urządzenie wyjściowe.
Duże ulepszenie w pracy pośredniej, stosowanej przez pewien czas do przygotowywania zadań do przetwarzania, spowodował szerokie upowszechnienie się systemów dyskowych, które szybko zastąpiły taśmy w większości sprzętów używane do pracy pośredniej. Systemy taśmowe były kłopotliwe ponieważ nie pozwalały aby dane z czytnika kart były przesyłane na jeden koniec taśmy, podczas gdy jednostka centralna pobierałaby inne dane z drugiego końca.
Przed czytaniem taśma musiała zostać w całości zapisana i przewinięte. Systemy dyskowe usunęły tą niedogodność. Głowica dysku może się przemieszczać z jednego miejsca na dysku do innego, co pozwala błyskawicznie przejść z obszaru dyskowego używanego przez czytnik do zapamiętywania nowych kart, do miejsca z którego procesor pobiera zawartość "następnej" karty.
W systemie dyskowym zawartość karty z czytnika kart jest przesyłana bezpośrednio na dysk. Rozmieszczenie obszarów kart jest zapisywane w tablicy przechowywanej przez system operacyjny. Podczas wykonywania zadania, płynąca z niego zamówienia na dane wejściowe z czytnika kart są realizowane przez czytanie z dysku. Podobnie, gdy zadanie zażąda wyprowadzenia wiersza na drukarkę, wówczas dany wiersz będąc skopiowany do bufora systemowego i zapisywany na dysku. Po zakończeniu zadania jego wyniki są rzeczywiście drukowane.
Tej metodzie przetwarzania danych nadano nazwę spooling (rys. 2), który utworzono jako skrót określenia simultaneous peripheroe operation on-line (jednoczesna bezpośrednia praca urządzeń). Spooling w istocie polega na tym, że używa się dysku jako bardzo wielkiego buforu do czytania danych z maksymalnym wyprzedzeniem z urządzeń wejściowych oraz do przekazywania plików wejściowych do czasu, aż urządzenia wyjściowe będą w stanie je przyjąć.
Najistotniejszym aspektem planowania zadań jest umożliwienie wieloprogramowości, Praca pośrednia, buforowanie i spooling z jego nakładanymi operacjami wejścia-wyjścia mają swoje ograniczenia, jeden użytkownik nie jest w stanie - ogólnie biorąc - stale angażować zarówno procesor, jak i urządzenia. Wieloprogramowość zwiększa wykorzystanie procesora dzięki takiej organizacji zadań, aby procesor miał zawsze coś do roboty.
Idea jest następująca. System operacyjny wybiera i rozpoczyna wykonywanie jednego zadania z puli. Prędzej czy później zadanie musi czekać na wykonanie pewnej pracy, np. na założenie taśmy na przewijak, napisanie polecenia na klawiaturze lub na zakończenie operacji wejścia-wyjścia. W systemie bez wieloprogramowości (jednoprogramowym) jednostka centralna jest wtedy bezużyteczna. Wieloprogramowy system operacyjny przechodzi w takiej sytuacji po prostu do wykonywania innego zadania. Kiedy i to zadanie zacznie na coś czekać, wtedy jednostka centralna będzie przełączana na jeszcze inne zadanie itd. Kiedy wreszcie pierwsze zadanie zakończy oczekiwanie, wtedy otrzyma z powrotem dostęp do procesora. Dopóki są jakieś zadania do wykonania, dopóty procesor nie ma przestojów Podział czasu (inaczej wielozadaniowości) stanowi logiczne rozszerzenie wieloprogramowości, Procesor wykonuje na przemian wiele rożnych zadań, przy czym przełączenia następują tak często, że użytkownicy mają współdziałać z każdym programem podczas jego wykonania.
Interakcyjny lub bezpośredni (hand-on) system komputerowy umożliwia bezpośredni dialog użytkownika z systemem. Użytkownik wydaje bezpośrednio interakcje systemowi operacyjnemu lub programowi i otrzymuje natychmiastowe odpowiedzi.
System operacyjny z podziałem czasu sprawia, że wielu użytkowników dzieli równocześnie jeden komputer.
Jeszcze jednym rodzajem systemu operacyjnego jest system czasu rzeczywistego System czasu rzeczywistego bywa często stosowany jako sterownik urządzenia o ściśle określonym zastosowaniu. Czujniki dostarczające dane do komputera. Komputer musi analizować te dane w zależności od sytuacji regulować działanie kontrolowanego obiektu, tak aby zmieniły się wskazania wejściowe czujników. Przykładami systemów czasu rzeczywistego są systemy; nadzorowania eksperymentów naukowych, obrazowania badań medycznych, sterowania procesami przemysłowymi.
Potanienie sprzętu spowodowało po raz wtóry możliwość zbudowania systemu komputerowego przeznaczonego dla indywidualnych użytkowników. Ten rodzaj systemów komputerowych zwie się zazwyczaj komputerami osobistymi. Oczywiście, zmieniły się urządzenia wejścia-wyjścia, pulpity przełączników i czytniki kań zostały zastąpione przez klawiatury, podobne do maszyn do pisania i myszy Drukarki wierszowe i perforatory kań ustąpiły monitorom ekranowym i małym szybkim drukarkom.
Do takich systemów komputerowych zaliczamy zarówno rodzinę komputerów IBM PC, jak i komputery Apple oraz Macintosh wraz z ich oprogramowaniem. Obecnie, skoro MS-DOS doczekał się następcy w postaci wielozadaniowego systemu OS/2 i w podobne właściwości wyposażono nowe komputery Macintosh, koło się zamknęło.
WYKŁAD 2
Struktury systemów komputerowych
Zanim przejdziemy do szczegółowej analizy działań systemowych, musimy zdobyć ogólną wiedzę o strukturze systemu komputerowego.
Systemy z obsługą przerwań
Aby operacje jednostki centralnej i urządzeń wejścia-wyjścia mogły być wykonywane równocześnie musi istnieć mechanizm, ich desynchronizacji i synchronizacji. Można posłużyć się jedną z dwu poniższych metod, w niektórych systemach zastosowano obie:
- przesyłanie danych sterowane przerwaniami,
- przełączanie danych na zasadzie bezpośredniego dostępu do pamięci (DMA - direkt memory access).
W przeciwieństwie do nich, w starszych systemach przesyłanie danych było sterowane przez jednostkę centralną. Procesor musiał wykonywać lub przynajmniej nadzorować przesyłanie danych, co uniemożliwia wykonywanie w tym samym czasie obliczeń programu i operacji urządzeń zewnętrznych. Jako przykład rozważmy kroki niezbędne do wydrukowania danych z pamięci.
1. Sprawdź, czy drukarka jest gotowa na przyjęcie następnego znaku.
2. Jeśli drukarka nie jest gotowa, to idź do punktu l.
3. Jeśli drukarka jest gotowa, to sprawdź czy jest nowy znak do wydrukowania.
4. Jeśli jest nowy znak\, to idź do punktu l,
5. Jeśli nie ma więcej znaków, to drukowanie zostało zakończone.
Tego rodzaju metoda nakładania działań jest znana pod nazwą aktywnego czekania ponieważ procesor musi sprawdzać stan urządzeń wejścia-wyjścia, jest więc zajęty podczas oczekiwania na zakończenie każdej operacji wejścia-wyjścia. Choć teoretycznie jest prawdą, że procesor mógłby wykonywać inne przetwarzanie, a potem wracać do drukowania następnego znaku, nie zawsze jednak jest to osiągalne. Procesor powinien być zawsze szybszy, będzie więc czekał między kolejnymi operacjami wejściowymi. Natomiast wtedy, gdy w celu zaoszczędzenia czasu procesor przystąpi do innej pracy, powstanie ryzyko utracenia części danych, jeśli w tym czasie urządzenie zdoła wykonać dwie operacje wejściowe. System oparty na przerwaniach wejścia-wyjścia stanowi idealne rozwiązanie.
W takiej sytuacji, ogólną strukturę systemu działającego na zasadzie obsługi przerwań przedstawiono na rys. 3. Każdy sterownik urządzenia zewnętrznego ma pod opieką specyficzny typ urządzenia. Sterownik urządzenia zewnętrznego rozporządza lokalnymi buforami i zbiorem rejestrów o specjalnym przeznaczeniu. Odpowiada on również za przesyłanie danych między urządzeniem zewnętrznym, które nadzoruje, a jego własną pamięcią
buforową.
System operacyjny posługuje się tablicą, której elementy odnoszą się do poszczególnych urządzeń jest to tablica stanów urządzeń (rys. 4). Każdy element tej tablicy określa typ urządzenia, jego adres i stan (nieperatywne, bezczynne, zajęte). Jeżeli urządzenie jest zajęte z powodu przyjęcia zamówienia, odpowiadający mu element tablicy zawiera rodzaj zamówienia i inne parametry,
Urządzenie wejścia-wyjścia wysyła przerwania, jeśli wymaga obsługi. Po wystąpieniu przerwania system operacyjny rozstrzyga najpierw, które urządzenie spowodowało przerwanie Następnie pobiera z tablicy informacje o stanie danego urządzenia i zmienia je, odnotowując wystąpienie przerwania. Dla większości urządzeń wejścia-wyjścia sygnały przerwań oznaczające zakończenie wykonywania ich operacji. Jeśli zatem są jakieś następne zamówienia oczekujące na dane urządzenie to system operacyjny rozpoczyna ich realizację.
Na koniec procedura obsługi przerwania z urządzenia wejścia-wyjścia zwraca sterowanie. Jeśli na zakończenie jej działania czekał jakiś program (co zostało odnotowane w tablicy stanów urządzeń), to można oddać mu sterowanie, w przeciwnym razie nastąpi powrót do tego, co było zrobione przed przerwaniem: do wykonywania programu użytkownika (program rozpoczął operację wejścia-wyjścia, która się właśnie zakończyła, ale program nie czekał na zakończenie operacji) albo do postaci czekania (program zapoczątkował dwie lub więcej operacji wejścia-wyjścia i czeka na zakończenie jednej z nich lecz to przerwanie pochodziło od jakiejś innej).
Aby zainicjować przełączenie danych, procesor wprowadza pewne liczby do odpowiednich rejestrów po czym wznawia naturalną pracę. Sterownik urządzenia bada wówczas zawartość tych rejestrów, aby określić jakie ma podjąć działanie. Jeśli na przykład zostanie rozpoznane polecenie czytania, to sterownik zainicjuje przesyłanie danych z urządzenia do swojego lokalnego bufora. Kiedy przesyłanie danych zakończy się, wtedy sterownik poinformuje jednostkę centralną, że zakończył swoje działanie. Dokonuje tego za pomocą sygnału przerwania.
Procesor po otrzymaniu sygnału przerwania wstrzymuje swą bieżącą pracę i natychmiast pobiera zawartość ustalonego miejsca pamięci. Miejsce to zawiera na ogól adres startowy procedury obsługującej dane przerwanie. Procesor obsługi przerwania przesyła dane z lokalnego bufora sterownika urządzenia do pamięci głównej. Po zakończeniu przesyłania danych procesor jest gotowy do wznowienia przerwanych obliczeń. W ten sposób jednostka centralna i urządzenia wejścia-wyjścia mogą działać współbieżnie.
Dualny tryb pracy
Wiele błędów programowania jest wykrywanych przez sprzęt. Tymi błędami zajmuje się na ogół system operacyjny. Gdy program użytkownika dopuści się jakiegoś uchybienia na przykład spróbuje wykonać niedozwolony rozkaz lub sięgnąć po komórkę pamięci nie należącą do jego przestrzeni adresowej wpadnie wówczas w pułapkę zastosowaną przez sprzęt, co oznacza w skutkach przejście do systemu operacyjnego. Tak jak przerwanie, pułapka powoduje przejście do systemu operacyjnego za pomocą wektora przerwań. Za każdym razem gdy wystąpi błąd w programie, wówczas system operacyjny wymusza nierozerwalne zakończenie programu. Zdarzenie takie jest obsługiwane za pomocą tego samego kodu, co żądanie nienormalnego zakończenia programu przechodzące od użytkownika. Pojawia się odpowiedni komunikat o błędzie po czym następuje składowanie pamięci programu. W systemie wsadowym obraz zawartości pamięci może zostać wydrukowany. Umożliwia to użytkownikowi poszukiwanie błędu na podstawie analizy zawartości pamięci utrwalonej na papierze. W systemie interakcyjnym obraz zawartości pamięci programu można zapisać w pliku. Użytkownik może potem ten plik wydrukować lub zbadać jego zawartość w czasie sesji konwersacyjnej i - po ewentualnym naprawieniu programu - ponownie rozpocząć jego wykonywanie.
Podejście takie sprawdza się dopóty, dopóki błędy są wykonywane przez sprzęt. Musimy być jednak pewni, że są wykrywane wszystkie błędy. Musimy chronić system operacyjny i wszystkie inne programy oraz ich dane przed każdym niepoprawnie działającym programem. Toteż ochrona musi obejmować wszystkie zasoby dzielone. Ta metoda postępowania polega na zaopatrzeniu sprzętu w środki pozwalające na rozróżnianie rozmaitych trybów jego pracy. Jako minimum potrzebne jest rozróżnienie dwu ich oddzielnych trybów pracy użytkownika i trybu monitor (nazywanego także trybem nadzorcy lub trybem systemu). Sprzęt komputerowy uzupełnia się o bit (zwany bitem trybu), którego wartość wskazuje bieżący tryb pracy monitora (0) albo użytkownika (l). Za pomocą bitu trybu można rozróżnić działania wykonywane na zamówienie systemu operacyjnego od działań wykonywanych na zamówienie użytkownika.
Za każdym razem po wystąpieniu pułapki lub przerwania, sprzęt zmienia swój tryb pracy z trybu użytkownika na tryb monitora (tzn. zmienia wartości bitu trybuna 0). Tym samym system operacyjny otrzymuje sterowanie nad komputerem tylekroć jest on w trybie monitora. Przed przejściem do programu użytkownika system zawsze przełącza tryb pracy na tryb użytkownika (ustawiając bit trybu na l).
Brak sprzętowych środków do organizacji dualnego trybu pracy może powodować poważne następstwa w systemie operacyjnym. Na przykład system operacyjny MS-DOS napisano dla procesora 1NTEL 8088, który nie ma bitu trybu, a więc i dwóch trybów pracy. Niepoprawny przebieg wykonania programu użytkownika może spowodować zniszczenie systemu operacyjnego przez zapisanie jego kodu danymi. Jeśli zaś wiele programów pisałoby równocześnie na jednym urządzeniu wejściowym, to mogłyby powstać bezsensowne wyniki.
Ochrona sprzętowa
Program użytkownika może zakłócić normalne działanie systemu wydając niedozwolone instrukcje, wejścia-wyjścia, docierając do komórek pamięci w obrębie samego systemu operacyjnego lub nie zwalniając procesora. Obecnie omówimy różne mechanizmy nie dopuszczające do powstawania tego rodzaju zakłóceń w systemie.
Aby ustrzec użytkownika przed wykonywaniem niedozwolonych operacji wejścia-wyjścia przyjęto, ze wszystkie wejścia-wyjścia są uprzywilejowane. Użytkownicy nie mogą wobec tego używać bezpośrednio tych operacji lecz muszą to robić za pośrednictwem systemu operacyjnego. Aby uzyskać pełną ochronę wejścia-wyjścia, należy mieć pewność, ze program użytkownika nigdy nie przejmie kontroli nad komputerem w trybie pracy monitora. Jeżeli komputer pracuje w trybie użytkownika, to przechodzi do trybu monitora przy każdym wystąpieniu przerwania lub pułapki wykonując skok pod adres określony w wektorze przerwań. Załóżmy, że program użytkownika umieściłby nowy adres w wektorze przerwań. Ten nowy adres mógłby zastąpić poprzedni adres i wskazać miejsce w programie użytkownika. Wówczas po wystąpieniu odpowiedniego przerwania sprzęt przełączyłby komputer w tryb monitora i przekazać sterowanie według (zmienionego) wektora przerwań do programu użytkownika. Program użytkownika osiągnąłby kontrolę nad komputerem w trybie pracy monitora.
Musimy chronić wektor przerwań przed zmianami, które mogłyby wprowadzić program użytkownika. Ponadto przed modyfikacjami należy również, chronić systemowe procedury obsługi przerwań. W przeciwnym razie program użytkownika mógłby rozkazy w procedurze obsługi przerwania zastąpić skokami do własnego obszaru, przechwytując sterowanie od procedury obsługi przerwania pracującej w trybie monitora. Jeśli nawet użytkownik by nie zdobył bezprawnego nadzoru nad pracą komputera, to zmiany w procedurach obsługi przerwań zakłóciłby prawdopodobnie właściwe działanie systemu komputerowego, przebieg spoolingu i buforowania.
Ogólna architektura systemu
Rozkazy wejścia-wyjścia, jako uprzywilejowane, mogą być wykonywane tylko przez system operacyjny. Jak zatem program użytkownika może wykonać operacie wejścia-wyjścia ? Czyniąc te rozkazy uprzywilejowanymi, odgradzamy programy użytkownika od wykonywania jakichkolwiek operacji wejścia-wyjścia zarówno złych, jak i dobrych. Problem ten rozwiązuje się w ten sposób, że skoro tylko monitor może wykonywać operacje wejścia-wyjścia, to użytkownik musi poprosić monitor, aby wykonał taką operację w jego imieniu.
Większość nowoczesnych komputerów ma specjalny rozkaz nazywany odwołaniem do systemu (lub odwołaniem do monitora). Zanim wprowadzono takie specjalne rozkazy, odwołania do systemu bywały czasem powodowane przez program użytkownika usiłujący wykonać rozkaz o niezdefiniowanym kodzie operacji, tj. taki, któremu nie odpowiada żadna operacja sprzętowa. Generowało to pułapkę typu "niedozwolony rozkaz" i w rezultacie przeniesienie sterowania do monitora. System TOPS-10 bazował wyłącznie na takiej technice. Odwołanie do systemu jest traktowane przez sprzęt tak, jak przerwanie programowe. Za pośrednictwem wektora przerwań sterowanie jest przekazywane do odpowiedniej procedury obsługi w systemie operacyjnym, a bit trybu jest funkcją systemu operacyjnego. Monitor sprawdza rozkaz przerywający, aby określić, że nastąpiło odwołanie do systemu. Rodzaj obsługi, na którą użytkownik zgłasza zapotrzebowanie jest określony przez parametr odwołania do systemu. Dodatkowe informacje potrzebne w związku z zamówieniem na obsługę mogą być przekazane za pomocą rejestrów lub pamięci (za pomocą umieszczonych w rejestrach wskaźników do komórek pamięci).
Monitor wykonuje zamówienie i przekazuje sterowanie do rozkazu, który następuje po odwołaniu systemu.
Tak więc, aby wykonać operacje wejścia-wyjścia program użytkownika odwołuje się do systemu, powodując iż system operacyjny wykona operacje wejścia-wyjścia na jego życzenie. System operacyjny pracujący w trybie monitora, sprawdza poprawność żądania i - jeśli jest ono dopuszczalne - wykonuje odpowiednią operację wejścia-wyjścia. Następnie system operacyjny przekazuje sterowanie do programu użytkownika.
Różne klasy komputerów
Systemy wieloprocesorowe mają więcej niż jeden procesor. Każdy procesor pozostaje z innymi w bliskim związku, procesory dzielą szynę komputera, a niekiedy pamięć z urządzenia zewnętrzne.
W przeważającej większości używanych obecnie systemów wieloprocesorowych stosuje się model wieloprzetwarzania symetrycznego, w którym na każdym procesorze działa identyczna kopia systemu operacyjnego.
Komputerami osobistymi nazywa się takie mikrokomputery, których możliwość i cena relatywnie mniejsze niż dużych komputerów. Systemy operacyjne komputerów osobistych w różny sposób zyskują cechy systemów operacyjnych dużych instalacji komputerowych.
Struktury systemów operacyjnych
System tak wielki i złożony jak system operacyjny można utworzyć tylko wówczas, gdy podzieli się go na mniejsze części. Każda z takich części powinna stanowić dobrze zdefiniowany fragment systemu, że sterowanie określonym wejściem, wyjściem i funkcjami. Jednostka centralna wykonuje wielką liczbę programów. Chociaż jej głównym przeznaczeniem jest wykonywanie programów użytkowników, jednostka centralna spełnia tez inne zadania systemu. Wszystkie te działania nazywa się procesami. Proces to program, który jest wykonywany. W myśl tego - zadanie wsadowe jest procesem. Program użytkownika wykonywany w systemie z przedziałem czasu leż jest procesem. Procesem jest również zadanie systemowe, jak na przykład spooling.
Podkreślamy, że program sam w sobie nie jest procesem. Program jest pasywny, tak jak zawartość pliku przechowywanego na dysku. Natomiast praca jest jednostką aktywną, której licznik rozkazów określa następną instrukcję do wykonania. Wykonanie procesu musi przebiegać w sposób sekwencyjny. Oznacza to, że w dowolnej chwili, na zamówienie procesu jest wykonywana co najwyżej jedna instrukcja. Mimo iż jednym i tym samym programem mogą być związane dwa procesy zawsze będzie się je rozważać jako dwa oddzielne ciągi wykonywanych instrukcji. Jest czymś zupełnie naturalnym, że jeden wykonywany program rodzi wiele nowych procesów.
W odniesieniu do zarządzania procesami system operacyjny odpowiada za następujące czynności:
- tworzenie i usuwanie zarówno procesów użytkowych jak systemowych ,
- wstrzymywanie i wznawianie procesów,
- dostarczanie mechanizmów komunikacji procesów,
- dostarczenie mechanizmów obsługi blokad.
Pamięć operacyjna odgrywa centralną rolę w działaniu współczesnego systemu komputerowego.
W odniesieniu do zarządzania pamięcią system operacyjny odpowiada za następujące czynności:
- utrzymywanie ewidencji aktualnie zajętych pamięci wraz z informacją w czyim są władaniu;
- decydowanie o tym, które procesy mają być załadowane do zwolnionych obszarów pamięci;
- przydzielanie i zwalnianie obszarów pamięci stosownie do potrzeb.
Podstawowym zadaniem systemu komputerowego jest wykonywanie programów. Podczas wykonywania programy oraz używane przez nie dane muszą znajdować się w pamięci operacyjnej. Pamięć ta jest jednak za mała, aby nieustannie mieścić wszystkie dane i programy. System komputerowy musi zatem mieć dodatkową pamięć pomocniczą, stanowiącą zaplecze dla pamięci operacyjnej. Większość współczesnych systemów komputerowych posługuje się pamięcią dyskową jako podstawowym środkiem magazynowania zarówno danych jak i programów.
W odniesieniu do zarządzania dyskami system operacyjny odpowiada za następujące czynności:
- zarządzanie obszarami wolnymi,
- przydzielanie pamięci;
- planowanie przydziałów obszarów pamięci dyskowej.
Jednym z celów systemu operacyjnego jest ukrywanie przed użytkownikiem szczegółów dotyczących specyfikacji urządzeń sprzętowych. Na przykład w systemie UNIX osobliwości urządzeń wejścia-wyjścia są ukrywane przed większością samego systemu operacyjnego przez tzw. system wejścia-wyjścia. System ten składa się z:
- systemu buforowo-notatnikowego;
- ogólnego interfejsu do programów obsługi urządzeń sprzętowych;
- programów obsługi poszczególnych urządzeń sprzętowych.
Zarządzanie plikami jest jedną z najbardziej widocznych części składowych systemu operacyjnego. W odniesieniu do zarządzania plikami system operacyjny odpowiada za następujące czynności:
- tworzenie i usuwanie plików;
- tworzenie i usuwanie katalogów;
- dostarczanie elementarnych operacji do manipulowania plikami i katalogami;
- odwzorowywanie plików na obszary pamięci pomocniczej,
- składanie plików na trwałych nośnikach pamięci.
Liczne procesy w systemie operacyjnym muszą być chronione przed wzajemnym oddziaływaniem. Muszą istnieć mechanizmy gwarantujące, że pliki, segmenty pamięci, procesor i inne zasoby będąc użytkowane tylko przez te procesory, które zostały przez system operacyjny odpowiednio uprawnione.
Ochrona jest mechanizmem nadzorowania dostępu programów, procesów lub użytkowników do zasobów zdefiniowanych przez system komputerowy. Mechanizm ten musi zawierać sposoby określania, co i jakiej ma podlegać ochronie, jak również środki do wymuszenia zaprowadzanych ustaleń.
Jednym z najważniejszych programów w systemie operacyjnym jest interpretator poleceń. Niektóre systemy operacyjne zwłaszcza mikrokomputerowe, jak MS-DOS lub system Macintosh firmy Apple, zawierają interpretator poleceń w swoim jądrze. W innych systemach operacyjnych, na ogół pracujących w większych komputerach, interpretator poleceń jest specjalnym programem wykonywanym przy inicjowaniu zadania lub wtedy, gdy użytkownik rejestruje się w systemie (z przedziałem czasu).
Usługi systemu operacyjnego
System operacyjny tworzy środowisko, w którym są wykonywane programy. Dostarcza on pewnych usług zarówno programom, jak i użytkownikom tych programów. Usługami tymi są:
- wykonywanie programu;
- operacje wejścia-wyjścia;
- manipulowanie systemem plików;
- komunikacja;
- wykrywanie błędów;
- przydział zasobów;
- rozliczanie;
- ochrona.
Funkcje systemowe
Funkcje systemowe tworzą interfejsy między wykonywanym programem a systemem operacyjnym. Ogólnie biorąc, można z nich korzystać za pomocą instrukcji w języku asemblera. Ich wykazy znajdują się zazwyczaj w podręcznikach używanych przez programujących w języku asemblera.
Funkcje systemowe można z grubsza podzielić na pięć podstawowych kategorii: nadzorowanie procesów, operacje na plikach, operacje na urządzeniach, utrzymywanie informacji oraz komunikacja.
Rozważmy zestawienie rodzajów funkcji systemowych najczęściej udostępnianych przez system operacyjny.
1. Nadzorowanie procesów
- zakończenie (and), zaniechanie (abort);
- załadowanie (load), wykonywanie (execute);
- utworzenie procesu (create process), zakończenie procesu (terminate process);
- pobranie atrybutów procesu (get process attributes), określenie atrybutów procesu (set process attributes),
- czekanie czasowe (wait for time),
- oczekiwanie na zdarzenie (wait for event), sygnalizacja zdarzenia (signal event);
- przydział i zwolnienie pamięci (allocate and free memory).
2. Operacje na pitkach:
- utworzenie pliku (create file), usunięcie pliku (delete file);
- otwarcie pliku (open), zamknięcie (close);
- czytanie (read), pisanie (write), zmiana położenia (reposition);
- pobranie atrybutów pliku (get file attributes), określenie atrybutów pliku (set file attributes).
3. Operacje na urządzeniach
- zamówienie urządzenia (sequent device), zwolnienie urządzenia (release device);
- czytanie (read), pisanie (write), zmiana położenia (reposition);
- pobranie atrybutów urządzenia (get device attributes), określenie atrybutów urządzenia (set device attributes);
- logiczne przyłączanie lub odłączanie urządzeń (logically attach or detach device).
4. Utrzymywanie informacji
- pobranie czasu lub daty (get time or date), określanie czasu lub daty (set time or date);
- pobranie danych systemowych (get system data), określenie danych systemowych (set system data);
- pobranie atrybutów procesu, pliku lub urządzenia (get process, file or device attributes), określenie atrybutów procesu,
pliku lub urządzenia (set process, file, or device attributes).
5. Komunikacja
- utworzenie, usuniecie połączenia komunikacyjnego (create, delete communication, connection),
- nadawanie, odbieranie komunikatów (send, receive message);
- przekazywanie informacji o stanie (transfer status information);
- przyłączenie lub odłączenie urządzeń wymiennych (attach or detach remove devices).
Programy systemowe
Programy systemowe tworzą wygodniejsze środowisko do opracowywania i wykonywania innych programów. Można je podzielić na kilka kategorii:
/. Manipulowanie plikami
Należą tu programy, które służą do tworzenia, usuwania, kopiowania, przemianowywania, składania i wyprowadzania zawartości plików bądź katalogów mówiąc ogólnie - do wykonywania działań na plikach i katalogach.
2. Informowania o stanie systemu
Pewne programy po prostu pobierają z systemu dane określające datę, czas, ilość dostępnej pamięci lub miejsca na dysku liczbę użytkowników lub podobne informację o stanie systemu i komputera. Uzyskana informacja jest potem formatowana i drukowana na terminalu lub innych urządzeniach wyjściowych, względnie posyłana do plików.
3. Tworzenie i zmienianie zawartości plików
Rozmaite odmiany edytorów służą do tworzenia plików na taśmach lub dyskach i zmieniania ich zawartości.
4. Translatory języków programowania
W skład systemu operacyjnego wchodzą często kompilatory, asemblery oraz interpretatory popularnych języków programowania (takich jak: Fortran, Coboll, Pascal, Basic, C, Lisp, itd.). Ostatnio wiele z tych programów bywa wycenianych i sprzedawanych oddzielnie.
5. Komunikacja
W tej grupie znajdują się programy realizujące mechanizmy tworzenia wirtualnych połączeń między procesami, użytkownikami i różnymi systemami komputerowymi. Pozwalają one użytkownikowi przesyłać komunikaty wyświetlane na ekranach ich odbiorców, ekspediować większe komunikaty za pomocą poczty elektronicznej lub przesyłać pliki z jednej maszyny do drugiej a nawet zdalnie rejestrować się na innych komputerach.
6. Programy użytkowe
Większość systemów operacyjnych jest dostarczana wraz z programami do rozwiązywania typowych zadań lub wykonywania typowych działań. Do programów takich zalicza się: metatranslatory, procesory tekstów, pakiety programów graficznych, systemy baz danych, arkusze kalkulacyjne, pakiety programów statystycznych, gry itp.
Gdy określi się usługi systemu operacyjnego, wtedy można przystąpić do opracowania jego struktury. Znajdująca tu zastosowanie liczne tablice, w których odnotowuje się stan systemu komputerowego i stan zadań systemowych.
Zaprojektowanie nowego systemu operacyjnego jest poważnym przedsięwzięciem. Jest bardzo ważne, aby przed przystąpieniem do pracy nad projektem zostały dobrze zdefiniowane cele systemu. Punktem wejścia do wybierania niezbędnych rozwiązań spośród algorytmów i strategii jest określenie pożądanego typu systemu.
Wielkie rozmiary systemu operacyjnego obligują do zatroszczenia się o jego modułowość. Ważną techniką projektowania jest rozważanie systemu jako układu warstw. Koncepcja maszyny wirtualnej, stanowiąc esencję podejścia warstwowego, zaciera różnice między jądrem systemu operacyjnego a sprzętem, traktując jedno i drugie jak sprzęt. Na szczęście tak rozumianej maszyny wirtualnej można umieszczać inne systemy operacyjne.
Przez cały czas cyklu projektowania systemu operacyjnego należy starannie oddzielać decyzje dotyczące polityki od szczegółów analizacyjnych. Przestrzeganie tego zapewnia maksimum elastyczności w przypadku późniejszych zmian w decyzjach politycznych.
Obecnie systemy operacyjne są prawie zawsze pisane w językach implementacji systemów lub w językach wyższego poziomu. Polepsza to warunki implementacji, pielęgnowania i przenośności. Aby utworzyć system operacyjny dla kompletnej konfiguracji sprzętu musimy ten system wygenerować.
WYKŁAD 4
Zarządzanie procesami
Proces jest wykonującym się programem. Do wykonania swojej pracy proces potrzebuje na ogól pewnych zasobów, takich jak czas procesu, pamięć operacyjna pliki oraz urządzenia wejścia-wyjścia. Zasoby te są przydzielane procesowi w chwili jego powstania lub podczas późniejszego działania.
Wykonujący się proces zmienia stan. Stan procesu jest po części określony przez bieżącą czynność procesu. Każdy proces sekwencyjny może się znajdować w jednym z następujących takich stanów:
- aktywny - są wykonywane instrukcje;
- czekający - proces czeka na wystąpienie jakiegoś zdarzenia (np. na zakończenie operacji wejścia-wyjścia),
- gotowy - proces czeka na przydział procesora.
Powyższe nazwy są dobrane dość dowolnie i w różnych systemach operacyjnych można napotkać inne nazwy. Niemniej jednak określone w ten sposób stany występują we wszystkich systemach. Ważne jest uświadomienie sobie, że w każdej chwili tylko jeden proces może być aktywny, ale wiele procesów może być gotowych do działania lub czekających. Diagram ilustrujący opisane stany przedstawiono na rys. 5,
Każdy proces jest zaprezentowany w systemie operacyjnym przez swój blok kontrolny procesu (nazywany również blokiem kontrolnym zadania, rys. 6). Blok kontrolny procesu jest blokiem danych lub rekordem zawierającym wiele cząstkowych informacji opisujących dany proces, w tym:
wskaźnik | stan procesu
|
numer procesu |
licznik rozkazów |
rejestry |
ograniczenia pamięci
|
wykaz otwartych plików
|
. |
Rys. 6 Blok kontrolny procesu
Stan procesu może być określony jako nowy, gotowy, aktywny czekający lub wstrzymany. Licznik rozkazów wskazuje adres następnej instrukcji do wykonania w procesie.
Rejestry procesora. Liczba i typy rejestrów zależą od architektury komputera. Są to akumulatory, rejestry indeksowe, wskaźniki stosu, rejestry ogólnego przeznaczenia oraz rejestry warunków. Informacja pamiętana w rejestrach procesora musi być z licznikiem rozkazów przechowywana podczas przerwań, aby proces mógł później poprawnie kontynuować swoje działanie (rys. 7).
Informację o planowaniu przydziału procesora. Należą do nich; priorytet procesora, wskaźniki do kolejnych porządkujących zamówienia, a także inne parametry planowania.
Informacje o zarządzaniu pamięcią. Są to zawartości rejestrów granicznych lub tablic stron.
Informacje do rozliczeń. Do tej kategorii informacji należy zużytego czasu procesora i czasu rzeczywistego, ograniczenie czasowe numery rachunków, zadań lub procesów itp.
Informacje o stanie wejścia-wyjścia. Są to: informacje o nie zrealizowanych zamówieniach na operacji wejścia-wyjścia, wykaz urządzeń przydzielonych do procesu, lista otwartych plików itd.
Zagadnienia planowania
Wchodzące do systemu procesy trafiają do kolejki zadań. Kolejka składa się ze wszystkich procesów przechowywanych w pamięci masowej w oczekiwaniu na przydzielenie pamięci operacyjnej. Procesy, które rezydują w tej pamięci są gotowe do wykonania i na nie oczekują, znajdują się na liście zwanej kolejką procesów gotowych. Jest to na ogół lista z powiązaniami. Nagłówek kolejki procesów gotowych zawiera wskaźniki do pierwszego i ostatniego bloku kontrolnego procesu na liście. Każdy blok kontrolny procesu ma pole wskaźnikowe wskazujące na następną pozycję w kolejce procesów gotowych.
W systemie są również inne kolejki. Kiedy proces otrzymuje procesor, wtedy działa przez chwilę, po czym albo kończy działanie albo zaczyna oczekiwać na wystąpienie jakiegoś specjalnego zdarzenia, powiedzmy na zakończenie operacji wejścia-wyjścia. W przypadku zamówienia na operacje wejścia-wyjścia może to być, na przykład prośba o dostęp do osobnego przewijaka taśmy lub do urządzenia dzielonego, takiego jak dysk. Ponieważ w systemie jest wiele procesów, dysk może być zajęty przez inne procesy, tak więc dany proces będzie musiał poczekać na dysk. Lisia procesów czekających na konkretne urządzenie zwie się kolejką do urządzeń. Każde urządzenie ma własną kolejkę.
Typową, reprezentację ułatwiającą omawiane planowanie procesów, stanowi diagram kolejek taki jak na rys. 8. Każdy prostokąt przedstawia kolejkę. Występują dwa typy kolejek: kolejka procesów gotowych i zbiór kolejek do urządzeń. Kółkami oznaczono zasoby obsługujące kolejki, strzałki zaś wskazują kierunek przepływu procesów w systemie.
Nowy proces jest na początku umieszczany w kolejce procesów gotowych. Oczekuje w niej do czasu aż zostanie wybrany do wykonania i otrzyma procesor. Po przydzieleniu procesora procesowi, może wystąpić jedno z kilku zdarzeń.
Rys. 8. Diagram kolejek w planowaniu procesów.
- proces może wydać zamówienie na operację wejścia-wyjścia i następnie zostać umieszczony w kolejce procesów oczekujących na wejście;
- proces może utworzyć nowy proces i oczekiwać na jego zakończenie;
- proces może zostać przymusowo usunięty z procesora w wyniku przerwania i przeniesiony z powrotem do kolejki procesów gotowych.
W pierwszych dwu przypadkach proces zostanie w końcu przełączony ze stanu oczekiwania do stanu gotowości i przeniesiony do kolejki procesów gotowych. W tym cyklu proces kontynuuje działania aż do zakończenia, po czym będzie usunięty z systemu
Proces wędruje między różnymi kolejkami przez cały czas swego istnienia. System operacyjny musi w jakiś sposób wybierać procesy z tych kolejek. Selekcji dokonuje odpowiedni proces systemu zwany planistą (scheduler).
W systemie wsadowym często występuje więcej procesów niż można by ich natychmiast wykonać. Procesy te są przechowywane w urządzeniach pamięci masowej, gdzie oczekują na późniejsze wykonanie. Planista długoterminowy wybiera procesy z tej puli i ładuje do pamięci w celu wykonania. Planista krótkoterminowy (lub planista przydziału procesora) wybiera jeden proces spośród procesów gotowych do wykonania i przydziela mu procesor.
10