1. co to jest program
Można powiedzieć, że program jest zapisem
algorytmu wraz ze strukturami danych, na których algorytm ten operuje. Algorytm
zwykle bywa zapisany w jednym z wielu języków programowania, ale ostatecznie
wykonywany jest kod maszynowy. Mówiąc o programie, możemy mieć na myśli
wydruk kodu źródłowego, kod źródłowy programu umieszczony w pliku w pamięci
dyskowej, skompilowany kod wynikowy w pamięci dyskowej czy też w pamięci
operacyjnej. Pojęcie programu nie jest więc jednoznaczne. Program jest zapisem algorytmu operującego na pewnych strukturach
danych.
Program = algorytm + struktury danych.
2. czy program jest strukturą statyczną czy dynamiczną
Program jest strukturą statyczną zapisaną na jakimś nośniku.
3. co to jest kontekst procesu
Kontekst procesu to wszystkie informacje potrzebne do wznowienia zawieszonego wcześniej procesu. W szczególności należy zachować takie informacje, które nowy proces zamazuje. W skład kontekstu wchodzą rejestry procesora, w tym licznik rozkazów.
4. czy procesy dzielą zmienne globalne (a wątki?)
nie, to wątki dzielą z procesem zmienne globalne, ale mają też swoje prywatne atrybuty i zasoby (zwłaszcza zmienne lokalne)
5. jak działa funkcja fork
utworzenie kopii procesu bieżącego. Funkcja fork() tworzy kopię procesu bieżącego, czyli tego procesu, który właśnie wykonuje funkcję fork(). Aby proces mógł się wykonywać, potrzebne są trzy segmenty pamięci: segment kodu, danych i segment stosu. Funkcja fork() tworzy deskryptor nowego procesu oraz kopię segmentu kodu, danych i stosu procesu macierzystego. Z powyższego stwierdzenia wynikają ważne konsekwencje:
1. Wartości zmiennych w procesie potomnym są takie, jakie były w procesie macierzystym bezpośrednio przed wykonaniem funkcji fork().
2. Modyfikacje zmiennych dokonywane w procesie macierzystym nie są widoczne w procesie potomnym (i odwrotnie), gdyż każdy z procesów ma własną kopię segmentu danych.
6. co określa priorytet wątku
W praktyce procedura szeregująca nie podaje statycznego wyliczenia, kiedy który wątek ma być wykonywany. Decyzje szeregujące są podejmowane na bieżąco na skutek określonych zdarzeń i uwzględniają atrybuty wszystkich gotowych do wykonania wątków. Atrybuty te to: priorytet wątku, stan wątku i przydzielona mu strategia szeregowania.
Priorytet wątku jest miarą pilności danego wątku względem innych wątków wykonywanych na tym samym komputerze.
7. co robi funkcja pthread_create
Każdy wątek może utworzyć inny wątek w ramach tego samego procesu. Funkcja ta tworzy wątek, którego kod znajduje się w funkcji podanej jako argument func(). Wątek jest uruchamiany z parametrem arg, a informacja o wątku jest umieszczana w strukturze thread.
1. definicja watku
Wątek to pojedyncza ścieżka przebiegu sterowania wykonywana
w ramach procesu.
2. czy watek moze miec wiele procesów
nie, to proces może mieć wiele wątków
3. funkcja która pozwala na przelaczania miedzy procesami
Przerwanie jest chwilowym wstrzymaniem aktualnie wykonywanego procesu i wykonaniem procedury (obsługi przerwania) przypisanej przerwaniu. Przełączanie jest wykonywane przez system operacyjny.
4. Co się wykona szybciej - utworzenie procesu czy watku
wątek?
5. co robi funkcja wait
oczekiwania na zakończenie procesu potomnego, używa się do synchronizacji procesów
Działanie funkcji wait() jest następujące:
1. Gdy żaden proces potomny się nie zakończył, funkcja wait() powoduje zablokowanie
procesu macierzystego aż do zakończenia się jakiegoś procesu potomnego.
Jeśli ten się zakończy, zwracany jest jego PID oraz status.
2. Gdy jakiś proces potomny zakończył się, zanim wykonano funkcję wait(), nie
występuje blokada procesu macierzystego. Funkcja zwraca PID zakończonego
procesu oraz jego status.
3. Gdy brak jakichkolwiek procesów potomnych, funkcja wait() zwraca -1.
6. typ zmiennej 3 zmiennej w funkcji pthread_create
func – wskaźnik do funkcji zawierającej kod wątku; jest to funkcja typu void*(*)(void*).
7. co to jest zakleszczenie
1. Producent czeka na zmniejszenie zmiennej licznik, które może być wykonane
tylko przez konsumenta.
2. Konsument czeka na zwolnienie muteksu, co może być wykonane przez producenta.
Tak więc producent czeka na konsumenta, konsument na producenta, a aplikacja ulega
zablokowaniu. Sytuację taką nazywamy zakleszczeniem. Zbiór wątków jest w stanie
zakleszczenia, jeżeli każdy wątek z tego zbioru czeka na zasób, który może być
zwolniony tylko przez inny wątek tego samego zbioru.
Zbiór procesów jest w stanie zakleszczenia, jeżeli każdy proces z tego zbioru czeka na zdarzenie, które może być spowodowane tylko przez inny proces z tego samego zbioru.
1. co to jest proces
Proces jest wykonującym się programem. Proces to aktywna struktura dynamiczna istniejąca tylko w środowisku działającego komputera. Aby proces mógł się wykonywać, potrzebne są co najmniej takie zasoby sprzętowe jak: procesor, pamięć operacyjna i urządzenia wejścia-wyjścia. Proces można rozpatrywać jako zbiór wątków i zestaw zasobów.
2. czy proces jest dynamiczny czy statyczny
dynamiczny
3. jak na jednym kompie (jednordzeniowy procesor) może się wykonywać jednocześnie wiele wątków
Procesy mogą się wykonywać na oddzielnych procesorach tego samego komputera
(mamy wtedy do czynienia z komputerem wieloprocesorowym [63]) lub też na jednym
procesorze. O takim przypadku mówimy, że procesy wykonywane są w trybie
podziału czasu procesora. Podstawowym mechanizmem umożliwiającym podział
czasu procesora są przerwania.
4. co robi funkcja spawn*()
Funkcja fork() tworzy kontekst nowego procesu, a exec() wypełnia go nową treścią. Możliwości funkcji exec()[Zastąpienie ciała procesu bieżącego inną treścią] i fork() [Utworzenie kopii procesu bieżącego ] są razem połączone w funkcjach z rodziny spawn*() [Utworzenie procesu potomnego – rodzina funkcji].
spawn() - Utworzenie procesu potomnego z możliwością przekazania do procesu potomnego deskryptorów
otwartych plików
5. czy wątki dziedziczą zmienne globalne (czy lokalne?)
nwm
6. co to jest race condition
Wyścigi – konstrukcje występujące w aplikacji współbieżnej powodujące, że wynik aplikacji w sposób przypadkowy zależy od czasu wykonania pewnych ciągów instrukcji.
7. czy jeśli fork zwraca 0, to jest potomny czy macierzysty
potomny