Systemy operacyjne

Transkrypt

Systemy operacyjne
Systemy operacyjne
Studia podyplomowe 2015-2016
Wydział Informatyki PB
dr inż. Marcin Czajkowski
materiały przygotowane przez dr inż. Wojciecha Kwedlo
Literatura - ogólne pozycje na temat systemów
operacyjnych
●
●
●
●
A. Silberschatz, P. B. Galvin, Podstawy systemów operacyjnych, wydanie 7,
WNT, Warszawa, 2003.
A.S. Tanenbaum, Systemy Operacyjne, Wydanie III, Wydawnictwo Helion,
2010. ~100 zł.
W. Stallings, Systemy operacyjne. Struktura i zasady budowy. PWN, 2006. ~40
zł
Gorąco polecam powyższe pozycje.
Literatura - pozycje na temat programowania
współbieżnego
●
●
●
Z. Weiss, T. Gruźlewski, Programowanie współbieżne i rozproszone w
przykładach i zadaniach, WNT, Warszawa, 1993.
M. Ben-Ari, Podstawy programowania współbieżnego i rozproszonego, WNT,
Warszawa, 1996.
Programowanie w Linuxie przy pomocy biblioteki wątków POSIX threads jest
omówione w:
–
M. Mitchell, J. Oldham, A. Samuel, Linux - programowanie dla zaawansowanych,
Wydawnictwo RM, 2002
–
J. Shapley Gray, Arkana: Komunikacja między procesami w Unixie, rozdz. 11.
Literatura - opisy jąder różnych wersji Unixa
●
●
●
●
Bach M., Budowa systemu operacyjnego UNIX, WNT Warszawa, 1995, Opis
jądra Systemu V Release 4.
U. Vahalia, Jądro systemu Unix - nowe horyzonty, WNT Warszawa,2001, Opis
historii Unixa i różnych cech jądra systemów Unixowych (System V, BSD,
Solaris, Mach) - gorąco polecam.
M. Beck, H. Bohm, M. Dziadzka, U. Kunitz, R. Magnus, D. Verworner, Linux
Kernel - Jądro systemu, wydanie II, Wydawnictwo MIKOM, Warszawa, 2000,
jądro Linuxa 2.0.x
D. P. Bovet, M. Cesati, Linux kernel, Wydawnictwo RM, Warszawa, 2001,
jądro Linuxa 2.2.x
Literatura - API wywołań systemowych Linuksa
●
●
●
M. Mitchell, J. Oldham, A. Samuel, Linux - programowanie dla
zaawansowanych, Wydawnictwo RM, 2002
Kurt Wall, Linux : programowanie w przykładach, Mikom, 2000.
Michael K. Johnson, Erik W. Troan, Oprogramowanie użytkowe w systemie
LINUX, WNT, 2000.
Tematyka wykładów
●
●
poznanie podstawowych
operacyjnymi;
pojęć
związanych
z
mechanizmy zarządzania procesami: algorytmy szeregowania
procesów, metody komunikacji i synchronizacji procesów oraz
wątków;
●
rodzaje pamięci: operacyjna, zewnętrzna, wirtualna;
●
systemy plików;
●
systemami
planowanie
przydziału
wielozadaniowość.
procesora,
wieloprogramowość,
Czym jest system operacyjny
●
●
●
Program kontrolujący wykonywanie aplikacji (programów użytkownika).
–
Umożliwia wykonywanie programów użytkownika. (być może wielu równocześnie).
Jednocześnie kontroluje pracę tych programów, uniemożliwiając nieprawidłowe wykorzystanie
komputera.
–
Dostarcza usługi umożliwiające dostęp do wejścia-wyjścia (pliki, ekran, klawiatura, sieć)
–
Zarządza zasobami maszyny (procesor, pamięć operacyjna, pamięć dyskowa).
–
Tworzy abstrakcje ułatwiające korzystanie z komputera, takie jak: plik, pamięć wirtualna, proces
Cele stojące przed projektantem systemu
–
Przenośność: programy użytkowe działające na różnym sprzęcie.
–
Wydajność: efektywne wykorzystanie sprzętu (procesora,pamięci,we-wy).
–
Zapewnienie ochrony systemu oraz procesów (przed innymi procesami, niepowołanym
dostępem, wirusami, ....)
–
Wygoda użytkownika.
–
Możliwość ewolucji systemu (poprawki etc.)
Definicja: nie ma powszechnej definicji (“Wszystko, to co dostarcza producent, gdy kupuje
się system operacyjny”)
System operacyjny na tle innych składników komputera
Jądro systemu operacyjnego (ang. kernel)
●
Określenie co jest częścią systemu operacyjnego, a co nie, nie jest proste.
–
●
●
●
czy kompilator C jest częścią systemu ? edytor tekstu (np. notepad) ? Interpreter
poleceń (ang. shell) w Unixie ?
Dla potrzeb tego wykładu przez “system operacyjny” będziemy rozumieli jądro
systemu, które możemy (z grubsza) scharakteryzować jako:
–
Część systemu przebywająca na stałe w pamięci.
–
Wykonuje się w trybie uprzywilejowanym.
–
Zarządza zasobami maszyny
–
Udostępnia interfejs programom użytkownika w postaci wywołań systemowych.
Unix, Linux – jądro monolityczne: jeden olbrzymi program
–
Możliwość dynamicznego ładowania i usuwania fragmentów jądra, zwanych
modułami
–
Interpreter poleceń i inne narzędzia są zwykłymi programami użytkownika.
Powyższy podział jest charakterystyczny dla systemów Unixowych, w świecie
Microsoftu są odstępstwa (np. wiele funkcji z API Win32 wykonuje się na
poziomie procesu użytkownika)
Perspektywa historyczna
●
●
●
Na ewolucję oraz rozwój systemów operacyjnych olbrzymi wpływ miał czynnik
ekonomiczny – relatywny (względny) koszt sprzętu oraz pracy ludzkiej.
Początkowo koszt komputera był fantastycznie wysoki w porównaniu z kosztem pracy
ludzi z niego korzystających.
–
Główny cel stojący przed systemem, to maksymalizacja wykorzystania sprzętu
pamięci masowych drukarek).
–
Rozwiązania typu: przetwarzanie wsadowe, wieloprogramowość, spooling
(procesora,
Obecnie koszt komputera jest bardzo niski w porównaniu z kosztem pracy ludzi z niego
korzystających.
–
Cel stojący przed systemem to stworzenie środowiska zapewniającego jak największą wygodę i
produktywność użytkowników. Może to oznaczać rezygnację z kryterium maksymalnego
wykorzystania sprzętu na rzecz kryterium minimalnego czasu odpowiedzi.
–
Praca interakcyjna (początkowo wielu użytkowników na jednej maszynie poprzez podział czasu
procesora), praca interakcyjna z wieloma programami, graficzne interfejsy użytkownika +
wielowątkowość
Generacje komputerów i systemów operacyjnych
●
(1945-55) - Lampy próżniowe i brak systemu operacyjnego.
●
(1955-65) – Tranzystory i proste systemy wsadowe
●
●
(1965-80) – Układy scalone i wieloprogramowe systemy wsadowe (oraz
systemy z podziałem czasu)
1980 – obecnie komputery PC.
Brak systemu operacyjnego
●
Lata 40 – połowa lat 50, komputery zbudowane z lamp próżniowych
●
Programista rezerwuje w specjalnym zeszycie czas komputera
●
W zarezerwowanym czasie ma pełną kontrolę nad maszyną poprzez konsolę
●
●
–
Wczytuje program z czytnika kart perforowanych lub taśmy magnetycznej
–
Kompiluje program (w tym celu wczytuje kompilator np. Fortranu)
–
Uruchamia program..
–
Drukarka drukuje wyniki.
Problemy:
–
Duża część czasu spędzana na przygotowaniu programu do uruchomienia
–
Nieefektywne wykorzystanie czasu pracy systemu.
Zaleta: w przypisanym czasie mam pełną kontrolę nad komputerem
Proste systemy wsadowe
●
Programista zostawia zadanie (ang. job) w postaci pliku kart perforowanych
(program źródłowy, dane) operatorowi.
●
Czynności o podobnym charakterze (np. Kompilacja) grupowane są razem
●
Zadania łączone we wsad (ang. Batch) i wykonywane.
●
Programista po jakimś czasie (kilka godzin) otrzymuje wyniki.
●
●
●
Program monitora (protoplasta systemu operacyjnego)
–
Wczytuje program użytkownika do pamięci
–
Przekazuje mu sterowanie
–
Po zakończeniu pracy program użytkownika powraca do monitora
–
Może zawierać procedury obsługi wejścia wyjścia
Zaleta: lepsze wykorzystanie (bardzo drogiego) sprzętu.
Wada: programista czy też użytkownik nie ma kontroli nad wykonywaniem zadania
(ale jego zdanie się nie liczy – względy ekonomiczne).
Prosty system wsadowy - jednoprogramowość
●
Musimy przeznaczyć część pamięci na monitor
●
Jeden program w pamięci.
●
●
●
●
Pożądane wprowadzenie sprzętowej ochrony
monitora przed programami użytkownika.
W niektórych zastosowaniach biznesowych (banki
ubezpieczenia) wejście-wyjście może zajmować
dużą część czasu wykonania zadania.
W takim przypadku procesor nie jest efektywnie
wykorzystany.
Potrzebne są mechanizmy pozwalające
jednoczesne wykorzystanie procesora i we-wy.
na
Spooling
●
Simulateneous Peripheral Operation On-Line
●
Wykorzystuje szybką pamięć dyskową.
●
Dane i program z czytnika kart są przesyłane na dysk
●
Program wczytany z dysku, wykonywany, wyniki są zapisywane na dysk
●
Wyniki z dysku przesyłane są na drukarkę
●
Wykonując zadanie i jednocześnie:
●
–
Wczytuj kod następnych zadań z czytnika kart na dysk
–
Drukuj wyniki już zakończonych zadań.
Pula gotowych zadań na dysku – algorytmy szeregowania (ang. scheduling)
Wada jednoprogramowości
●
Podczas wykonywania we-wy procesor jest bezczynny
●
Rozwiązanie: wieloprogramowość (ang. Multiprogramming)
–
W pamięci przechowywanych jest kilka programów
Wieloprogramowość
●
●
Kiedy zadanie zgłasza zapotrzebowanie na usługę systemu wymagającą
oczekiwania, wykonywany jest inne zadanie
Potrzebny jest specjalny hardware (przerwania, DMA, ochrona pamięci)
Wieloprogramowy system wsadowy
●
Zapewnianie usług we-wy.
●
Przydzielanie urządzeń we-wy zadaniom.
●
●
●
●
Zadania wstępnie na dysku - zarządzanie
pamięcią dyskową.
Wybór zadania wczytywanego do pamięci
(szeregowanie zadań)
Przydzielenie procesora jednemu z zadań
rezydującemu w pamięci
Zarządzanie dostępną pamięcią
Współdzielenie procesora (ang. time sharing)
●
●
W systemach wsadowych celem jest maksymalizacja przepustowości. Programista
(użytkownik) nie ma kontroli nad wykonywaniem zadań.
–
Problem w przypadku np. błędu kompilacji.
–
Niektóre typy zadań wymagają pracy interakcyjnej (np. rezerwacja biletów)
–
A w między czasie relatywne koszty pracy ludzkiej względem kosztów sprzętu wzrosły, ale
nie na tyle aby każdemu przydzielić dedykowany komputer.
Podział czasu procesora
–
Wiele użytkowników korzystających z terminali (praca interakcyjna)
–
System otrzymuje polecenia kontrolne z terminala.
–
Procesor wykonuje na przemian programy poszczególnych użytkowników (redukcja mocy
obliczeniowej dostępnej pojedynczemu użytkownikowi)
●
Załadowany do pamięci i wykonywany w niej program nazywany jest procesem.
●
Nowe funkcje systemu operacyjnego: wymiana (ang. swapping), pamięć wirtualna.
●
W systemach z podziałem czasu celem jest minimalizacja czasu odpowiedzi.
Systemy operacyjne dla komputerów osobistych
●
●
Komputer dedykowany jednemu użytkownikowi.
Mała cena sprzętu sprawia, że maksymalizacja wykorzystania procesora przestaje być
głównym celem.
●
Priorytetem jest wygoda użytkownika i minimalizacja czasu odpowiedzi.
●
Systemy graficznego interfejsu użytkownika.
●
Z przyczyn ekonomicznych pierwsze wersje sprzętu były prymitywnie proste.
Nastąpiło stopniowe zaadoptowanie technologii rozwiniętych dla większych maszyn.
–
MS-DOS (brak podziału czasu, brak ochrony systemu)
–
Windows 3.1 (współdzielenie procesora wymagające współpracy procesów, pamięć
wirtualna, brak ochrony)
–
Windows NT (współdzielenie procesora, pamięć wirtualna, pełna ochrona, mechanizmy
bezpieczeństwa)
Systemy równoległe
●
●
Architektura postaci Symmetric Multiprocessing (SMP).
System ze współdzieloną pamięcią (ang. shared memory, tightly coupled
system).
●
Każdy procesor wykonuje identyczną kopię systemu operacyjnego
●
Pozwala na wykonywanie wielu procesów jednocześnie
●
●
Wspierana przez większość nowoczesnych systemów operacyjnych (Linux,
Win NT i pochodne)
Upowszechnione dzięki procesorom wielordzeniowym (ang. multicore)
Systemy czasu rzeczywistego (ang. real-time)
●
Reakcja na zdarzenie musi się zakończyć przed upływem określonego czasu.
(ang. hard real-time).
–
●
Innymi słowy: Poprawność systemu nie zależy tylko od poprawności uzyskanej
odpowiedzi, ale także od czasu oczekiwania na tę odpowiedzi.
Przykłady: odtwarzacz DVD, symulator samolotu, sterownik wtrysku paliwa,
system naprowadzania rakiety.
●
Z reguły system w ROM-ie, brak pamięci dyskowej.
●
Konflikt z zasadą podziału czasu.
●
●
Warunek hard real-time nie jest spełniony przez większość współczesnych
systemów ogólnego przeznaczenia.
Systemy klasy soft real-time: zadanie do obsługi w czasie rzeczywistym
otrzymuje pierwszeństwo nad pozostałymi zadaniami.
●
Nie gwarantują nieprzekraczalnego czasu reakcji.
●
Większość systemów Unixowych i Win NT spełnia te wymagania.
Systemy rozproszone (ang. distributed)
●
●
Luźno związany (ang. loosely coupled) system komputerowy. Każdy procesor
dysponuje własną pamięcią, niedostępną innym procesorom. Koordynacja i
synchronizacja poprzez wymianę komunikatów
Zalety
–
Współdzielenie zasobów (ang. resource sharing)
–
Przyspieszenie obliczeń.
–
Większa wiarygodność systemu.
–
Udostępnienie możliwości komunikacji.
Systemy rozproszone
●
●
Sieciowe systemy operacyjne
–
Umożliwia współdzielenie plików, drukarek
–
Dostarcza mechanizm komunikacji
–
System na jednej maszynie wykonuje się niezależnie od pozostałych maszyn w
sieci
Rozproszone systemy operacyjne
–
Mniejsza autonomia poszczególnych maszyn
–
Sprawia wrażenie, że pojedynczy system operacyjny kontroluje pracę sieci (jednej
wielkiej maszyny)
–
Obecnie przedmiot badań naukowych (Amoeba, Mach, Locus, systemy typu
Grid ...)
Systemy typu hand-held
●
Tablety
●
Telefony komórkowe
●
Cechy charakterystyczne
●
●
–
Ograniczona pamięć
–
Wolne procesory (nacisk na niski pobór mocy)
–
Małe rozmiary wyświetlaczy
Główna różnica pomiędzy systemami hand-held a PDA: brak
wielogigabajtowych dysków twardych (pamięć wirtualna) (ale są systemy
plików na pamięciach Flash)
Przykłady: iOS, Android.
Wbudowane systemy operacyjne
●
Systemy dla urządzeń nie uznawanych za komputery i nie posiadających
możliwości instalowania aplikacji przez użytkowników.
●
Kuchenki mikrofalowe, odtwarzacze MP3, samochody, odbiorniki telewizyjne
●
Mamy gwarancje że nigdy nie będzie działało niezaufane oprogramowanie
●
Przykłady: QNX, VxWorks
Migracja cech i własności systemów operacyjnych
Struktury systemów komputerowych
istotne z punktu widzenia
systemu operacyjnego
Uproszczony schemat architektury komputera
●
●
Procesor, pamięć i urządzenia we-wy podłączone są do wspólnej magistrali.
W rzeczywistych systemach mamy do czynienia z kilkoma fizycznymi
magistralami (PCI, ISA, USB, ...)
Praca systemu komputerowego
●
Procesor i urządzenia wejścia-wyjścia mogą pracować współbieżnie
●
Każdy kontroler we-wy obsługuje jeden typ urządzeń
●
Każdy kontroler-posiada lokalny bufor
●
Procesor przesyła dane do/z pamięci oraz do/z lokalnych buforów
●
Wejście-wyjście przeprowadzane jest pomiędzy lokalnym buforem kontrolera a
urządzeniem.
●
Kontroler informuje o zakończeniu operacji zgłaszając przerwanie.
●
SYSTEM OPERACYJNY OPIERA SIĘ NA PRZERWANIACH !!!
Przerwania
●
●
Przerwania programowe (ang. trap)
–
Wywołanie systemu operacyjnego (np. specjalny rozkaz syscall w procesorach
MIPS)
–
Rozkaz pułapki (brk w x86)
Sprzętowe zewnętrzne (asynchroniczne względem programu)
–
●
Kontroler we-wy informuje procesor o zajściu zdarzenia, na przykład
●
Zakończenie transmisji danych.
●
Nadejście pakietu z sieci.
●
Przerwanie zegara.
●
Błąd parzystości pamięci.
Sprzętowe wewnętrzne, głównie niepowodzenia (ang. fault)
–
Dzielenie przez zero
–
Przepełnienie stosu
–
Brak strony w pamięci (w przypadku implementacji stronicowania)
–
Naruszenie mechanizmów ochrony.
Obsługa przerwania
●
●
Wykonywana przez system operacyjny
–
Zapamiętanie stanu procesora (rejestrów i licznika rozkazów)
–
Określenie rodzaju przerwania
●
przepytywanie (ang. Polling)
●
wektor przerwań (tablica adresów indeksowana numerem przerwania)
–
Przejście do właściwej procedury obsługi
–
Odtworzenie stanu procesora i powrót z przerwania
Uwaga: Odtworzenie stanu procesora może dotyczyć innego procesu niż
zapamiętanie. (przełączenie kontekstu – ang. context switch). Przykład:
–
Wykonuje się proces A
–
Przerwanie zegara=>zapamiętanie stanu procesu A
–
System operacyjny stwierdza że A zużył cały przydzielony kwant czasu procesora.
System postanawia przekazać sterowanie procesowi B.
–
Odtworzenie stanu procesu B(przełączenie kontekstu) => powrót z przerwania
–
Wykonuje się proces B
Krótko o procesach
●
●
●
●
Najprościej możemy określić proces jako “Wykonujący się program”
Ta definicja ma pewne niuanse. Rozpatrzmy przypadek procesu powstałego w
wyniku uruchomienia programu użytkownika.
–
Proces może wywoływać kod tego programu.
–
Mówimy, że proces “proces wykonuje się w trybie użytkownika”.
–
Może także wywoływać funkcję bibliotek współdzielonych (.so w Linuksie,
biblioteki dynamiczne .dll w Windows), które formalnie nie są częścią programu.
Po pewnym czasie proces (tzn. kod programu lub biblioteki) decyduje się
wykonać funkcję systemową, np. otworzyć plik
Mówimy wtedy, że “proces wykonuje się w trybie jądra”.
–
W tej sytuacji proces wykonuje kod systemu operacyjnego, a nie kod programu z
którego został wczytany.
–
Widzimy, że nie ma relacji 1<=>1 pomiędzy procesami i programami, ponieważ
proces wykonuje kod dwóch programów: swojego i jądra systemu
Różnice w prędkości transmisji urządzeń zewnętrznych
Urządzenie
Prędkość transmisji
Keyboard
10 bytes/sec
Mouse
100 bytes/sec
56K modem
7 KB/sec
Printer / scanner
200 KB/sec
USB
1.5 MB/sec
Digital camcorder
4 MB/sec
Fast Ethernet
12.5 MB/sec
Hard drive
20 MB/sec
FireWire (IEEE 1394)
50 MB/sec
XGA monitor
60 MB/sec
PCI bus
500 MB/sec
Hierarchia pamięci
●
Przemieszczając się w dół hierarchii
–
Zwiększamy czas dostępu
–
Zmniejszamy koszt jednego bajtu
Wykorzystanie pamięci podręcznych
(ang. caching)
●
●
●
Wykorzystanie szybkiej pamięci do przechowywania najczęściej używanych
danych.
–
Pamięć podręczna procesora.
–
Pamięc podręczna dysku.
Wymaga wprowadzenie polityki zarządzania pamięcią podręczną.
Problem spójności pamięci podręcznej: (ang. cache coherency) Informacja
przechowywana w pamięci podręcznej niezgodna z informacją przechowywaną
w pamięci głównej
–
Przykład 1. System dwuprocesorowy. Każdy procesor ma własną pamięć
podręczną. Zawartość jednej komórki pamięci przechowywana w obydwu
pamięciach podręcznych. Procesor A zapisuje tę komórkę, Procesor B próbuje
odczytu .......
–
Przykład 2. Pamięć podręczna dysku. Zmodyfikowana zawartość pewnych
sektorów dysku jest przechowywana przez pewien czas w pamięci operacyjnej
zanim zostanie zapisana fizycznie na dysk. Jeżeli w tym czasie nastąpi załamanie
systemu ............
Mechanizmy ochrony (ang. protection)
●
●
●
Potrzeba zapewnienia, że “źle sprawujący się program” nie zakłóci pracy
innych programów i samego systemu operacyjnego. Program użytkownika nie
może być w stanie wykonać pewnych operacji.
Przykłady “złego zachowania się programu”
–
Bezpośrednia komunikacja z urządzeniami wejścia-wyjścia => ochrona we-wy
–
Dostęp do pamięci należącej do innych procesów lub do systemu => ochrona
pamięci
–
Zablokowanie przerwań, zmiana wektora przerwań => ochrona systemu przerwań
–
Nieskończona pętla => ochrona procesora
Program użytkownika nie ma prawa wykonać żadnej z powyższych operacji !!!
Podwójny tryb pracy
●
Procesor może wykonywać instrukcje w jednym z dwóch trybów
–
Tryb jądra (instrukcje wykonywane przez system operacyjny)
–
Tryb użytkownika (instrukcje wykonywane przez program użytkownika)
Przerwanie (programowe lub sprzętowe)
tryb
jądra
Tryb
użyt.
Ustaw tryb użytkownika
System
operacyjny
●
Program
użytkownika
Instrukcje uprzywilejowane – mogą być wywoływane wyłącznie w trybie jądra
–
Próba ich wykonania w trybie użytkownika powoduje przerwanie i przejście do systemu
operacyjnego
Mechanizmy ochrony
●
Instrukcje uprzywilejowane
–
Instrukcje do komunikacji z urządzeniami we-wy
–
Blokowanie/odblokowanie przerwań
–
Zmiana wektora przerwań
●
●
Aby zapewnić, że program użytkownika nigdy nie wykona się w trybie jądra
Przerwanie zegara:
–
gwarantuje ochronę procesora przed programem użytkownika z nieskończoną pętlą
Procesy i wątki
Pojęcie procesu
●
Program = plik wykonywalny na dysku
●
Proces = uruchomiony i wykonywany program w pamięci
●
Program jest pojęciem statycznym.
●
Proces ma naturę dynamiczną (zmieniającą się). Zmianie ulegają m.in.
●
–
Licznik rozkazów (adres ostatnio wykonywanej instrukcji)
–
Rejestry procesora
–
Wskaźnik stosu
Proces ma przestrzeń adresową
–
Kod
–
Dane zainicjalizowane
–
Dane niezainicjalizowane
–
Stos
Uruchom
program
Model procesów
Pojedynczy
licznik rozkazów
(punkt widzenia
procesora)
A
B
Wiele liczników rozkazów
(punkt widzenia systemu oper.)
A
C
B
C
●
D
●
B
D
D
C
B
A
Czas
Z punktu widzenie procesora na
komputerze jest wykonywany
jeden program
Z punktu widzenia systemu
jednocześnie jest wykonywanych
wiele programów.
Stany procesu
●
Nowy – proces został utworzony.
●
Gotowy – proces czeka na przydział procesora.
Nowy
–
1
2
Gotowy
5
●
Aktywny – wykonywane są instrukcje procesu.
–
3
Oczekujący
4
7
7
Aktywny
●
W systemie z jednym procesorem w danej chwili
jeden proces może być aktywny
Oczekujący (uśpiony) – proces czeka na
zdarzenie (np. Zakończenie operacji we-wy).
–
Na poprzednim wykładzie proces, który
zainicjalizował transmisję DMA lub wysłała znak
do drukarki, był usypiany w oczekiwaniu na
przerwanie.
–
Proces w stanie uśpionym nie otrzyma procesora.
6
Zakończony
●
Proces mógłby się wykonywać, ale nie wykonuje
się, ponieważ w tej chwili wykonuje się jakiś
inny proces.
Zakończony – proces zakończył działanie
Przejścia pomiędzy stanami procesu
●
1 (Nowy => Gotowy). Nowo utworzony proces przechodzi do kolejki procesów
gotowych.
–
●
●
2 (Gotowy => Aktywny) Proces otrzymuje przydział procesora.
3 (Aktywny => Gotowy) Procesowi został odebrany procesor (i przekazany innemu
procesowi).
–
●
●
●
Przejściami 2 oraz 3 zarządza planista krótkoterminowy (ang. short-term).
4 (Aktywny => Oczekujący) Proces przechodzi w stan oczekiwania na zajście
zdarzenia. (np. na zakończenie transmisji wejścia -wyjścia – patrz poprzedni wykład)
5 (Oczekujący => Gotowy) Zdarzenie na które czekał proces nastąpiło (przerwanie
we/wy na poprzednim wykładzie).
–
●
Planista długoterminowy (ang. long-term scheduler) w systemach wsadowych.
Przejścia 4 oraz 5 są wykonywane przy przeprowadzeniu synchronicznej operacji wejścia
wyjścia (ale nie tylko).
6 (Aktywny => Zakończony). Proces zakończył pracę (np. funkcja exit w Uniksach,
błąd ochrony)
7 (Gotowy =>Zakończony oraz Oczekujący => Zakończony). Proces został zakończony
przez inny proces (np. funkcja kill w systemie Unix).
Dodatkowy stan – zawieszony (ang. suspended)
●
●
●
Proces oczekuje bardzo długo na operacje we-wy (np. polecenie login)
–
Przejście do stanu zawieszonego
–
Pamięć zajmowana przez proces podlega wymianie (ang. swapping) tzn. zapisaniu
na dysk do obszaru wymiany (swap area).
–
Zwolniona pamięć może być wykorzystana przez inne procesy.
–
Po zajściu zdarzenia proces ponownie wczytywany z obszaru wymiany
Inne przyczyny zawieszenie procesu.
–
Żądanie użytkownika
–
Brak pamięci w systemie
–
Proces co jakiś czas cyklicznie wykonuje jakąś czynność np. Sprawozdawczość
Przejściami do i z stanu zawieszenie zarządza planista średnioterminowy (ang.
medium-term scheduler)
Diagram przejść z uwzględnieniem stanu zawieszenia.
●
Planista długoterminowy
●
Planista krótkoterminowy – najważniejszy i występujący w każdym systemie.
–
●
Rozstrzyga problem: “Któremu procesowi w stanie gotowym mam przydzielić procesor”
Planista średnioterminowy
Blok kontrolny procesu
ang. Process Control Block - PCB
●
PCB służy do przechowywania informacji o procesie
istotnych z punktu widzenia systemu operacyjnego
–
Stan procesu
–
Identyfikator procesu
–
Licznik rozkazów
–
Rejestry procesora
–
Informacja o przydzielonej pamięci
–
Informacja o otwartych plikach
–
Informacja o połączeniach sieciowych
–
Informacja niezbędna do tworzenia systemowych
struktur danych. System operacyjny posługuje się
różnymi kolejkami procesów. Jeżeli kolejki są
implementowane jako listy z dowiązaniami, PCB może
zawierać dowiązanie (wskaźnik) do następnego
elementu w kolejce
Przełączenie kontekstu pomiędzy procesami
P1
P2
P3
P4
Jądro
Jądro
Jądro
Jądro
Przełączenie kontekstu (ang. context switch),
a przełączenie trybu (ang. mode switch)
●
●
Przełączenie
procesu.
kontekstu
to
zmiana
Przełączenie trybu zmiana trybu pracy
procesora (jądra <=> użytkownika)
Przełączenie kontekstu
●
●
●
●
W większości systemów (Uniksy,Windows) przyjęto model, w którym funkcje systemu
wykonują się w kontekście procesu użytkownika. W uproszczeniu model ten zakłada
że system operacyjny jest kolekcją procedur wywoływanych przez procesy w celu
wykonania pewnych usług.
Stąd mówiłem o procesie wykonującym się w trybie jądra (jeżeli wykonywany jest kod
jądra).
Przejście od programu użytkownika do programu jądra w wyniku wywołania funkcji
systemowej (przerwanie programowe) lub przerwania sprzętowego wiąże się z
przełączeniem trybu.
Zmiana trybu jest znacznie mniej kosztowna niż zmiana kontekstu.
Utworzenie procesu
●
●
●
●
Proces rodzicielski tworzy proces potomny, który z kolei może stworzyć
kolejne procesy. Powstaje drzewo procesów.
Współdzielenie zasobów. Procesy rodzicielski i potomny mogą
–
Współdzielić część zasobów
–
Współdzielić wszystkie zasoby
–
Nie współdzielić żadnych zasobów
Wykonywanie
–
Procesy rodzicielski i potomny wykonują się współbieżnie
–
Proces rodzicielski oczekuje na zakończenie procesu potomnego.
Przestrzeń adresowa
–
Odrębna przestrzeń adresowa dla procesu potomnego
●
●
–
(fork w systemie Unix – proces potomny wykonuje się w nowej przestrzeni adresowej
będącej kopią przestrzeni procesu rodzicielskiego)
Proces ma nowy program załadowany do nowej przestrzeni adresowej (CreateProcess w
Win32)
Proces potomny i rodzicielski wykonują się w tej samej przestrzeni adresowej
(clone w Linuksie; wątki Java i POSIX)
Wywołania systemowe fork, exec, wait w Unix-ie
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int pid;
pid = fork();
if (pid < 0) { /* Błąd !!! */
fprintf(stderr, "Fork Failed");
exit(-1);
}
else if (pid == 0) { /* proces potomny */
execlp("/bin/ls","ls",NULL);
}
else { /* proces rodzicielski */
wait(NULL);
printf("Child Complete");
exit(0);
}
}
●
●
fork tworzy nowy proces
–
Wywoływana
rodzicielskiego
–
Powracają z niej proces potomny i
rodzicielski
procesu
exec – zastępuje obraz bieżącego
procesu nowym programem.
–
●
z
proces wołający nigdy nie wraca z
exec (chyba że powstanie błąd)
wait – blokuje proces do momentu
zakończenia procesu potomnego
Zakończenie procesu
●
Zakończenie na własne żądanie. Proces sam podejmuje decyzję o zakończeniu
pracy – wywołując odpowiednie wywołanie systemowe. (system Unix: exit ).
–
●
●
W programie w języku C jest to robione automatycznie po zakończeniu funkcji
main
Proces został zakończony w wyniku akcji innego procesu
–
Unix: proces otrzymał sygnał SIGKILL.
–
Polecenie kill w shellu, funkcje systemowe raise oraz kill.
Proces został zakończony przez system operacyjny
–
Naruszenie mechanizmów ochrony.
–
Przekroczenie ograniczeń na przyznany czas procesora.
–
Proces rodzicielski się zakończył (w niektórych systemach)
●
Cascading termination
Wielowątkowość
●
Jeden proces wykonuje się w wielu współbieżnych wątkach (ang. thread).
●
Każdy wątek (inna nazwa: proces lekki, ang. lightweight)
–
Ma swój własny stan (Aktywny, Gotowy, Zablokowany, ... )
–
Ma swoje wartości rejestrów i licznika rozkazów.
–
Ma swój własny stos (zmienne lokalne funkcji !!!).
–
Ma dostęp do przestrzeni adresowej, plików i innych zasobów procesu
●
●
WSZYSTKIE WĄTKI TO WSPÓŁDZIELĄ !!!
Operacje zakończenia, zawieszenia procesu dotyczą wszystkich wątków.
Procesy są od siebie izolowane, wątki nie !
Procesy i wątki
Proces
Przestrzeń adresowa
Otwarte pliki
Procesy potomne
Obsługa sygnałów
Sprawozdawczość
Zmienne globalne
Wątek 1
Wątek 2
Wątek 3
Licznik rozkazów
Rejestry
Stos i wskaźnik stosu
Stan
Licznik rozkazów
Rejestry
Stos i wskaźnik stosu
Stan
Licznik rozkazów
Rejestry
Stos i wskaźnik stosu
Stan
Proces z jednym wątkiem
●
Standardowy Unix
●
MS-DOS
Proces z wieloma wątkami
●
Linux
●
MS-Windows
●
POSIX
●
OS/2
●
Solaris
Cechy wątków
●
●
Zalety
–
Utworzenie i zakończenie wątku zajmuje znacznie mniej czasu niż w przypadku
procesu
–
Możliwość szybkiego przełączania kontekstu pomiędzy wątkami tego samego
procesu
–
Możliwość komunikacji wątków bez pośrednictwa systemu operacyjnego
–
Możliwość wykorzystania maszyn wieloprocesorowych SMP
Wady
–
“Źle zachowujący się wątek” może zakłócić pracę innych wątków tego samego
procesu.
●
W przypadku dwóch procesów o odrębnych przestrzeniach adresowych nie jest to
możliwe
Wątki na poziomie użytkownika
ang. user-level threads
●
●
●
System operacyjny nie jest świadom istnienia
wątków.
Zarządzanie wątkami jest przeprowadzane przez
bibliotekę w przestrzeni użytkownika.
–
Wątek A wywołuje funkcję read
–
Standardowo funkcja systemowa read jest
synchroniczna (usypia do momentu zakończenia
operacji)
–
Jednak “sprytna” implementacja w bibliotece
wywołuje wersję asynchroniczną i przełącza się do
wątku B.
Rozwiązanie to jest szybkie, ma jednak wady:
–
Dwa wątki nie mogą się wykonywać współbieżnie
na dwóch różnych procesorach.
–
Nie można odebrać procesora jednemu wątkowi i
przekazać drugiemu
Wątki na poziomie jądra
ang. kernel-level threads
●
Wątek jest jednostką systemu operacyjnego.
●
Wątki podlegają szeregowaniu przez jądro.
●
W systemie SMP wątki mogą się wykonywać
na różnych procesorach.
–
●
Przetwarzanie równoległe.
Windows i Linux wykorzystują tę metodę.
Przykład użycia wątków:
Program do przetwarzania obrazów
●
●
Użytkownik wydał polecenie “Save”
–
Jego wykonanie może potrwać kilkadziesiąt sekund.
–
Kto w tym czasie będzie obsługiwał mysz i klawiature ?
Wątek główny odpowiadający za interakcję z użytkownikiem.
–
Po wydaniu polecenia “Save” tworzy wątek roboczy zapisujący obraz do pliku.
–
Następnie powraca do konwersacji z użytkownikiem
–
Dzięki temu aplikacja nie jest zablokowana (klepsydra w Win)
zapisywania
●
Wątek roboczy wykonuje zapis i kończy pracę.
●
Uwaga na synchronizację wątków !!!
na czas
–
Co się stanie gdy po wydaniu polecenia “Save” natychmiast wydamy polecenie
“Usuń obraz”?
–
Sytuacja wyścigu (ang. race).
Problemy z wątkami
●
●
W standardowej bibliotece C, w wersji wielowątkowej, errno jest
implementowane jako prywatna zmienna globalna (nie współdzielona z innymi
wątkami)
Kilka wątków jednocześnie wywołuje funkcje malloc/free - może dojść do
uszkodzenia globalnych struktur danych (listy wolnych bloków pamięci)
–
Potrzeba synchronizacji => może prowadzić do spadku wydajności
Problemy z wątkami
●
●
Proces otrzymuje sygnał:
–
Wszystkie wątki otrzymują sygnał
–
Wybrany wątek otrzymuje sygnał
–
Wątek aktualnie aktywny otrzymuje sygnał
Proces wykonuje fork.
–
●
Proces wywołuje exit.
–
●
●
Czy duplikować jedynie działający wątek, czy też wszystkie wątki ?
Zakończyć proces czy też jedynie aktywny wątek ?
Anulowanie wątku (ang cancellation).
–
Wykonać natychmiast .
–
Wątek co jakiś czas sprawdza czy nie został anulowany.
Standard POSIX zawiera odpowiedzi na powyższe problemy.
POSIX threads – utworzenie i dołączenie wątku
●
void *thread(void *param) {
// tu kod wątku
// możemy przekazać wynik
return NULL
}
int main() {
pthread_t id;
// Parametr przekazywany wątkowi
void *param=NULL;
pthread_create(&id,NULL,&thread,param);
// Funkcja thread w odrębnym wątku
// współbieżnie z main
// id przechowuje identyfikator wątku
}
void *result;
// Czekaj na zakończenie wątku
pthread_join(id,&result);
// Wynik w result,zamiast &result można
// przekazać NULL
●
●
Funkcja pthread_create tworzy nowy
wątek. Rozpoczyna on pracę od
funkcji, której adres przekazano jako
trzeci argument.
Funkcja
pthread_join
usypia
wywołujący ją wątek do momentu,
kiedy
wątek
o
identyfikatorze
przekazanym jako pierwszy argument
zakończy pracę.
Zakończenie pracy wątku – powrót z
funkcji która go rozpoczyna.

Podobne dokumenty