• Nie Znaleziono Wyników

SYSTEMY OPERACYJNE

N/A
N/A
Protected

Academic year: 2021

Share "SYSTEMY OPERACYJNE"

Copied!
79
0
0

Pełen tekst

(1)

SYSTEMY OPERACYJNE

dr. hab. Vitaliy Yakovyna

yakovyna@matman.uwm.edu.pl http://wmii.uwm.edu.pl/~yakovyna/

UNIWERSYTET WARMIŃSKO-MAZURSKI W OLSZTYNIE

Wydział Matematyki i Informatyki

(2)

Zarządzanie Procesami

(3)

Procesy.

Koncepcja Procesu

(4)

Proces

• Wczesne komputery pozwalały na wykonanie tylko jednego programu na raz. Ten program miał pełną kontrolę nad systemem i miał dostęp do wszystkich zasobów systemu.

• Natomiast współczesne systemy komputerowe umożliwiają ładowanie wielu programów do pamięci i wykonywanie ich jednocześnie.

• Status bieżącej aktywności procesu jest

reprezentowany przez wartość Licznika Programu i zawartości rejestrów procesora.

(5)

Program != Proces

• Proces to program w trakcie wykonywania. Proces wymaga pewnych zasobów – takich jak czas

procesora, pamięć, pliki i urządzenia we/wy.

• Program jest bierną jednostką, taką jak plik zawierający listę instrukcji przechowywany na dysku.

• Natomiast proces jest aktywną jednostką, z licznikiem programu określającym następną

instrukcję do wykonania i zestawem powiązanych zasobów.

(6)

Układ Procesu w Pamięci

1 Stos

tymczasowe przechowywanie danych podczas

wywoływania funkcji (takich jak parametry funkcji, adresy zwrotne i zmienne lokalne)

2 Sterta

Pamięć przydzielana dynamicznie w czasie wykonywania programu

3 Dane

Zmienne globalne i statyczne 4 Tekst

Kod wykonywalny

(7)

Układ Pamięci Procesu w Języku C.

(8)

Układ Pamięci Procesu w Języku C.

(szczegółowy)

(9)

Stany Procesu

• W trakcie wykonywania proces zmienia stan.

• Stan procesu jest częściowo określony przez bieżącą aktywność tego procesu.

State Description

Nowy Proces jest tworzony

Wykonywany Instrukcje są wykonywane

Oczekujący Proces czeka na wystąpienie jakiegoś zdarzenia (takiego jak zakończenie we/wy lub odbiór sygnału)

Gotowy Proces czeka na przypisanie do procesora Zakończony Proces został zakończony

(10)

Stany Procesu

(11)

Blok Kontrolny Procesu

• Każdy proces jest reprezentowany w systemie operacyjnym przez strukturę danych – blok kontrolny procesu (PCB).

• PCB jest utrzymywany przez cały czas trwania procesu, i jest usuwany po zakończeniu procesu.

• PCB zachowuje wszystkie informacje potrzebne do śledzenia procesu.

• Architektura PCB jest całkowicie zależna od systemu operacyjnego i może zawierać różne informacje w różnych systemach operacyjnych.

(12)

Blok Kontrolny Procesu

Informacja Opis

Stan Procesu Aktualny stan procesu.

Uprawnienia Procesu Wymagane, aby zezwolić / zabronić dostępu do zasobów systemowych.

ID Procesu Niepowtarzalny identyfikator dla każdego procesu w systemie operacyjnym.

Wskaźnik Wskaźnik do procesu macierzystego.

Licznik Programu Licznik programu jest wskaźnikiem do adresu następnej instrukcji, która ma zostać wykonana dla tego procesu.

Rejestry Procesora Różne rejestry procesora, w których proces przechowuje dane do wykonania.

Informacje o Planowaniu Procesora

Priorytet procesu i inne informacje wymagane do planowania procesu.

Informacje o Zarządzaniu Pamięcią

Informacje o tablicy stron, limitach pamięci, tablicy segmentów w zależności od pamięci, używanej przez SO.

Informacje Księgowe Ilość czasu procesora wykorzystanego przez proces, limity czasu, identyfikator wykonania itp.

Informacje o Stanie We/Wy Lista urządzeń we/wy przydzielonych do procesu.

(13)

Uproszczony Schemat PCB

(14)

Wątki

• Pojedynczy wątek sterowania pozwala procesowi wykonywać tylko jedno zadanie na raz.

• Większość nowoczesnych systemów operacyjnych rozszerzyła koncepcję procesu, aby proces mógł mieć wiele wątków wykonania.

• W systemach, które obsługują wątki, PCB jest rozszerzany o informacje dla każdego wątku.

(15)

Przykład: Stany Procesu i Przejścia

Między Nimi w UNIX

(16)

Przykład: Proces Windows NT i

Jego Zasoby

(17)

Procesy.

Planowanie Procesów

(18)

Wprowadzenie i Przegląd

• Celem multiprogramowania jest mieć w każdej chwili uruchomiony jakiś proces w celu maksymalizacji

wykorzystania procesora.

• Celem współdzielenia czasu jest tak częste przełączanie rdzenia procesora między procesami, że użytkownicy mogą współdziałać z każdym programem, gdy jest uruchomiony.

• Aby osiągnąć te cele, planista procesu wybiera

dostępny proces dla wykonania na rdzeniu procesora.

• Każdy rdzeń procesora może uruchamiać jeden proces na raz.

• Liczba procesów obecnych w pamięci jest znana jako stopień multiprogramowania.

(19)

Kolejki Planowania

(20)

Schemat Kolejkowania

(21)

Planowanie Procesora

• Rolą planisty procesora (dyspozytor, CPU scheduler) jest wybranie spośród procesów,

znajdujących się w kolejce gotowych, i przydzielenie rdzenia procesora jednemu z nich.

• Planista CPU jest wykonywany co najmniej raz na 100 milisekund, chociaż zazwyczaj znacznie częściej.

• Niektóre systemy operacyjne mają pośrednią formę planowania, zwaną wymianą (swapping). Wymiana jest zazwyczaj konieczna tylko wtedy, gdy pamięć została nadmiernie obciążona i musi być zwolniona.

(22)

Przełączanie Kontekstu

• Przełączenie rdzenia procesora na inny proces wymaga zachowania stanu bieżącego procesu i

przywrócenia stanu innego procesu. To zadanie jest nazywane przełączaniem kontekstu.

• Kontekst jest przedstawiony w PCB procesu.

Obejmuje wartość rejestrów procesora, stan procesu i informacje dotyczące zarządzania pamięcią.

• Czasy przełączania kontekstu zależą w dużym

stopniu od wsparcia sprzętowego. Typowa prędkość to kilka mikrosekund.

(23)

Przełączanie Kontekstu

(24)

Procesy.

Operacje na Procesach

(25)

Drzewo Procesów w Typowym Systemie Linux

• W systemach UNIX i Linux możemy uzyskać listę procesów za pomocą polecenia ps.

• Linux dostarcza polecenie pstree, które

wyświetla drzewo wszystkich procesów w systemie.

(26)

Tworzenie Procesu

• Większość systemów operacyjnych identyfikuje

procesy według unikalnego identyfikatora procesu (pid), który zazwyczaj jest liczbą całkowitą.

• Gdy proces tworzy proces potomny, ten proces potomny będzie potrzebował pewnych zasobów:

• bezpośrednio z systemu operacyjnego

• podzbiór zasobów procesu macierzystego

• Proces macierzysty może:

• podzielić swoje zasoby między dzieci

• dzielić się zasobami wśród kilku swoich dzieci

(27)

Tworzenie Procesu

• Możliwości wykonania:

• Rodzic kontynuuje wykonywanie jednocześnie z dziećmi

• Rodzic czeka, aż niektóre lub wszystkie jego dzieci zostaną zakończone

• Możliwości przestrzeni adresowej dla nowego procesu:

• Proces potomny jest duplikatem procesu macierzystego (ma ten sam kod i dane co rodzic)

• Proces potomny ma załadowany nowy program

(28)

Tworzenie Procesu. UNIX

• Nowy proces jest tworzony przez wywołanie systemowe fork():

• kod powrotu dla fork() wynosi zero dla nowego (potomnego) procesu

• (niezerowy) identyfikator procesu dziecka jest zwracany rodzicowi

• Nowy proces składa się z kopii przestrzeni adresowej oryginalnego procesu

• Po wywołaniu systemowym fork() jeden proces zwykle używa wywołania systemowego exec() w celu zastąpienia miejsca w pamięci nowym programem

(29)

Tworzenie Procesu. UNIX. Przykład

#include <sys/types.h>

#include <stdio.h>

#include <unistd.h>

int main() { pid_t pid;

pid = fork(); /* fork a child process */

if (pid < 0) { /* error occurred */

fprintf(stderr, "Fork Failed");

return 1;

}

else if (pid == 0) { /* child process */

execlp("/bin/ls","ls",NULL);

}

else { /* parent process */

wait(NULL); /* parent will wait for the child to complete */

printf("Child Complete");

}

return 0;

}

(30)

Tworzenie Procesu. Windows

• Procesy są tworzone w interfejsie API systemu

Windows za pomocą funkcji CreateProcess()

• STARTUPINFO określa wiele właściwości nowego procesu

• Struktura PROCESS INFORMATION zawiera deskryptor i identyfikatory nowo utworzonego procesu i jego wątku

fork() CreateProcess()

tworzy nowy proces potomny tworzy nowy proces potomny proces potomny dziedziczy przestrzeń

adresową swojego rodzica

określony program jest ładowany do przestrzeni adresowej procesu

potomnego podczas tworzenia procesu

brak parametrów 10+ parametrów

(31)

Tworzenie Procesu. Windows.

Przykład

#include <stdio.h>

#include <windows.h>

int main(VOID) {

STARTUPINFO si;

PROCESS INFORMATION pi;

/* allocate memory */

ZeroMemory(&si, sizeof(si));

ZeroMemory(&pi, sizeof(pi));

/* create child process */

(--to be continued--)

(32)

Tworzenie Procesu. Windows.

Przykład (kont.)

if (!CreateProcess(NULL, /* use command line */

"C:∖∖WINDOWS∖∖system32∖∖mspaint.exe", /* command */

NULL, /* don’t inherit process handle */

NULL, /* don’t inherit thread handle */

FALSE, /* disable handle inheritance */

0, /* no creation flags */

NULL, /* use parent’s environment block */

NULL, /* use parent’s existing directory */

&si,

&pi)) {

fprintf(stderr, "Create Process Failed");

return -1;

}

/* parent will wait for the child to complete */

WaitForSingleObject(pi.hProcess, INFINITE);

printf("Child Complete");

/* close handles */

CloseHandle(pi.hProcess);

CloseHandle(pi.hThread);

}

(33)

Zakończenie Procesu

• Proces kończy się, gdy kończy wykonywanie swojej końcowej instrukcji za pomocą wywołania

systemowego exit()

• Proces może zwrócić wartość stanu do oczekującego – poprzez wywołanie systemowe wait() – procesu macierzystego

• Wszystkie zasoby procesu są zwalniane i odzyskiwane przez system operacyjny

• Proces może spowodować zakończenie innego procesu za pomocą odpowiedniego wywołania systemowego (na przykład TerminateProcess() w systemie Windows)

(34)

Zakończenie Procesu

• Systemy Linux i UNIX:

/* exit with status 1 */

exit(1);

• Proces macierzysty może czekać na zakończenie procesu potomnego za pomocą wywołania

systemowego wait()

pid_t pid;

int status;

pid = wait(&status);

(35)

Zakończenie Procesu

• Gdy proces się kończy, jego zasoby są zwalniane przez system operacyjny

• Jednak jego wpis w tabeli procesów musi pozostać tam, dopóki rodzic nie wywoła funkcji wait()

• Proces, który zakończył się, ale którego rodzic jeszcze nie wywołał wait(), jest procesem zombie

• Jeśli rodzic nie wywołał wait() i zamiast tego

zakończył, jego procesy potomne stają się sierotami

• Proces init jest nowym rodzicem dla procesów osieroconych. Okresowo wywołuje wait()

(36)

Procesy.

Komunikacja

Międzyprocesowa

(37)

Procesy Współpracujące

• Niezależny proces – nie udostępnia danych innym procesom wykonywanym w systemie

• Proces współpracujący – może wpływać na inne procesy wykonywane w systemie

• Przyczyny współpracy procesów:

• Wymiana informacji: kilka aplikacji mogą być

zainteresowane tą samą informacją (np. Ctrl-C, Ctrl-V)

• Przyspieszenie obliczeń: podzadania, z których każde będzie wykonywane równolegle z innymi

• Modułowość: dzielenie funkcji systemu na oddzielne procesy lub wątki

(38)

Komunikacja Międzyprocesowa

• Przekazywanie wiadomości (b)

• przydatne do wymiany mniejszych ilości danych

• łatwiejsze do wdrożenia w systemie rozproszonym

• Pamięć współdzielona (a)

• szybsza

(39)

Procesy.

IPC w Systemach Pamięci

Współdzielonej

(40)

IPC Przy Użyciu Pamięci Współdzielonej

• Zazwyczaj region pamięci współdzielonej znajduje się w przestrzeni adresowej procesu tworzącego segment

pamięci współdzielonej. Inne procesy muszą dołączyć go do swojej przestrzeni adresowej.

• Zwykle system operacyjny próbuje uniemożliwić

jednemu procesowi dostęp do pamięci innego procesu.

• Forma danych i lokalizacja są określane przez te procesy i nie podlegają kontroli systemu operacyjnego.

• Procesy są również odpowiedzialne za zapewnienie, że nie zapisują jednocześnie w tej samej lokalizacji.

(41)

Problem Producent-Konsument

• Problem producent-konsument to wspólny paradygmat dla procesów współpracujących.

• Proces producenta wytwarza informacje, które są wykorzystywane przez proces konsumencki.

• Jedno rozwiązanie problemu producent-konsument

wykorzystuje pamięć współdzieloną (bufor elementów, które mogą być wypełnione przez producenta i

opróżnione przez konsumenta).

• Producent i konsument muszą być zsynchronizowani, aby konsument nie próbował konsumować przedmiotu, który nie został jeszcze wyprodukowany.

(42)

Typy Buforów

• Bufor nieograniczony nie stawia praktycznego ograniczenia wielkości bufora. Konsument może czekać na nowe przedmioty, ale producent zawsze może produkować nowe przedmioty.

• Ograniczony bufor zakłada stały rozmiar bufora. W takim przypadku konsument musi czekać, jeśli

bufor jest pusty, a producent musi czekać jeśli bufor jest pełny.

(43)

Ograniczony Bufor

#define BUFFER_SIZE 10 typedef struct {

. . . } item;

item buffer[BUFFER_SIZE];

int in = 0;

int out = 0;

• in – następna wolna pozycja w buforze

• out – pierwsza pełna pozycja w buforze

(44)

Proces Producenta

item next_produced;

while (true) {

/*produkuj przedmiot w next_produced*/

while (((in + 1) % BUFFER_SIZE) ==

out);

/*bufor jest pełny, nic nie rób*/

buffer[in] = next_produced;

in = (in + 1) % BUFFER_SIZE;

}

(45)

Proces Konsumencki

item next_consumed;

while (true) {

while (in == out);

/*bufor jest pusty, nic nie rób*/

next_consumed = buffer[out];

out = (out + 1) % BUFFER_SIZE;

/*konsumuj przedmiot w next_consumed*/

}

(46)

Procesy.

IPC w Systemach

Przekazywania Wiadomości

(47)

Funkcja Przekazywania Wiadomości

• Przekazywanie wiadomości zapewnia mechanizm umożliwiający procesom komunikowanie się i

synchronizację ich działań bez współużytkowania tej samej przestrzeni adresowej

• Jest to szczególnie przydatne w środowisku

rozproszonym, gdzie procesy komunikacyjne mogą znajdować się na różnych komputerach

• Funkcja przekazywania wiadomości zapewnia co najmniej dwie operacje:

• send(message)

• receive(message)

(48)

Łącze Komunikacyjne

• Jeśli procesy P i Q chcą się komunikować, muszą wysyłać i odbierać wiadomości: między nimi musi istnieć łącze komunikacyjne

• Metody logicznego implementowania łącza i operacji send()/receive():

• Komunikacja bezpośrednia lub pośrednia

• Komunikacja synchroniczna lub asynchroniczna

• Automatyczne lub jawne buforowanie

(49)

Nazywanie. Komunikacja Bezpośrednia

• W ramach komunikacji bezpośredniej każdy proces musi jawnie nazywać odbiorcę lub nadawcę

• Adresowanie symetryczne:

• send(P, message) — Wyślij wiadomość do procesu P

• receive(Q, message) — Odbierz wiadomość z procesu Q

• Adresowanie asymetryczne:

• send(P, message) — Wyślij wiadomość do procesu P

• receive(id, message) — Odbierz wiadomość z

dowolnego procesu. Zmienna id jest ustawiana na nazwę procesu, z którym odbyła się komunikacja

(50)

Właściwości Łącza Komunikacyjnego

• Łącze jest ustanawiane automatycznie między

każdą parą procesów, które chcą się komunikować

• Aby móc się komunikować, procesy muszą znać wzajemną tożsamość

• Łącze jest związane z dokładnie dwoma procesami

• Między każdą parą procesów jest dokładnie jedno łącze

(51)

Nazywanie. Komunikacja Pośrednia

• W przypadku komunikacji pośredniej wiadomości są wysyłane i odbierane ze skrzynek pocztowych lub portów

• Proces może komunikować się z innym procesem za pośrednictwem wielu różnych skrzynek pocztowych, ale dwa procesy mogą komunikować się tylko

wtedy, gdy mają wspólną skrzynkę pocztową

• send(A, message) — Wyślij wiadomość do skrzynki pocztowej A

• receive(A, message) — Odbierz wiadomość ze skrzynki pocztowej A

(52)

Właściwości Łącza Komunikacyjnego

• Łącze jest ustanawiane między parą procesów tylko wtedy, gdy obaj członkowie pary mają wspólną

skrzynkę pocztową

• Łącze może być związane z więcej niż dwoma procesami

• Między każdą parą komunikujących się procesów może istnieć wiele różnych łączy, przy czym każde łącze odpowiada jednej skrzynce pocztowej

(53)

Skrzynki Pocztowe

• Skrzynka pocztowa jest własnością procesu:

• właściciel (który może odbierać wiadomości tylko za pośrednictwem tej skrzynki pocztowej)

• użytkownik (który może tylko wysyłać wiadomości do tej skrzynki pocztowej)

• Skrzynka pocztowa, która jest własnością systemu operacyjnego jest niezależna. SO pozwala na:

• Tworzenie nowej skrzynki pocztowej

• Wysyłanie i odbieranie wiadomości za pośrednictwem skrzynki pocztowej

• Usuwanie skrzynki pocztowej

• Uprawnienia własności i odbioru mogą być przekazywane do innych procesów

(54)

Synchronizacja

• Opcje projektowania dla implementacji prymitywów send() i receive():

• Wysyłanie blokujące. Proces wysyłania jest blokowany, dopóki wiadomość nie zostanie odebrana przez proces odbierania lub skrzynkę pocztową.

• Wysyłanie nieblokujące. Proces wysyłania wysyła wiadomość i wznawia działanie.

• Odbieranie blokujące. Odbiornik blokuje się, dopóki wiadomość nie będzie dostępna

• Odbieranie nieblokujące. Odbiornik pobiera poprawny komunikat lub wartość NULL

(55)

Synchronizacja

• Możliwe są różne kombinacje send() i receive()

• Gdy zarówno send(), jak i receive() są

blokujące, mamy spotkanie (rendezvous) między nadawcą a odbiorcą

• Rozwiązanie problemu producent-konsument staje się banalne, gdy używamy blokujących instrukcji send() i receive()

(56)

Buforowanie

• Zero pojemności. Kolejka ma maksymalną długość zero. Nadawca musi zablokować się, aż odbiorca otrzyma wiadomość

• Ograniczona pojemność. Kolejka ma skończoną długość n. Jeśli kolejka nie jest pełna, nadawca może kontynuować wykonywanie bez czekania.

Jeśli łącze jest pełne, nadawca musi zablokować się dopóki nie zwolni się miejsce w kolejce

• Nieograniczona pojemność. Długość kolejki jest potencjalnie nieskończona. Nadawca nigdy się nie blokuje

(57)

Procesy.

Przykłady systemów IPC

(58)

Pamięć Współdzielona POSIX

• Pamięć współdzielona POSIX jest zorganizowana za pomocą plików mapowanych w pamięci, które

wiążą region pamięci współdzielonej z plikiem

• Tworzenie obiektu pamięci współdzielonej:

fd = shm_open(name, O_CREAT | O_RDWR, 0666);

• Konfigurowanie rozmiaru obiektu w bajtach:

ftruncate(fd, 4096);

• Tworzenie pliku mapowanego w pamięci

zawierającego obiekt pamięci współdzielonej :

mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

(59)

Windows

• Aplikacje komunikują się z podsystemami Windows poprzez mechanizm przekazywania komunikatów

• Funkcja przekazywania wiadomości w systemie Windows – zaawansowane lokalne wywołanie procedur (advanced local procedure call, ALPC)

• System Windows używa obiektu portu do

ustanowienia i utrzymania połączenia między dwoma procesami

• Windows używa dwóch typów portów: porty połączeń i porty komunikacyjne

(60)

Zaawansowane Lokalne Wywołanie

Procedur w Systemie Windows

(61)

Techniki Przekazywania Wiadomości

• W przypadku małych wiadomości (do 256 bajtów) kolejka komunikatów portu jest używana jako

pamięć pośrednia, a wiadomości są kopiowane z jednego procesu do drugiego.

• Większe komunikaty muszą być przekazywane przez obiekt sekcji, który jest regionem pamięci

współdzielonej powiązanej z kanałem

• Gdy ilość danych jest zbyt duża, aby zmieścić się w obiekcie sekcji, dostępny jest interfejs API, który umożliwia procesom serwera odczyt i zapisywanie bezpośrednio w przestrzeni adresowej klienta

(62)

Rury

• Rura działa jak przewód umożliwiający komunikację dwóch procesów

• Jeden z pierwszych mechanizmów IPC we wczesnym systemie UNIX

• Kwestie do rozważenia:

• Czy rura umożliwia komunikację dwukierunkową?

• Jeśli dozwolona jest komunikacja dwukierunkowa, czy jest to półdupleks czy pełny dupleks?

• Czy musi istnieć związek (np. rodzic–dziecko) między komunikującymi się procesami?

• Czy rury mogą komunikować się przez sieć, czy procesy

komunikacyjne muszą znajdować się na tej samej maszynie?

(63)

Zwykłe Rury

• Producent zapisuje na jednym końcu rury (koniec zapisu), a konsument czyta z drugiego końca

(koniec odczytu)

• Zwykłe rury są jednokierunkowe

• Jeśli wymagana jest komunikacja dwukierunkowa, należy użyć dwóch rur

• Zwykła rura nie jest dostępna z zewnątrz procesu, który je utworzył (rodzic–dziecko)

• Zwykłe rury mogą być używane tylko do

komunikacji między procesami na tej samej maszynie

(64)

Zwykłe Rury w Systemie UNIX

pipe(int fd[])

• fd[0] – koniec odczytu

• fd[1] – koniec zapisu

• UNIX traktuje rurę jako specjalny typ pliku. Więc dostęp do rur można uzyskać za pomocą zwykłych wywołań systemowych read() i write()

(65)

Zwykłe Rury w Systemie Windows

• Anonimowe rury:

• Są jednokierunkowe

• Stosują relacje rodzic–dziecko między procesami komunikacyjnymi

• Czytanie i zapis do rury: zwykłe funkcje

ReadFile() i WriteFile()

• Funkcja Windows API do tworzenia rur:

CreatePipe(&ReadHandle, &WriteHandle,

&security_attributes, size)

(66)

Nazwane Rury

• Nazwane rury zapewniają znacznie wydajniejsze narzędzie komunikacji

• Komunikacja może być dwukierunkowa

• Nie jest wymagana relacja rodzic–dziecko

• Kilka procesów mogą używać nazwanej rury

• Nazwane rury nadal istnieją po zakończeniu procesów komunikacyjnych

• Oba systemy UNIX i Windows obsługują rury nazwane

(67)

Nazwane Potoki w Systemie UNIX

• FIFO jest tworzone za pomocą wywołania systemowego mkfifo() i manipulowane za pomocą zwykłych

wywołań systemowych open(), read(), write(), i close()

• Będzie nadal istnieć, dopóki nie zostanie jawnie usunięty z systemu plików

• Dwukierunkowa komunikacja półdupleksowa

• Procesy komunikacyjne muszą znajdować się na tej samej maszynie. Komunikacja między maszynami - gniazda

• Mogą być przesyłane tylko dane zorientowane bajtowo

(68)

Nazwane Potoki w Windows

• Dozwolona jest komunikacja w pełnym dupleksie

• Procesy komunikacyjne mogą znajdować się na tych samych lub różnych maszynach

• Dane zorientowane na bajty lub wiadomości

• Utwórz – funkcja CreateNamedPipe(), połącz się z nazwaną rurą – ConnectNamedPipe()

• Komunikacja przez nazwaną rurę – ReadFile() i WriteFile()

(69)

Procesy.

Komunikacja w

Systemach Klient-serwer

(70)

Gniazda

• Gniazdo to punkt końcowy komunikacji

• Para procesów komunikujących się przez sieć

wykorzystuje parę gniazd – po jednym dla każdego procesu

• Wszystkie połączenia składają się z unikalnej pary gniazd

• Gniazdo jest identyfikowane przez adres IP połączony z numerem portu

• Gniazda – niska forma komunikacji; tylko nieustrukturyzowany strumień bajtów

(71)

Komunikacja za Pomocą Gniazd

(72)

Zdalne Wywołanie Procedur

• Metoda komunikacji na wyższym poziomie

• Schemat komunikacji oparty na wiadomościach

• Każda wiadomość jest adresowana do demona RPC nasłuchującego na porcie systemu zdalnego

• Wiadomość zawiera identyfikator określający funkcję do wykonania i parametry, które mają zostać przekazane do tej funkcji

• Dane wyjściowe są wysyłane do wnioskodawcy w oddzielnej wiadomości

(73)

Wykonanie Zdalnego Wywołania

Procedury (RPC)

(74)

Procesy. Streszczenie

(75)

Streszczenie (1)

• Proces jest programem w trakcie wykonywania, a status bieżącej aktywności procesu jest

reprezentowany przez licznik programu, jak również przez inne rejestry.

• Układ procesu w pamięci jest reprezentowany przez cztery różne sekcje: (1) tekst, (2) dane, (3) sterta i (4) stos.

• W trakcie wykonywania proces zmienia stan.

Istnieją cztery ogólne stany procesu: (1) gotowy, (2) wykonywany, (3) oczekujący i (4) zakończony.

(76)

Streszczenie (2)

• Blok kontrolny procesu (PCB) to struktura danych jądra, która reprezentuje proces w systemie

operacyjnym.

• Rolą planisty procesów jest wybór dostępnego procesu do uruchomienia na CPU.

• System operacyjny wykonuje przełączenie

kontekstu, gdy przełącza się z jednego procesu na inny.

• Wywołania systemowe fork() i

CreateProcess() służą do tworzenia procesów odpowiednio w systemach UNIX i Windows.

(77)

Streszczenie (3)

• Gdy pamięć współdzielona jest używana do IPC, dwa (lub więcej) procesy współdzielą ten sam region pamięci.

• Dwa procesy mogą komunikować się za pomocą przekazywania wiadomości.

• Rura zapewnia kanał komunikacyjny dla dwóch procesów. Istnieją dwie formy rur: zwykłe i

nazwane. Zwykłe rury są zaprojektowane do

komunikacji między procesami, które mają relację rodzic-dziecko. Rury nazwane są bardziej ogólne i umożliwiają komunikację kilku procesów.

(78)

Streszczenie (4)

• Systemy UNIX zapewniają zwykłe rury za

pośrednictwem wywołania systemowego pipe().

Zwykłe rury mają koniec odczytu i koniec zapisu.

Nazwane rury w UNIX są nazywane FIFO.

• Systemy Windows zapewniają również dwie formy rur – anonimowe i nazwane. Anonimowe rury są podobne do zwykłych rur UNIX. Są one

jednokierunkowe i wykorzystują relacje rodzic- dziecko między procesami komunikacyjnymi.

Nazwane rury oferują bogatszą formę IPC niż FIFO UNIX.

(79)

Streszczenie (5)

• Dwie powszechne formy komunikacji klient-serwer to gniazda i zdalne wywołania procedur (RPC).

Gniazda umożliwiają komunikację dwóch procesów na różnych maszynach przez sieć. RPC abstrahują koncepcję wywołań funkcji (procedur) w taki

sposób, że można wywołać funkcję w innym

procesie, który może znajdować się na oddzielnym komputerze.

Cytaty

Powiązane dokumenty

Jednostkowe obserwacje geologiczne i rozpro­ szone poglądy na niektóre zagadnienia dotyczące procesów zachodzą­ cych w obrębie przyrody nieożywionej w II połowie

• De beoordeling voor projecten moet helder en transparant zijn. • De nieuwe werkwijze moet adaptief, open en

De basis voor de kostenraming voor de versterking van de primaire waterkeringen in het Deltaplan Grote Rivieren is de IPO/Unie planning van november 1 9 9 4 (brief van de

ten jest tak widoczny, że powstało już pojęcie globalizacji asymetrycznej (jako określenie odnoszące się do nierównomierności manifestowanej przez współ-

Krzysztof Cyrek..

Paweł Valde-Nowak.. Nowa

The choice of small destinations, having considerable natural assets and located within a short distance from the city, satisfies these needs. More men th an

Stąd też przygotowane referaty oraz tryb i spo- sób prezentacji wskazują na pewne konkluzje związane z dalszym działaniem w ob- szarze profilowania kształcenia w WWSI z