background image

 

 

9. KOORDYNACJA PROCESÓW WSPÓŁBIEŻNYCH PRZY UŻYCIU 
INTERPRETATORA

    KOMEND SYSTEMU UNIX

Podstawowe parametry procesu unixowego:

- identyfikator procesu PID 

(Process ID)

- identyfikator procesu rodzicielskiego PPID 

(Parent Process ID)

- rzeczywisty identyfikator użytkownika UID 

(User ID)

- efektywny identyfikator użytkownika EUID 

(Effective User ID)

- rzeczywisty identyfikator grupy użytkowników GID 

(Group ID)

- efektywny identyfikator grupy użytkowników EGID 

(Effective Group ID)

- identyfikator grupy procesów PGRP 

(Process Group)

- wskaźnik do struktury terminala. Terminal ten nazywamy terminalem 
sterującym
 dla danego

  procesu.

Proces może nie mieć terminala sterującego - w takim przypadku wskaźnik do 
struktury terminala

ma wartość NULL.

background image

 

 

Struktura terminala zawiera między innymi bieżący identyfikator grupy 
terminala
 

(Current

Terminal Process Group)

 - nie ma ustalonego skrótu, na potrzeby wykładu 

przyjmijmy CTPGRP.

Proces interpretatora komend, który zostaje uruchomiony w wyniku zalogowania się 
do systemu,

nazywany jest shellem zgłoszonym. Na początku pracy jest procesem 
sterującym
 terminala, 

z którego nastąpiło zalogowanie, czyli przywódcą grupy terminala (zachodzi dla 
niego 

PID = PGRP = CTPGRP).

Proces nazywamy pierwszoplanowym 

(foreground process)

, jeżeli jego PGRP jest 

równy CTPGRP

wskazywanego przez niego terminala. W przeciwnym przypadku proces nazywamy 
drugoplanowym,

lub wykonującym się w tle 

(background process)

. Procesy pierwszoplanowe mogą 

odczytywać znaki

z terminala i zapisywać znaki do terminala (to jest pliku specjalnego 
odpowiadającego terminalowi).

Procesy drugoplanowe nie mogą odczytywać znaków z terminala (są zawieszane 
przy próbie czytania),

natomiast zazwyczaj mogą zapisywać znaki do terminala (jest to zależne od systemu 
i aktualnych

ustawień w strukturze terminala).

Uwaga. Zazwyczaj w każdej chwili istnieje dokładnie jeden proces pierwszoplanowy 
terminala.

background image

 

 

Pojedynczą komendę lub pojedynczy potok komend uruchomiony z linii poleceń 
shella nazywamy

pracą 

(job)

. Shell ma własność sterowania pracami 

(job control)

, jeżeli 

posiada możliwość zmiany

CTPGRP terminala, z którego został uruchomiony.

Polecenia:

komenda                                 - uruchamia proces pierwszoplanowy;

komenda &                             - uruchamia proces drugoplanowy 

(komenda &)                          - uruchamia proces drugoplanowy korzystając z 
podshella

Ctrl-Z                                     - zawiesza proces pierwszoplanowy

Ctrl-Y                                    - zawiesza proces pierwszoplanowy w chwili 
rozpoczęcia czytania

bg praca   (lub   praca &)     - uruchamia zawieszony proces w tle

fg praca    (lub   praca )        - uruchamia zawieszony proces na pierwszym 
planie

kill -9 praca                           - powoduje zakończenie procesu (działającego lub 
zawieszonego)

Uwaga. Można uruchomić kilka procesów jednocześnie z jednej linii poleceń 
(pisząc na przykład

              komenda1 &   komenda2 & ).

background image

 

 

Proste mechanizmy koordynacji procesów w shellu:

1) polecenia  exit  i  wait

    exit liczba              - kończy działanie procesu i przesyła jednobajtową liczbę 
(kod wyjścia)

                                     do jego procesu rodzicielskiego

    wait praca              - powoduje zawieszenie procesu w oczekiwaniu na 
zakończenie jego procesu

                                      potomnego i odbiera jego kod wyjścia

2) polecenia  kill  i  trap

     kill sygnał  praca       - powoduje wysłanie sygnału do procesu (z tej samej 
grupy)

     trap komenda sygnał  - powoduje przechwycenie przysłanego sygnału (jeśli 
to możliwe)

                                           i wykonanie komendy 

background image

 

 

3) łącza nienazwane (bezimienne)

                   komenda1 | komenda2 ... | komendan                           - potok

    (może być utworzony przy założeniu, że komendy korzystają ze standardowego 
wejścia/wyjścia)

4) łącza nazwane (kolejki FIFO)

                  mkfifo nazwa   (lub mknod nazwa p)  - tworzy kolejkę FIFO

    Zapis/odczyt oraz usunięcie odbywają się dla kolejki FIFO tak samo, jak dla 
zwykłego pliku

    (mogą to robić wszystkie procesy, które mają odpowiednie prawa dostępu do 
kolejki). Musi

    zachodzić synchronizacja operacji zapisu i odczytu.

Uwaga.

1) Łącza są realizowane jako bufory plików i mają ograniczoną pojemność. Mogą 
być widziane jako

    „pliki nietrwałe” - odczyt porcji informacji z łącza usuwa ją jednocześnie z 
łącza.

2) Łącza nazwane są uwidocznione w systemie plików jako szczególny rodzaj 
plików (o wielkośći 0).

    Łącza nienazwane nie są uwidocznione (istnieją tylko w czasie wykonywania 
potoku).


Document Outline