Wykład 8
Sterowanie procesami
Komunikacja między procesami
Koncepcja procesu
Stany procesu
Przełączanie pomiędzy procesami
Przykład implementacji przełączania procesów
komunikacja międzyprocesowa
s
ygnały
strumienie
Wieloprogramowość
Cecha umożliwiająca „jednoczesne” wykonywanie
wielu programów
Wymagany program organizujący pracę programów
użytkowych – system nadzorczy/operacyjny
Mechanizmy sterowania wykonaniem programów
Mechanizmy przepływu informacji pomiędzy
programami
Składowe systemu operacyjnego
ładowalne moduły jądra
jądro
wspólne biblioteki systemu
programy zarządza-
nia systemem
procesy użytko-
we
pomocnicze progra-
my użytkowe
kompilatory
„przybory” systemowe
(tryb użytkownika)
Współdziałanie
aplikacji z jądrem
(tryb użytkownika)
Pamięć wirtualna,
procesy, sygnały
(tryb jądra)
Składowe systemu cd
Koncepcja procesu
System wieloprogramowy
= wiele realizacji programów może
być wykonywanych jednocześnie
proces
Cechy procesu
realizacja
wykonywania programu
wykonanie/wstrzymanie
w dowolnym momencie
równoległość
– przełączanie kontekstowe
niezależność
: wykorzystanie mechanizmów CPU dla
zapobieżenia bezpośredniego korzystania z hardware’u lub
komórek o ustalonych adresach
tryb użytkownika i tryb jądra
ochrona pamięci
Składniki procesu
Składowe procesu w systemie LINUX
Liniowa przestrzeń adresowa
, w której wydzielić można
sekcję tekstu (kod programu), sekcję danych i sekcję stosu.
Licznik programu
wskazujący na aktualnie wykonywaną
instrukcję, lub w przypadku programów wielowątkowych wiele
takich liczników.
Zapis stanu rejestrów
procesora.
Deskryptory plików
, opisujące otwarte przez proces pliki,
strumienie i połączenia sieciowe.
Dane procesu
, takie jak unikalny dla procesu numer
PID
,
numer użytkownika
UID
, numery grup
GID
, efektywny UID i
GID..
Zależności rodzinne
z innymi procesami: rodzic, lista dzieci i
braci.
Liczniki statystyczne
zapisujące m.in. zużyty czas w trybie
jądra i trybie użytkownika.
Deskryptor procesu
Każdy proces reprezentowany jest przez jego deskryptor
typ
nazwa
opis
bieżący stan procesu (executing, ready, itd.)
priorytet
polityka szeregowania (łańcuchowo, itp.)
bieżący czas przydzielony procesowi
lista deskryptorów uruchomionych procesów
identyfikator procesu (PID)
stan rejestrów CPU
Procesy i zadania
Procesy z zewnątrz widziane jako niezależne
Od strony jądra – poszczególne zadania systemu
program
użytkownika
procedura
biblioteczna
obsługa
wywołań
systemowych
procedury
jądra
Składowe systemu cd
Tryb jądra
•
Aktywny:
•
w trybie użytkownika - proces znajduje się „w procesorze” i wykonuje
swój kod.
•
w trybie jądra - jądro wykonuje wywołanie systemowe wykonane przez
proces.
•
Gotowy
do wykonania -
może być uruchomiony w każdej chwili, jednak nie
został mu jeszcze przydzielony procesor.
•
Uśpiony
– proces czeka na jakieś zdarzenie, na przykład na odczyt danych
z dysku lub z sieci.
•
Zatrzymany
– proces czeka na sygnał (wznowienia)
•
Zombie
(widmo)-
proces zakończył działanie i czeka na odebranie kodu
powrotu przez proces
, który w międzyczasie przestał istnieć.
Stany procesu
Zmiany stanu procesu
przełączenie w stan działania
ustanowienie nowego
procesu
zakończenie procesu
sygnał
zatrzymania
zdarzenie! ->
proces do
kolejki
proces uśpiony;
oczekuje zdarzenia
przełączenie
w stan
gotowości
GOTOWY
WIDMO
DZIAŁA
ZATRZYMANY
UŚPIONY
sygnał
wznowienia
od innego
procesu
UTWORZENIE
PROCESU
Przełączanie kontekstowe
Przełączanie kontekstowe
zapisz zawartość rejestrów CPU do deskryptora procesu
odczytaj zawartość rejestrów CPU z deskryptora następ-
nego procesu
Rejestry zachowywane przy przełączaniu
licznik programu i wskaźnik stosu
rejestry robocze (ogólnego przeznaczenia)
rejestry jednostki zmiennoprzecinkowej
PSW
rejestry zarządzania pamięcią
Sterowanie procesami przez jądro
Tryb jądra i tryb użytkownika
CPU pracuje w
trybie jądra
lub w
trybie użytkownika
programy w
trybie użytkownika nie mają dostępu
do
przestrzeni danych jądra i funkcji jądra
programy w
trybie jądra mają dostęp
do wszystkich
zasobów
Źródła przełączenia w tryb jądra
PRZYKŁAD IMPLEMENTACJI
PRZEŁĄCZANIA PROCESÓW
The diagram of the programme
Initial- value
label
LOOP
Copy temperature in
variable and display
Wait 250ms
Label
Arrows up
Enter
KEYBOARD
Arrows
down
Increment variable Decrement variable display OK
and display with and display with with
OK OK temperature
no enter
Wait 1.5 seconds Wait 2secondes
Put enter
Display new
Temperature display
temperature
Calculation and
Calculation and
execution of
execution of
a control
a control
Przykład: urządzenie sterujące
ogrzewaniem (mikrokontroler)
Funkcje:
-odczyt ustawień
-komunik. przez wyświetlacz
-obliczenie sterowania
-sterowanie
Procesy składowe aplikacji
Zasoby systemu wielozadaniowego
Zasoby procesów składowych aplikacji
Initialisation
stack0,1,2,3 starts at address ...H (internal ram)
values for the timer 0
Set values for variables
……………………
……………………..
main_prog
Process0
Process1
Process2
Process3
Switching routine
Budowa systemu
PROCESS 1
WAIT 100 MS
READ
INPUT EXECUTED
VARIABLE
NO
EXECUTED?
YES
READ VARIABLE
DISPLAY
PROCESS 0
(Read keyboard & save
data in a variable)
no
enter
ENTER
ARROWS DOWN
ARROWS UP
SET INPUT
DECREASE
INCREASE
EXECUTED
VARIABLE
VARIABLE
VARIABLE
VARIABLE
RESET?
YES
NO
TIMER_ROUTINE
PREPARING TIMER
RELOAD TIMER AND RESTART
SWITCH
SAVE REGISTERS USED
BY THE CURRENT PROCESS
SAVE THE CURRENT STACK
POINTER IN THE ACTIVE BANK
CHANGE THE BANK
ROUND ROBIN CYCLE ( )
STACK POINTER FROM
THE CURRENT BANK
( new process)
RESTORE REGISTERS OF THE NEXT
PROCESS FROM ITS STACK
Obsługa przerwań
Przełącznik procesów
Timer proc.
Process0
Process2
Process2
Process3
000B
0100
0103
0106
0109
............
STACK0
0030
............
STACK1
0040
............
Budowa systemu
Budowa systemu
Inicjalizacja stosów
Budowa systemu
Inicjalizacja timera i przerwań
Budowa systemu. Obsługa przerwania
TIMER_ROUTINE
PREPARING TIMER
RELOAD TIMER AND RESTART
SWITCH
SAVE REGISTERS USED
BY THE CURRENT PROCESS
SAVE THE CURRENT STACK
POINTER IN THE ACTIVE BANK
CHANGE THE BANK
ROUND ROBIN CYCLE ( )
STACK POINTER FROM
THE CURRENT BANK
( new process)
RESTORE REGISTERS OF THE NEXT
PROCESS FROM ITS STACK
Obsługa przerwań
Przełącznik procesów
Obsługa przerwań
Przełącznik procesów
Komunikacja międzyprocesowa (1)
Sygnał:
zdarzenie generowane przez system jako reakcja
na zaistniałe
okoliczności. Po otrzymaniu sygnału proces może podjąć pewne
czynności. Może być użyty do komunikacji pomiędzy uruchomiony-
mi procesami
Cechy
sygnałów:
– asynchroniczność - wysyłający
nie czeka
, aż proces odbierze
sygnał
– jedynym
przekazem jest numer
, poza tym sygnał nie niesie
żadnej innej informacji
–
nadawca
sygnału jest
nieznany
(niewyspecyfikowany)
–
ilość
przesłanych sygnałów danego typu jest
nieznana
, proces
wie tylko, czy sygnał się pojawił
–
proces nie musi odbierać
sygnału czy reagować na niego (nie
dotyczy części sygnałów)
– sygnały są
zestandaryzowane
: m
ają przyporządkowane numery,
(i ustalone nazewnictwo).
Sygnały są używane w systemie zazwyczaj do obsługi nietypowych
sytuacji a nie do przesyłania danych między procesami.
Większość typów sygnałów jest przeznaczona do użycia przez jądro.
Np. w Linux’ie tylko kilka z listy 19 służy do komunikacji
międzyprocesowej. Istnieje dodatkowa lista sygnałów poza standardem,
zależna od implementacji. Na ogół używa ich jądro do wskazywania
warunków błędu.
Źródła sygnałów:
niektóre błędy (typu: naruszenie segmentów pamięci).
powłoka i programy obsługi terminala w celu wywołania przerwania.
jawnie wysyłane z jednego procesu do innego w celu przekazania
informacji albo modyfikacji procesu.
Operacje związane z sygnałami:
generowanie,
przechwytywanie,
reagowanie,
ignorowanie.
Sygnały
Sygnały cd (przykłady)
Strumienie (1)
Koncepcja strumienia:
Jeżeli dwa lub więcej procesów korzysta w tym samym czasie
ze
wspólnych danych
to najlepiej wykorzystać
jednokierunkowy kanał
komunikacyjny łączący ze sobą powiązane procesy (=
strumień
).
Funkcje strumienia:
Przenoszenie danych
– zapis (write) przez jeden proces; odczyt (read)
przez drugi proces
Cechy:
informacja w
strumieniu
odczytywana jest
w kolejności
takiej jak
zapis.
p
roces nie musi czytać ze
strumienia
takimi samymi porcjami jakimi
informacja jest zapisywana.
j
eżeli ilość danych w
strumieniu
jest z jakichś względów
za duża
,
proces produkujący dane zostaje
zawieszony
, do czasu, gdy poziom
danych w
strumieniu
spadnie do dopuszczalnego poziomu.
Komunikacja międzyprocesowa –
strumienie (2)
W wielu systemach momencie
utworzenia
każdego procesu
zawsze otwierane
trzy pliki i nadawane im deskryptory (0,1,2):
stdin (standard input, 0) -
wejście standardowe
stdout (standard output, 1) -
wyjście standardowe
stderr (standard error, 2) -
wyjście standardowe błędów (diagnostyczne)
Domyślnie strumień wejściowy to klawiatura a wyjściowy i
błędów – ekran,
ale niekoniecznie
!
Wejścia i wyjścia różnych procesów (wątków) mogą być
ze sobą powiązane za pomocą nienazwanych procesów
komunikacji
–
strumieni.
Zastosowanie strumieni (3)
komunikacja pomiędzy procesami
posiadającymi wspólnego przodka:
powiązanie standardowych wejść i
wyjść różnych procesów.
sprzężenie zwrotne:
przywiązanie
wejścia i wyjścia
strumienia
do jednego procesu, co
stwarza mechanizm pętli.
UWAGA:
strumienie
są
nietrwałe
.
Muszą być tworzone gdy są potrzebne i
usuwane z chwilą zakończenia
działania korzystających z nich
procesów.
Pliki FIFO (strumienie nazwane)
Wad
zwykłych
strumieni
nie mają
strumienie nazwane
(
pliki
FIFO
).
Cechy plików FIFO:
Na poziomie zapisu i odczytu pliki FIFO działają jak
strumienie
zapewni
ając mechanizm komunikacji
międzyprocesowej w systemie
FIFO
.
W przeciwieństwie jednak do
strumieni
pliki FIFO
są
elementem trwałym
i posiadają
nazwy plików
.
Plik FIFO ma
ma
też
właściciela
,
wielkość
i powiązane
prawa dostępu
.
Może być
otwierany
,
zamykany
i
usuwany
jak każdy plik.