Mechanizmy stosowane w systemach operacyjnych system dydaktyczny Simulator of Operating System Sebastian Świerczyna Promotor: dr inż. Jarosław Bilski Politechnika Częstochowska Wydział Inżynierii Mechanicznej i Informatyki Kierunek Informatyka Specjalność Inżynieria Oprogramowania i Systemy Informatyczne
Cel prac I (część praktyczna aplikacja) Stworzenie narzędzia służącego do przeprowadzania symulacji nastepujących zjawisk: Komunikacja międzyprocesowa Obsługa urządzeń wejścia/wyjścia Przenoszenie procesów między kolejkami systemowymi Szeregowanie zadań
Omówienie spotykanych struktur systemów operacyjnych Dostarczenie opisu funkcji systemowych służących do implementacji symulowanych zjawisk Omówienie zagadnienia szeregowania zadań Ujęcie w aspekcie systemu: UNIX Windows NT Cel prac II (część opisowa pracy) SOS (symulator systemu operacyjnego)
Motywacja Ułatwienie zrozumienia procesów zachodzących wewnątrz systemu operacyjnego Pomoc dla tworzących aplikacje budowane z wielu procesów lub wątków Pomoc dla korzystających w sposób bezpośredni z funkcji systemowych (komunikacja międzyprocesowa, dostęp do urządzeń)
Struktury systemów operacyjnych (1/3) - struktura jednolita Najstarsza ze struktur System jest jednym wielkim programem Wprowadzanie zmian, rozszerzeń bardzo mocno utrudnione Stosowana w systemach czasu rzeczywistego Przedstawiciele: ecos, MicroC/OS II, OS 9, OSE, OSEK/VDX, psos, RSX 11, RT 11, RTOS UH, VRTX, VxWorks, Windows CE
Struktury systemów operacyjnych (2/3) - struktura warstwowa Podzielenie systemu na moduły Moduły połączone w niezależne, logiczne warstwy Warstwy komunikują się z sobą Uproszczona pielęgnowalność Modelowy system T.H.E. Nowe funkcje Istniejące funkcje Przedstawiciele: UNIX, RC 4000, VME, VMS Ukryte funkcje Warstwa M Warstwa M-1
Struktury systemów operacyjnych (3/3) - struktura mikrojądra Aplikacja Win32 Aplikacja POSIX Komunikaty Serwer Win32 Serwer POSIX Komunikaty MIKROJĄDRO Podzielenie systemu na równorzędne moduły, Komunikacja między modułami za pomocą komunikatów, przy udziale mikrojądra Maksymalna niezależnośc modułów łatwość pielęgnowania systemu, wprowadzania rozszerzeń Przedstawiciele: WINDOWS NT, AIX,GNU Hurd, Minix, MorphOS, QNX, BeOS
Szeregowanie zadań Zadania: Podział czasu procesora pomiędzy współistniejące procesy Maksymalne wykorzystanie czasu procesora Mechanizmy: Zmiana aktualnie wykonywanego procesu dyspozytor (ang. dispatcher) Wybór procesu, który ma być wykonywany planista (ang. scheduler)
Szeregowanie zadań graf stanów procesu Nowe procesy Procesy częściowo wykonane KOLEJKA PROCESORA Procesy wykonywalne Procesy wykonywane PROCESORY CENTRALNE Zamówienie może być zrealizowane Procesy wybrane przez dyspozytora Procesy zablokowane KOLEJKI POD SEMAFORAMI Proces zgłosił zamówienie, które nie może zostać zrealizowane Procesy wykonane
Szeregowanie zadań UNIX (1/2) Algorytmy szeregowania zadań: SCHED_FIFO przydzielanie czasu procesom z kolejki procesów gotowych zgodnie z zasadami kolejki FIFO (ang. First In First Out). Proces, który otrzymał procesor przetrzymuje go, do czasu aż sam go zwolni, albo przejdzie w stan niewykonywalny SCHED_RR podobnie jak SCHED_FIFO, z tą różnicą, że proces otrzymuje pewien kwant czasu, po którego upływie zostaje przeniesiony na koniec kolejki procesów gotowych SCHED_OTHER podobnie jak SHED_RR, z tą różnicą, że priorytet procesu jest obliczany dynamicznie. Jest on sumą priorytetu statycznego oraz czasu, jaki pozostał procesowi z jego kwantu
Szeregowanie zadań UNIX (2/2) Klasy procesów: idle proces jałowy procesy zwykłe znakomita większość procesów w systemie. Szeregowane według polityki SCHED_OTHER procesy czasu rzeczywistego wymagają bardzo szybkiej obsługi, procesy tego typu może tworzyć tylko administrator. Szeregowane według polityki SCHED_RR, SCHED_FIFO
Szeregowanie zadań WINDOWS NT Wartości priorytetów: 0 proces jałowy 1 15 procesy użytkownika 16 31 procesy czasu rzeczywistego Szczególne własności: Algorytm szeregowania działa na poziomie wątków Mechanizm doładowania i zaniku polega na zwiększeniu priorytetu wątku, który obudził się z oczekiwania na jakieś zdarzenie. Takie doładowanie stopniowo zanika. Za każdym razem, gdy wątek w pełni wykorzysta swój kwant czasu, jego priorytet zmniejszy się o 1
Funkcje systemowe UNIX (1/2) Tworzenie procesów: fork utworzenie kopii procesu execve podmienienie programu wykonywanego przez proces Komunikaty: msgget utworzenie lub otwarcie kolejki wiadomości msgsnd umieszczenie w kolejce komunikatów nowej wiadomości msgrcv pobranie wiadomości z kolejki komunikatów
Funkcje systemowe UNIX (2/2) Semafory: semget utworzenie lub uzyskanie dostępu do zestawu semaforów semop wykonanie operacji typu czekaj/sygnalizuj na zestawie semaforów Urządzenia: open utworzenie lub otwarcie urządzenia close zamknięcie urządzenia read odczyt danych z urządzenia write zapis danych do urządzenia lseek odczyt lub zmiana pozycji kursora urządzenia
Funkcje systemowe Windows NT (1/2) Tworzenie procesów: CreateProcess utworzenie nowego procesu na podstawie programu CreateProcessAsUser podobnie jak funkcja CreateProcess. Dodatkowo możliwe jest ustawienie kontekstu w jakim zostanie utworzony proces Komunikaty: SendMessage wysłanie komunikatu do okna (lub grupy okien). Proces wysyłający jest wstrzymywany do momentu obsłużenia wiadomości. SendNotifyMessage podobnie jak SendMessage, z tą różnicą, że funkcja powraca natychmiast, nie oczekując na obsłużenie wiadomości GetMessage pobranie wiadomości z kolejki komunikatów, jeśli nie ma odpowiedniej wiadomości proces jest wstrzymywany PeekMessage podobnie jak GetMessage, jeśli nie ma odpowiedniej wiadomości funkcja powraca natychmiast
Semafory: CreateSemaphore utworzenie nowego lub otwarcie semafora WaitForSingleObject wykonanie operacji czekaj RelaseSemaphore wykonanie operacji sygnalizuj lub pobranie bieżącej wartości semafora Urządzenia: Funkcje systemowe Windows NT (2/2) CreateFile utworzenie nowego lub otwarcie istniejącego urządzenia ReadFile odczyt danych z urządzenia WriteFile zapis danych do urządzenia SetFilePointer odczyt lub zmiana pozycji kursora urządzenia
Podstawowe własności: Wzorowany na języku C Trzy typy zmiennych: INT, FLOAT, STRING Instrukcje iteracyjne: FOR, IF Instrukcje blokowe zbiory rozkazów zamknięte w nawiasy klamrowe Komentarze Wewnętrzny język SOS Komunikacja z użytkownikiem za pomocą funkcji do obsługi konsoli Wyposażony w funkcje biblioteczne poszerzające możliwości języka: mechanizmy komunikacji międzyprocesowej, mechanizmy umożliwiające synchronizacje procesów, narzędzia do obsługi urządzeń,
Obsługa procesów: CREATE_PROCES utworzenie nowego procesu na podstawie programu GET_MY_ID pobranie PID'u procesu Komunikaty: Wewnętrzny język SOS funkcje biblioteczne (1/3) SEND wysłanie komunikatu do procesu lub grupy procesów. BLOCK_SEND podobnie jak SEND, z tą różnicą, że funkcja blokuje proces do momentu jej odebrania RECEIVE pobranie wiadomości z kolejki komunikatów BLOCK_RECEIVE podobnie jak RECEIVE, z tą różnicą, że funkcja blokuje proces, do momentu, gdy w kolejce znajdzie się odpowiednia wiadomość MSG_RESULT rezultat ostanio wykonanej funkcji
Wewnętrzny język SOS funkcje biblioteczne (2/3) Semafory: CREATE_SEMAPHORE utworzenie nowego semafora RELASE_SEMAPHORE usunięcie semafora OPEN_SEMAPHORE pobranie uchwytu do semafora WAIT wykonanie operacji czekaj na semaforze WAIT_MULTIPLE wykonanie operacji czekaj na zestawie semaforów SIGNALIZE wykonanie operacji sygnalizuj na semaforze SEM_RESULT rezultat ostanio wykonanej funkcji
Urządzenia: Wewnętrzny język SOS funkcje biblioteczne (3/3) MAKE_DEVICE utworzenie nowego urządzenia RELASE_DEVICE usunięcie urządzenia OPEN_DEVICE otwarcie urządzenia w żądanym trybie CLOSE_DEVICE zamknięcie urządzenia CLEAR_DEVICE usunięcie danych z urządzenia DEV_READ odczyt danych z urządzenia WRITE zapis danych do urządzenia SEEK zmiana pozycji kursora urządzenia POS odczytanie bieżącej pozycji kursora urządzenia SIZE pobranie ilości danych w urządzeniu DEV_RESULT rezultat ostanio wykonanej funkcji
Wewnętrzny język SOS przykład kodu programu INT(i); # deklaracja zmiennej typu całkowitego FLOAT(f); # deklaracja zmiennej typu zmiennoprzecinkowego STRING(s); # deklaracja zmiennej typu łańcuchowego i= 2; # operacje przypisania f=0.123; s=" 123.456"; f=strtofloat(s); # funkcja konwertująca łańcuch > liczba s=floattostr(f); # funkcja konwertująca liczba > łańcuch s=s+" tu string"; # konkatenacja łańcuchów i=f; # podstawienie wartości innej zmiennej f=(3+3/i+f*2) 3; # przykład operacji arytmetycznej i=((1>=1) (1!=2))&&(i==l); # zastosowanie operatorów logicznych