Pytania/problemy wykład 3
1. Co to jest proces, co wchodzi w jego skład, jakie są jego podstawowe stany i czego dotyczą?
Proces – program w trakcie wykonywania; jednostka pracy w większości systemów; program sam z siebie nie jest procesem – jest obiektem pasywnym (plik z listą instrukcji), a proces jest obiektem aktywnym.
W skład procesu wchodzi:
Kod programu (text section);
Licznik rozkazów (program counter);
Stos procesu (process stack) – dane tymczasowe.
Sekcja danych (data section) – zmienne globalne.
Podstawowe stany procesu:
Nowy: proces został utworzony;
Aktywny: są wykonywane instrukcje;
Oczekiwanie: proces czeka na wystąpienie jakiegoś zdarzenia (np. zakończenie operacji WE/WY);
Gotowy: proces czeka na przydział procesora;
Zakończony: proces zakończył działanie.
2. Co to jest blok kontrolny procesu i jakie zawiera informacje? Podaj przykład jego użycia.
Blok kontrolny procesu (ang. Process Control Block, PCB) zwany także blokiem kontrolnym zadania – jest to obszar pamięci operacyjnej, zarezerwowany przez jądro systemu operacyjnego na potrzeby przechowywania wielu ważnych i mniej istotnych informacji o każdym, aktualnie istniejącym i zarejestrowanym w tym systemie procesie. PCB jest reprezentacją procesu w systemie operacyjnym.
Informacje zawierające się w bloku kontrolnym procesu:
Stan procesu: nowy, gotowy, aktywny itd.
Licznik rozkazów: wskazuje adres następnego rozkazu do wykonania w procesie.
Rejestry procesora: akumulatory, rejestry indeksowe, wskaźniki stosu, rejestry ogólnego przeznaczenia, rejestry warunków.
Informacje o planowaniu przydziału procesora: priorytet procesu, wskaźniki do kolejek planowania realizacji zamówień i inne parametry planowania.
Informacje o zarządzaniu pamięcią: zawartości rejestrów granicznych, tablice stron lub segmentów.
Informacje do rozliczeń: ilość zużytego czasu procesora i czasu rzeczywistego, ograniczenia, numery kont, numery procesów itd.
Informacje o stanie WE/WY: informacje o urządzeniach WE/WY przydzielonych do procesu, wykaz otwartych plików itd.
Przykład użycia: dzięki niemu możliwe jest np. przełączanie kontekstu. W jednym z bloków zachowuje się kontekst a w drugim odtwarza się.
3. Co jest celem planowania procesów, jakie są główne kolejki planowania, przedstawić diagram kolejek.
Celem planowania procesów jest jak najlepsze wykorzystanie procesora – szczególnie ważne w systemach wieloprogramowych z podziałem czasu.
Główne kolejki planowania:
Kolejka zadań (job queues): zbiór wszystkich procesów w systemie.
Kolejka procesów gotowych (ready queue): zbiór procesów rezydujących w pamięci operacyjnej, gotowych i czekających na wykonanie (ma postać listy powiązanej).
Kolejka do urządzenia (device queue): zbiór procesów czekających na konkretne urządzenie WE/WY – każde urządzenie ma własną kolejkę.
Diagram kolejek:
4. Scharakteryzować podstawowych planistów procesów. Na czym polega przełączanie
kontekstu i jaki jest jego wpływ na wydajność systemu?
Podstawowi planiści:
Planista (program szeregujący) – program systemowy wybierający procesy z kolejek.
Planista długoterminowy (long-term scheduler) lub planista zadań (job scheduler) – wybiera procesy z puli zadań(zwykle na dyskach) i ładuje do pamięci operacyjnej (do kolejki procesów gotowych); w niektórych systemach nieobecny, np. UNIX, MS Windows. * Wywoływany jest rzadziej (sekundy, minuty) – może być wolny. *Nadzoruje stopień wieloprogramowości, tj. liczbą procesów w pamięci (bardzo ważne dla wydajności systemu komputerowego).
Planista krótkoterminowy (short-term scheduler) lub planista przydziału procesora (CPU scheduler) – wybiera jeden proces spośród procesów gotowych do wykonania i przydziela mu procesor. *Wywoływany jest często (milisekundy) – musi być szybki
Planista średnioterminowy (mid-term scheduler) – odpowiedzialny za wymianę (swapping) procesów między pamięcią operacyjną a dyskiem – stosowany często w systemach z podziałem czasu.
Przełączenie kontekstu: To Przełączanie procesora do innego procesu wymaga przechowania stanu starego procesu i załadowania przechowanego stanu nowego procesu. Wpływ na wydajność systemu: Wydajność systemu spada im więcej jest przełączeń kontekstu.
5. Opisać działania systemu operacyjnego związane z tworzeniem i kończeniem procesów.
Tworzenie procesu:
System operacyjny tworzy przestrzeń adresową dla procesu oraz strukturę opisującą nowy proces w następujący sposób:
wypełnia strukturę opisującą proces,
kopiuje do przestrzeni adresowej procesu dane i kod, zawarte w pliku wykonywalnym,
mapuje współdzielone zasoby systemowe w przestrzeń adresową procesu,
ustawia stan procesu na działający,
dołącza nowy proces do kolejki procesów oczekujących na procesor (ustala jego priorytet),
zwraca sterowanie powłoce systemowej.
Kończenie procesów:
Proces wykonuje ostatnią instrukcję – zwraca do systemu operacyjnego kod zakończenia. Jeśli proces zakończył się poprawnie, zwraca wartość 0, w przeciwnym wypadku zwraca wartość kodu błędu.
W momencie zwrotu do systemu operacyjnego kodu zakończenia system operacyjny ustawia stan procesu na przeznaczony do zniszczenia i rozpoczyna zwalnianie wszystkich zasobów, które w czasie działania procesu zostały temu procesowi przydzielone.
System operacyjny po kolei kończy wszystkie procesy potomne w stosunku do procesu macierzystego.
System operacyjny zwalnia przestrzeń adresową procesu. Jest to dosłowna śmierć procesu.
System operacyjny usuwa proces z kolejki procesów gotowych do uruchomienia i szereguje zadania. Jest to ostatnia czynność wykonywana na rzecz procesu.
Procesor zostaje przydzielony innemu procesowi.
6. Omówić problem ,,producenta-konsumenta”.
Proces producent (producer) wytwarza informacje, które zużywa proces konsument (consumer) – popularny wzorzec współpracujących procesów (np. program drukujący wytwarza znaki, które są pobierane przez program obsługi drukarki).
Potrzebny jest bufor, który może być zapełniany przez producenta, a opróżniany przez konsumenta:
Bufor nieograniczony (unbounded buffer) – brak praktycznych ograniczeń na rozmiar bufora;
Bufor ograniczony (bounded buffer) – ma ustaloną długość.
Bufor może być dostarczony przez system operacyjny za pomocą mechanizmu komunikacji międzyprocesowej (IPC) lub stworzony przez programistę w pamięci dzielonej.
Procesy producenta i konsumenta muszą podlegać synchronizacji, aby wszystkie jednostki „towaru” mogły być wiernie przekazane od producenta do konsumenta.
7. Na czym polega komunikacja międzyprocesowa i jakie są metody jej implementacji?
komunikacja międzyprocesowa
Jest to umowna nazwa zbioru sposobów komunikacji pomiędzy procesami systemu operacyjnego. Procesy mogą używać różnych sposobów komunikacji, a najpowszechniejsze z nich to: pliki i blokady, sygnały (przerwania programowe - DOS), semafory, łącza nienazwane, łącza nazwane, kolejki komunikatów, pamięć dzielona, gniazda, RPC (zdalne wywołanie procedury). Mechanizmy IPC opierają się na budowaniu w pamięci lub na nośniku dynamicznych struktur, które są używane w celu przesyłania pomiędzy procesami komunikatów, np. o blokadzie obiektów systemowych, stanie wykonywanych wątków, wzbudzania zaprogramowanych w aplikacjach procedur i innych.
Metody implementacji
Fizyczna (np. pamięć dzielona, szyna sprzętowa, sieć);
Logiczna (logiczne cechy łącza).
Komunikacja bezpośrednia lub pośrednia;
Komunikacja symetryczna lub asymetryczna;
Buforowanie automatyczne lub jawne;
Wysyłanie na zasadzie tworzenia kopii lub odsyłacza;
Komunikaty stałej lub zmiennej długości.
8. Porównać komunikację bezpośrednią i pośrednią między procesami.
Komunikacja bezpośrednia:
proces musi jawnie nazwać nadawcę lub odbiorcę:
nadaj(P, komunikat) – nadaj komunikat do procesu P;
odbierz(Q, komunikat) – odbierz komunikat od procesu Q.
łącze jest ustawiane automatycznie (wystarczy aby procesy znały swoje identyfikatory);
łącze dotyczy dokładnie dwu procesów;
Między każdą parą procesów istnieje dokładnie jedno złącze;
łącze może być jednokierunkowe, choć zwykle jest dwukierunkowe.
Wada: ograniczona modularność – zmiana nazwy jednego procesu może pociągać za sobą konieczność zweryfikowania definicji wszystkich innych procesów.
Komunikacja pośrednia:
komunikaty są nadawane i odbierane za pomocą skrzynek pocztowych (mailboxes), zwanych także portami (ports).
Każda skrzynka pocztowa ma jednoznaczną identyfikację;
Procesy mogą się komunikować tylko wtedy, gdy mają jakąś wspólną skrzynkę pocztową
Operacje nadawania i odbioru komunikatów:
nadaj(A, komunikat) – nadaj komunikat do skrzynki A;
odbierz(A, komunikat) – odbierz komunikat ze skrzynki A.
łącze między procesami jest ustawiane tylko wtedy, gdy dzielą one jakąś skrzynkę pocztową;
łącze może być związane z więcej niż dwoma procesami;
Każda para komunikujących się procesów może mieć wiele łączy;
łącze może być jednokierunkowe lub dwukierunkowe.
9. Przedstawić metody komunikacji w systemach klient-serwer.
Wszystkie aplikacje wykonywane są przez serwer a wyniki wyświetlane na ekranie klienta;
Serwer dostarcza danych dla aplikacji uruchamianych na komputerze klienta;
Wszystkie komputery współpracują ze sobą jak równy z równym (peer-to-peer), korzystając wzajemnie ze swoich zasobów.
10. Co to jest wątek, czym się charakteryzuje, jakie są zalety wątków?
Wątek to jednostka wykonawcza w obrębie jednego procesu, będąca kolejnym ciągiem instrukcji wykonywanym w obrębie tych samych danych (w tej samej przestrzeni adresowej).
Charakteryzuje się tym, że jednym procesie może być kilka wątków. Wątki tego samego procesu korzystają ze wspólnego kodu i danych, mają jednak oddzielne stosy.
Zalety wątków:
Dzielenie zasobów sprawia, ze przełączanie między wątkami oraz tworzenie wątków jest tanie w porównaniu z procesami ciężkimi.
Oszczędne wykorzystanie zasobów – dzięki ich współużytkowaniu.
Współpraca wielu wątków pozwala zwiększyć przepustowość i poprawić wydajność (np. jeśli jeden wątek jest zablokowany, to może działać inny).
Lepsze wykorzystanie architektury wieloprocesorowej/wielordzeniowej (wątek -> procesor/rdzeń) oraz dedykowanej technologii Hyper-Threading.
11. Omówić podstawowe metody implementacji wątków oraz modele wielowątkowości.
Metody implementacji wątków:
Wątki poziomu użytkownika (user-level threads) – tworzone za pomocą funkcji bibliotecznych; przełączanie między wątkami nie wymaga wzywania systemu operacyjnego (np. POSIX Pthreads).
Zalety:
Szybkie przełączanie między wątkami.
Wydajne obsługiwanie wielu zamówień.
Wady:
Przy jednowątkowym jądrze każde odwołanie wątku poziomu użytkownika do systemu powoduje wstrzymanie całego zadania.
Nieadekwatny przydział czasu procesora (zadanie wielowątkowe i jednowątkowe mogą dostawać tyle samo kwantów czasu).
Wątki jądra (kernel threads) – obsługiwane przez jądro systemu (np. systemy Windows XP/Vista/7, Linux, Solaris, Mac OS X).
Zalety: Wydajniejsze planowanie przydziału czasu procesora.
Wady: Wolniejsze przełączanie wątków – zajmuje się tym jądro (za pomocą przerwań).
• Wątki mieszane – zrealizowane oba rodzaje wątków.
Modele wielowątkowości:
Model „wiele na jeden” (many-to-one):
Wiele wątków poziomu użytkownika odwzorowanych na jeden wątek jądra (np. biblioteka green threads w systemie Solaris).
Stosowany w systemach nie posiadających wątków jądra.
Model „jeden na jeden” (one-to-one):
Każdy wątek poziomu użytkownika odwzorowany wzajemnie jednoznacznie na jeden wątek jądra.
Przykłady: systemy Windows NT/2000/XP/Vista/7, Linux, OS/2, Solaris 9.
• Model „wiele na wiele” (many-to-many):
Wiele wątków poziomu użytkownika jest multipleksowanych na mniejszą lub równą liczbę wątków jądra.
Pozwala systemowi operacyjnemu utworzyć dostateczną liczbę wątków jądra- dobra współbieżność i dobra wydajność.
Często występuje poziom pośredni w postaci procesów lekkich (LWP), będących dla wątków użytkownika czymś w rodzaju wielowątkowych wirtualnych procesorów – z każdym LWP związany jest jeden wątek jądra, natomiast zwykły proces może składać się z jednego lub więcej LWP.
Przykłady: systemy Solaris – wersje < 9, IRIX, HP-UX, Tru64 UNIX.
12. W jaki sposób realizowane jest kasowanie wątków, obsługa sygnałów przez wątki, do czego służą pule wątków, co to są dane specyficzne wątku?
Kasowanie wątków:
Kasowanie asynchroniczne – dany wątek kończy natychmiast wątek obrany za cel (target thread); może być niebezpieczne dla dzielonych zasobów.
Kasowanie odroczone – wątek obrany za cel może okresowo sprawdzać, czy powinien się zakończyć, co daje mu możliwość zakończenia w sposób uporządkowany, np. wątki Pthreads posiadają punkty, w których można je bezpiecznie kasować, tzw. punkty kasowania (cancellation points).
Obsługa sygnałów przez wątki:
Sygnał (signal) służy w systemach uniksowych do powiadamianiu o wystąpieniu konkretnego zdarzenia
Sygnały synchroniczne są dostarczanie do procesu, który wykonał operację powodującą sygnał, natomiast asynchroniczne pochodzą od zdarzeń zewnętrznych.
Możliwości dostarczania sygnałów do procesów wielowątkowych:
Dostarczyć sygnał tylko do tego wątku, do którego się on odnosi.
Dostarczyć sygnał do wszystkich wątków w procesie.
Dostarczyć sygnał do niektórych wątków (np. tych, które go nie blokują).
Przydzielić specjalny wątek do odbierania wszystkich sygnałów do procesu.
Różne systemy realizują różne możliwości; zależy to też od rodzaju sygnału.
Do czego służą pule wątków:
w chwili uruchomienia proces tworzy pewną liczbę wątków (pulę), które oczekują na zamówienia; kiedy nadchodzi zamówienie, wątek z puli jest budzony przez serwer, a po obsłużeniu zamówienia wraca do puli i czeka na kolejne zlecenie. Pula wątków ogranicza liczbę wątków, co chroni przed wyczerpaniem zasobów systemowych, a także spadkiem wydajności systemu.
Dane specyficzne wątku:
Wątki należące do procesu dzielą jego dane, co jest zaletą wielowątkowości.
W pewnych sytuacjach wątek może potrzebować własnej kopii jakichś danych
(np. identyfikator transakcji w wielowątkowych systemach transakcyjnych) – większość bibliotek wątków dostarcza możliwości utrzymywania danych specyficznych wątku (np. Pthreads, Win32, Java).
13. Podaj przykłady implementacji wątków w różnych systemach.
• P-wątki (Pthreads) – specyfikacja (API) wątków standardu POSIX:
Dostępne głównie w systemach uniksowych (np. Linux, Solaris, Mac OS X).
MS Windows na ogół! ich nie udostępniaj", ale można je zainstalować korzystając z oprogramowania shareware.
Udostępniane jako biblioteka poziomu użytkownika lub poziomu jądra – zależnie od implementacji w danym systemie
Biblioteka NPTL (Native POSIX Thread Library) – bardzo wydajna obsługa dużej liczby wątków na poziomie jądra, lepsze wsparcie dla systemów wieloprocesorowych i wielordzeniowych; dostępna w niektórych dystrybucjach Linuksa (np. RedHat).
Wątki w Windows XP/Vista/7 – dostępne poprzez interfejs Win32 API:
Aplikacja Windows działa jako osobny proces, który może zawierać jeden lub więcej wątków – stosowane jest odwzorowanie „jeden na jeden”.
Dostarczana jest także biblioteka włókien (fiber) wg. modelu „wiele na wiele”.
• Wątki Linuxa – od wersji 2.2:
Oprócz funkcji systemowej fork do powielania procesów, Linux posiada funkcją systemową clone, która umożliwia tworzenie oddzielnego procesu dzielącego przestrzeń adresową procesu macierzystego (co ma być dzielone określa się za pomocą parametrów funkcji) – taki proces zachowuje się bardzo podobnie jak oddzielny wątek.
Linux nie rozróżnia procesów i wątków – przy odnoszeniu się do przepływu sterowania w programie używany jest na ogół terminu zadanie (praca, task).
• Wątki Javy – wątki na poziomie języka programowania, realizowane przez JVM; odwzorowanie w wątki jądra zależy od implementacji JVM w danym systemie