1 Zarządzanie procesami 1) Proces
Transkrypt
1 Zarządzanie procesami 1) Proces
Zarządzanie procesami 1) Proces - Określając nieformalnie, proces jest wykonywanym programem. Wykonanie procesu musi przebiegać w sposób sekwencyjny. Oznacza to, że w dowolnej chwili na zamówienie danego procesu może być wykonywany co najwyżej jeden rozkaz kodu programu. Proces jest czymś więcej niż samym kodem programu. W pojęciu procesu mieści się również bieżąca czynność reprezentowana przez wartość licznika rozkazów oraz zawartość rejestrów procesora. Do procesu na ogół należą także: stos procesu przechowujący dane tymczasowe (takie jak parametry procedur, adresy powrotne i zmienne tymczasowe) oraz sekcja danych zawierająca zmienne globalne. Sam program nie jest procesem. Program jest obiektem pasywnym, podobnie jak zawartość pliku przechowywanego na dysku. Natomiast proces jest obiektem aktywnym, z licznikiem rozkazów określającym następny rozkaz do wykonania i ze zbiorem przydzielonych mu zasobów. Chociaż dwa procesy mogą być związane z jednym programem, będą one zawsze traktowane jako dwie oddzielne sekwencje wykonania. Na przykład wielu użytkowników może korzystać z działania kopii programu pocztowego lub jeden użytkownik może zapoczątkować pracę wielu kopii edytora. W każdym z tych przypadków mamy do czynienia z osobnymi procesami, które - niezależnie od równoważności sekcji tekstu będą się różniły sekcjami danych. Stan procesu Wykonujący się proces zmienia swój stan (ang. stałe). Stan procesu jest po części określony przez bieżącą czynność procesu. Każdy proces może się znajdować w jednym z następujących stanów: • nowy - proces został utworzony; • aktywny - są wykonywane instrukcje; • oczekiwanie - proces czeka na wystąpienie jakiegoś zdarzenia (np. na zakończenie operacji wejściawyjścia); • gotowy - proces czeka na przydział procesora; • zakończony - proces zakończył działanie. 2) Wątek (ang. thread) określany również jako proces lekki (ang. lightweight process - LWP) to podstawowa jednostka wykorzystania procesora. W skład wątku wchodzą: licznik rozkazów, zbiór rejestrów, obszar stosu. Wątki, w przeciwieństwie do procesów, można przełączać tanim kosztem, tj. z małym użyciem czasu procesora. Oczywiście przełączenie wątku również wymaga od systemu operacyjnego przełączenia zbioru rejestrów, jednakże nie jest konieczne zarządzanie pamięcią. Porównując wątki i procesy, rozważymy sposób sterowania wieloma wątkami i wieloma procesami. Każdy z procesów działa niezależnie, posiada własny licznik rozkazów, wskaźnik stosu oraz przestrzeń adresową. W przypadku, gdy zadania wykonywane przez procesy nie są ze sobą powiązane wszystko jest w porządku, jednakże gdy mamy do czynienia z jednym zadaniem wykonywanym przez kilka procesów marnowane są zasoby systemu (każdy proces przechowuje osobne kopie tych samych informacji). Proces wielowątkowy natomiast, wykonujący jedno zadanie, zużywa mniej zasobów (wątki korzystają z tego samego zbioru informacji). Wątki są podobne do procesów pod wieloma względami. Tak jak procesy, watki mogą znajdować się w jednym z określonych stanów: gotowości, zablokowania, aktywności i zakończenia. Aktywny może być tylko jeden wątek (tak jak proces). Każdy wątek ma własny licznik rozkazów i stos, a jego wykonanie w procesie przebiega sekwencyjnie. Wątki, również podobnie jak procesy, mogą tworzyć wątki potomne i mogą blokować się do czasu zakończenia wywołań systemowych - możliwa jest więc sytuacja działania jednego wątku, gdy zablokowany jest inny. Różnicą pomiędzy wątkiem a procesem jest fakt, że wątki są zależne od siebie. Każdy z wątków ma dostęp do danych innego z wątków (dostęp do każdego adresu w zadaniu). Niemożliwa jest więc ochrona na poziomie wątków. Ponieważ jednak w obrębie jednego zadania wątki mogą należeć do jednego użytkownika, ochrona taka nie jest konieczna. 1 3) Planowanie przydziału procesora ma na celu stałe utrzymywanie w aktywności określoną liczbę zadań. Zmiana przydziału procesora ma miejsce wtedy kiedy to proces przeszedł od stanu aktywności do czekania, od stanu aktywności do gotowości, oraz od stanu czekania do gotowości. Pierwszym a zarazem najprostszym algorytmem przydziału procesora jest algorytm „pierwszy zgłoszony, pierwszy obsłużony”. Proces, który pierwszy się zgłosi, otrzymuje procesor jako pierwszy. Tutaj dochodzić może do tzw. Efektu „konwoju”. Wyobraźmy sobie, procesy o długich fazach procesora, które to blokują krótkie procesy. Mniejsze zadania czekają na zakończenie dłuższych zadań. Dochodzi do wspomnianego wcześniej niepożądanego efektu. Druga metoda jest z kolei dużo lepsza od poprzedniej. Polega ona tym, że procesor otrzymuje proces o najkrótszej fazie procesora. (Kiedy dojdzie do sytuacji kiedy oba procesy będą miały tą samą fazę, wtedy stosujemy algorytm opisany na początku.) 4) Synchronizacja procesów, koordynowanie procesów (angielskie process synchronization, process coordination), zabiegi mające na celu ustalenie właściwej kolejności działania procesów współpracujących, w szczególności procesów korzystających ze zmiennych dzielonych. Do synchronizacji służą rozmaite mechanizmy programowe implementowane przez jądro systemu operacyjnego. 5) Zakleszczenie procesów: układ co najmniej dwóch procesów, których wykonywanie nie może być kontynuowane, ponieważ jeden proces utrzymuje zasób potrzebny drugiemu procesowi i proces utrzymujący ten zasób też nie może działać, gdyż potrzebuje zasobu przydzielonego do drugiego, unieruchomionego procesu. 2