Medziprocesorova komunikacia Flashcards
Z akych dovodov posobia procesy na seba?
- neumyselne - vykonavaju sa bez ohladu na ine procesy, sutazia o prostriedky
- nepriamo - vedia o existencii inych procesov, ale nevedia nic viac, napriklad pouzivaju rovnaky subor
- umyselne - spolupracuju, komunikuju
Co je komunikacia medzi procesmi?
Vymena dat
Co je synchronizacia vykonavania procesov?
treba dodrzat poradie vykonania procesov
Co je subeh?
Procesy pristupujúce do spoločnej pamäti sa môžu vykonávať súbežne, respektíve v ľubovoľnom poradí.
Kedy moze nastat prerusenie procesu?
Medzi dvoma instrukciami, pouzitie instrukcie je atomicke
Aky je rozdiel medzi CISC a RISC pri incremente a++?
V CISC je to atomicka operacia inc a, v RISC treba po jednom loadnut, inc a ulozit, teda sa moze preplanovat hocikedy medzi
Ako nazyvame situaciu, ked viacero procesov pristupuje k rovnakej premennej a vysledok zavisi od poradia?
subeh - race condition
Preco race condition?
Procesy sutazia o pristup a vysledok zavisi od toho kto bude prvy
Co je vzajomne vylucovanie?
Aby k spolocnemu prostriedku pristupoval v kazdom case najviac jeden z procesov
Ako sa nazyva usek programu kde sa vykonava pristup k spolocnemu prostriedku?
kriticka oblast
Program v kritickej oblasti smie byt teda vykonavany kolko procesmi?
jednym
Riesenia mut. ex. vieme rozdelit na ..?
cisto programove a hardverove
Ake su hw implementacie mut ex?
zakazanie preruseni, specialne instrukcie a pod
Aka je nevyhoda zakazania prerusenia?
neobsluhuju sa chyby od I/O
v pripade chyby sa zasekne cely system
kedy sa pouziva zakazanie prerusenia?
v jadre na kratke casy
Co je problem ked ma system viac CPU?
zakazanie preruseni na jednom z nich nestaci
Aky je problem pri CISC a viac CPU pri atomickej operacii inc?
subezne moze pristupit k pamati proces na inom procesore
Ake je hw riesenie pri viac CPU?
uzamknutie zbernice signalom lock ako prefix instrukcie
Ake je riesenie “spolocny zamok”?
spolocna premenna lock
enterCS: while(lock); lock = TRUE
leaveCS: lock = FALSE
Aky je problem pre spolocny zamok?
ak bude proces preplanovany tesne po tom co ukonci while a pred tym co nastavi LOCK na true, teda tam vedia vojst oba procesy
Ake je riesenie “striedanie”?
spolocna premenna urcuje kto smie vojst, pred vstupom proces pocka kym bude na rade
enum {P, Q} turn = P;
EnterCS_P() { while(turn != P); }
LeaveCS_P() { turn = Q; }
pre Q rovnako
Preco je zle riesenie “striedanie”?
Vynucujeme striedanie, teda ak jeden treba castejsie, tak to zbytocne spomaluje
Aka je druha podmienka riesenia mut ex?
Proces ktorý sa \vykonáva mimo kritickej oblasti nesmie brániť iným vstúpiť do nej.
Ake je riesenie “zamok pre kazdy proces”?
kazdy proces ma svoju premennu ktora indikuje potrebu vstupit do kritickej oblasti, pred vstupom ju nastavi na true a pocka ak aj druhy bude chciet vojst
inP, inQ = FALSE
EnterCS_P() { inP = TRUE; while(inQ); }
LeaveCS_P() { inP = FALSE; }
Aky je problem riesenia zamok pre kazdy proces?
preplanovanie po nastaveni na true, nastane deadlock a system sa zasekne, nikto to nezmeni na false
Ake je riesenie “prerusenie cakania”?
Kazdy proces ma premennu ktora indikuje vstup do crit. section. Nastavi na 1, ak ale aj druhy ma 1, tak nastavi na 0 a pokus zopakuje, inak break, cele to bezi vo while(1)
Aky je problem riesenia prerusenie cakania?
livelock - navzajom sa uprednostnuju a nikto tam nevstupi, ak sa preplanuju vzdy po nastaveni premennej na true
Ake su 4 podmienky riesenia synch. problemu mut ex?
1) V kritickej oblasti sa smie vykonávať v každom čase najviac jeden proces.
2) Proces ktorý sa vykonáva mimo kritickej oblasti nesmie brániť iným vstúpiť do nej.
3) Rozhodnutie o vstupe musí prísť v konečnom čase.
4) Procesy nemôžu pri vstupe do kritickej oblasti predpokladať nič
o vzájomnom časovaní (plánovaní).
Aké je petersonovo riešenie?
da sa rozsirit aj na N > 2 procesov mame premenne int inP = FALSE, inQ = FALSE; enum {P, Q} last = P; enter je ze inP = TRUE; last = P; while(inQ && last == P);
Ako znacime instrukciu ktora chceme aby sa vykonala atomicky?
«_space;…»_space;
Co je instrukcia TSL?
Test and set lock
nastavi lock na 1 a vrati predosliu hodnotu locku
Co je instrukcia XCHG?
Exchange
vymeni hodnoty parametra a a lock
Co je instrukcia FA?
Fetch and add
prida k hodnote premennej a vrati staru hodnotu
Ako vieme spravit V/V protokol s pouzitim TSL?
int lock = FALSE;
EnterCS() { while (TS(&lock)); }
LeaveCS() { lock = FALSE; }
Co je spinlock?
Zamok implementovany pomocou cakania v tesnej slucke
Co je ticket algoritmus?
Algoritmus pre mut ex N procesov inspirovany systemom cakania na poradie
Kazdy proces dostane ticket, planovac inkrementuje aktualny tiket a ked ma proces svoj tiket tak je na rade
Co je problem ticket alg?
ak zlyha proces tak ostatne cakaju navzdy
Aka je kriticka oblast ticket alg?
Pridelenie tiketu procesu - je tam inkrement takze 2 procesy mozu dostat rovnake cislo
Co je bakery algoritmus?
ako ticket algoritmus, ale nepotrebuje specialnu instrukciu, ak maju 2 rovnake cislo tak sa rozhodne o ich poradi napr podla PID
Aka je zlozitost ticket alg?
O(1)
Aka je zlozitost bakery alg?
O(n)
Co je obsadzujuce cakanie?
Procesor caka v tvare while(lock) - nevykonava ziadnu uzitocnu pracu
Aka je nevyhoda obsadzujuceho cakania navyse v multiprocesorovych systemoch?
zahlcovanie zbernice citanim jednej premennej dokola
Ake je riesenie obsadzujuceho cakania?
Napr signaly a wait
Co je semafor?
Vseobecny synchronizacny mechanizmus, v podstate cele nezaporne cislo
Aka je hlavna vyhoda semaforu?
Odstranuje obsadzujuce cakanie, proces bude v blokovanom stave
Aka je “nevyhoda” semaforu?
Treba podporu priamo od OS
Ake metody su pre semafor?
init - nastavi hodnotu na cislo
wait - ak je hodnota viac ako nula dekrementuje ju inak sa uspi a caka
signal - ak je rad cakajucich neprazdny tak sa vyberie jeden a zobudi sa, inak inkrementuje cislo
Obsahuje aj semafor kriticku oblast?
Ano, napr to inkrementovanie
Co teda potrebujeme pre implementaciu semaforu aby sme sa zbavili kritickej oblasti?
synchronizacny mechanizmus nizsej urovne
Ako vieme implementovat uspanie a zobudenie procesu?
Signalmi
Ake pozname varianty semaforu?
Vseobecny semafor
Binarny semafor - mutex
Ako znie invariant semaforu?
pW - pS <= I kde pW je pocet vykonanych write a pS signal, I je hodnota
Na co vieme vyuzit napr inu hodnotu semaforu ako 1?
Ak R procesov vie vyuzivat prostriedok sucasne tak nastavime na R
Na co nam je semafor s hodnotou 0?
Na synchronizaciu poradia. Cakajuci zavola wait, signal zavola predosly az po vykonani a dany co volal wait teda moze bezat
Co je precedencny graf?
Poradie vykonania procesov
Ake 2 druhy vykonavania pozname?
Sekvencne, paralelne
Na co nam je buffer?
Vyrovnava rozne rychlosti zapisu a citania
Kedy v bufferi potrebujeme synchronizaciu?
ak chce niekto zapisat a je plno, alebo chce citat a je prazdno
Co je kruhovy buffer?
Efektivne znovupouzitie uvolneneho miesta v bufferi
Ako sa da vyriesit problem obedujucich filozofov?
Filozof moze jest len ak jeho sused neje
kazdy filozof ma stav thinking/hungry/eating
pred zacatim jedla caka na semafor ktory indikuje ci su obe vidlicky volne
Co je problem readers/writers?
K spolocnemu prostriedku v pamati ma pristup viac procesov citajucich/zapisujuceho
Co vylucuje pritomnost zapisujuceho procesu?
Vsetky ostatne procesy
Co vylucuje pritomnost citajuceho procesu?
Pritomnost zapisujuceho ale nie dalsich citajucich
Pozri si slide 55 v 3. prednaske na riesenie readers/writers
55 3
Co su podmienene premenne?
Umoznuju procesu ktory zamkol zamok cakat, pricom tento zamok bude pocas cakania uvolneny a ked sa proces zobudi tak bude opat zamknuty
Co je FUTEX?
Fast Userspace Mutex
cakanie na zmenu hodnoty na danej adrese - implementacia zamkov a semaforov
Cim je rychly futex?
Ak je zamok volny, systemove volanie nie je potrebne
Co je FUTEX_WAIT?
Ak sa hodnota na adrese uaddr rovna val volajuci proces sa uspi
Co je FUTEX_WAKE?
Zobudi najviac val procesov cakajucich na adresu uaddr
Ake pozname standardy IPC?
System V a POSIX
Porovnaj System V a POSIX?
System V - starsi, dostupny takmer na kazdom systeme, ale zlozitejsi
POSIX - novsi, threadsafe, jednoduchsie rozhranie, nema ale podporu vsade
Ake systemove volania pre semafory mame v System V?
semget, semop, struct sembuf
Ake systemove volania mame pre semafory v POSIX?
sem_open, sem_close, sem_unlink, sem_init, sem_destroy…
Co robi volanie v System V shmget(key_t key, …)?
Vrati ID noveho alebo existujuceho segmentu zdielanej pamate s danym klucom
Na com je zalozena POSIXova implementacia zdielanej pamate shm_open a shm_unlink?
Na mmap
Ake volania ma System V pre spravy?
msgget, msgsnd, msgrcv…
Ake volania ma POSIX pre spravy?
mq_open, mq_send, mq_receive…
Pri zasielani sprav ake su 2 hlavne funkcie?
send a receive
Zdroj spravy nemusi byt jasny, potom sa oznacuje ___
ANY
Ciel spravy moze zodpovedat viacerym, oznacuje sa potom _____
Broadcast
Komunikacia moze byt ____ alebo ____
Priama - adresa je konkretneho procesu
Nepriama - adresa specifikuje miesto na ktore budu spravy ukladane a z ktoreho budu citane
Cez co komunikuje nepriama komunikacia?
Cez schranky
Kde su uchovane spravy ktore boli odoslane ale neboli este prijate?
v OS
Ako funguje producent-konzument pomocou priamej komunikacie?
Konzument posle producentovi tolko prazdnych sprav kolko moze on sam prijat
Producent ked ma ready spravu, prijme prazdnu a posle data
Ako funguje producent-konzument pomocou schranok?
Obaja si vytvoria schranky pre N sprav, producent posiela do schranok konzumenta, ten posiela prazdne producentovi
Co je blokujuce prijimanie?
Ak operacia prijimania predchadza vyslaniu spravy ktora ma byt prijata, zostane zablokovana
Co je blokujuce vysielanie?
Operacia vysielania zablokuje volajuci proces az kym prijimajuci nezavola zodpovedajucu operaciu receive
Kedy sa vrati neblokujuca operacia?
Hned
Ake su problemy zasielania sprav?
Velkost, konverzia (little endian big endian), poradie, spolahlivost, autentifikacia a pod.
Co je to soket?
Koncovy bod komunikacie, pouziva sa na nom read, write, close
Co je domena soketu?
AF_UNIX, AF_INET, AF_INET6…
Co je typ soketu?
SOCK_DGRAM, SOCK_STREAM…
Akym volanim vieme zviazat soket s lokalnou adresou a portom?
bind
Na strane servera ako vieme prepnut soket na cakanie na spojenia?
listen
ako vieme prijat prichadzajuce spojenie?
accept
Ako prebieha accept?
Caka kym nepride spojenie (zablokovane). Vrati deskriptov na novy socket, z ktoreho vieme citat a zapisovat tam. Povodny soket ostane nezmeneny. Bezne sa po accept robi fork
Akym volanim vie klient nadviazat spojenie so serverom?
connect
Pre datagramy ake volania pouzivame namiesto read a write?
send, recv,…
Ako vieme ukoncit spojenie?
shutdown - citanie a zapis
close - zrusenie soketu
Co robi volanie htonl?
converts the unsigned integer hostlong from host byte order to network byte order
Kde musime robit bind, na akej strane?
iba na serveri, na klientovi netreba
Co je signal?
Asynchronne dorucena informacia o tom ze nastala nejaka udalost, podobaju sa preruseniam
Kto typicky posiela signaly komu?
Jeden proces druhemu
Cim sa rozlisuju signaly?
cislom
Co vykona signal po jeho doruceni?
co ma dany proces nastavene ako handler pre dany signal
Akym volanim zasielam signal?
kill
Ako vie proces alebo vlakno poslat signal sam sebe?
raise
Ako vieme nastavit ake signaly maju byt blokovane?
signal maskou
Ake signaly nemozu byt blokovane?
SIGKILL a SIGSTOP
Co sa stane so signalom ktory je blokovany?
Je pridany do radu signalov cakajucich na oblsuzenie
Moze prist signal aj ked proces vykonava systemove volanie?
Ano ale moze to byt prerusene a nastat chyba alebo sa skusi znova
Ake pozname napr signaly generovane jadrom?
SIGSEGV - segment violation (pristup na zlu adresu) SIGILL - illegal instruction SIGBUS - bus error SIGFPE - floating point exception ...
Ake su zakladne akcie procesu na signal?
terminate ignore core - ukoncenie a vytvorenie suboru s obrazom pamate stop - do stavu T continue
Akym volanim vieme nastavit vlastnu rutinu obsluhy signalu?
sigaction
Aka musi byt obsluzna funkcia signalu?
Reentrantna
Co hovori siginfo_t?
preco ten signal prisiel, teda signal cislo, kod, PID odosielatela a pod
Ako vieme vylistovat zoznam signalov?
kill -l
Na co sa hlavne pouzivaju signaly?
Na synchronizaciu procesov
Co robi funkcia alarm?
volajuci proces dostane signal SIGALRM po uplynuti zadaneho casu
Co robi signal USR1 pre prikaz dd?
Vypise statistiky na stderr a pokracuje
Co robi prikaz HUP pre demon sshd?
Znovu nacita svoj konfiguracny subor
Aka je to blokujuca operacia?
Po zavolani sa nevrati ak nie je ukoncena, napr I/O, disk a pod
Aka je to neblokujuca operacia?
Ak pozadovanu operaciu nie je mozne vykonat, vrati chybovy kod alebo pokracuje dalej
Co sa da spravit s chybnym vykonanim neblokujucej operacie?
mozeme ju zopakovat neskor, ale idealne az ked budu pripravene data
Ake je riesenie blokujucich operacii?
Viacvlaknove procesy, komunikujuce vlakno moze byt blocked kym nepridu data, ostatne mozu pracovat
Ake to su asynchronne operacie?
Ich vykonanie nie je zavisle od vykonania inych operacii
Ake implementacne naroky kladieme na asynchronne operacie?
reentrantnost
Co napr su asynchronne operacie?
obsluzne rutiny vynimiek, signalov a pod
Ako vieme ci je operacia asynchronna?
Zavisi to od sposobu pouzitia, nie od implementacie
Co je to reentrantnost?
funkcia moze byt pocas vykonavania zavolana znova bez ovplyvnenia korektnosti vysledkov, teda moze byt bez nasledkov spustitelna viackrat, v ramci toho isteho kontextu
Co je to thread-safety?
Funkcia moze byt vykonavana subezne viacerymi vlaknami bez ovplyvnenia spravnosti vysledkov, teda v roznych kontextoch
Ako vieme zabezpecit vlastnost thread-safety?
doplnenim synchronizacnych mechanizmov pri pristupe k spolocnym datam
Co treba spravit pre zabezpecenie reentrantnosti?
zmenit implementaciu ale aj rozhranie
Aka poziadavka je silnejsia, reentrantnost alebo thread-safety?
reentrantnost, reentrantnost implikuje thread-safety
Akych je 5 poziadaviek pre reentrantnost?
- neobsahuje globalne nekonstatne data
- nevracia pointer na staticke nekonstantne data
- pracuje len s datami volajuceho
4: neblokuje pristup k jedinecnemu zdroju - nevola ina nereentrantne funkcie
Vieme pouzit v reentrantnej funkcii malloc/free?
Nie
Co je to datovod/pipe?
Jednosmerny kanal medzi 2 procesmi
Ako su reprezentovane konce pipe?
Ako deskriptory suborov
Co spravi volanie pipe()?
Alokuje buffer v jadre a vrati deskriptory
Ako sa zapisuje a cita z datovodov?
write, read
Su datovody pomenovane?
Nie, su anonymne
Ako vieme spravit pomenovany datovod?
mkfifo()
Ako sa pouziva pipe?
Vytvori sa kopia procesu a oba zatvoria jeden pre nich nepotrebny koniec pipe (proces ktory bude citat zatvori pisaci koniec a naopak)
Co znamena signal SIGPIPE?
zapis do datovodu kde nie je otvoreny citaci koniec
Co vrati citanie z pipe so zatvorenym zapisovacim koncom?
EOF
ake cisla ma STDIN,STDOUT, STDERR?
0 - in
1 - out
2 - err
Co robi volanie dup(int old)?
skopiruje dany deskriptor na prvy volny a vrati jeho cislo
co robi volanie dup2(int old, int new)?
skopiruje desc old na new, ak new nebol volny tak ho naprv zatvori
Na co vyuzivame teda dup?
Najprv zavrieme napr stdout, dame dup na nejaky pipe a spravime z pipe stdout