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.