Universitatea Politehnica din Bucureti Facultatea de Electronic Telecomunicaii
Universitatea “Politehnica” din Bucureşti Facultatea de Electronică, Telecomunicaţii şi Tehnologia Informaţiei Comunicarea interproces în kernel Conducător ştiinţific Dr. Ing. Stefan Stǎncescu Masterand Alexandru Nicolae SAVA 2017
CUPRINS • • Concurenţă în kernel Per-CPU Data Operaţii atomice Spin locks Read/Write Spin Locks Seqlocks Semafoare Concluzii
CONCURENȚA ȊN KERNEL Un sistem de operare executǎ mai multe procese în același timp, gestionȃnd accesul la resursele calculatorului pentru aceste procese și se asigurǎ cǎ niciun proces nu monopolizeazǎ aceste resurse un timp îndelungat. Ȋn sisteme uniprocesor: - kernel nepreemptiv: procesul curent poate fi preemptat de către întreruperi; preemptat de către alte procese; Ȋn sisteme multiprocesor: procesul curent se poate executa în paralel cu un alt proces sau întrerupere ce rulează pe alt procesor;
PER-CPU DATA • Metoda ideală de „sincronizare” • Datele se ţin distribuit, per procesor • Nu avem nevoie de sincronizare • Nu există contention, creşte scalabilitatea • Scade probabilitatea de cache trashing
PER-CPU DATA
OPERAȚII ATOMICE Operaţii cu întregi: • incrementare, decrementare, adunare, scădere Operaţii cu biţi: • test/set/clear/change bit Chiar dacă procesoarele pot rula cod concurrent pe sisteme multiprocesor, memoria este partajată, iar accesul este secvenţial. Operaţiile atomice la nivel de procesor nu mai sunt atomice la nivel de sistem.
OPERAȚII ATOMICE Thread 1 citește i(5) incrementeazǎ i(5→ 6) -----scrie i(6) ----- Thread 2 citește i(5) -----incrementeazǎ i(5→ 6) -----scrie i(6) Thread 1 citește, incrementeazǎ și scrie i(5→ 6) ------ Thread 2 -----citește, incrementeazǎ și scrie i(6→ 7)
SPIN LOCKS • Necesare pe sistemele multiprocesor • Sunt folosite pentru a secvenţializa accesul la zona critică Tehnica de implementare: când un thread al kernel-ului trebuie să acceseze o structură de date partajată sau o regiune critică, acesta trebuie să achiziționeze o "cheie" pentru accesul regiunii critice.
SPIN LOCKS • Cinci căi de executie ale kernel-ului (P 0, P 1, P 2, P 3, P 4) • Două regiuni critice (C 1 și C 2) • P 0 accesează C 1, în timp ce P 2 și P 4 așteaptă să acceseze C 1 • P 0 și P 1 pot rula simultan • Cat timp P 1 este în interiorul C 2, P 3 așteaptǎ sǎ acceseze C 2
READ/WRITE SPIN LOCKS Blocǎrile spin de tip citire/scriere (eng. Read/Write Spin Locks) au fost introduse pentru a crește concurența în interiorul kernel-ului. Acestea permit mai multor căi de execuție ale kernel-ului pentru a citi simultan aceeași structură de date, atâta timp cât nicio cale de execuție a kernel-ului nu modifică datele. • Două regiuni critice (C 1 și C 2), protejate cu încuietori de tip citire/scriere. • R 0 și R 1, citesc structurile de date din regiunea critică C 1, în același timp în care W 0 așteaptă să achiziționeze cheia de blocare pentru scris
SEQLOCKS Seqlocks sunt similare cu încuietorile spin de citire/scriere, cu excepția faptului că acestea dau o prioritate mult mai mare pentru scriitori: de fapt, unui scriitor îi este permis să execute chiar și atunci când cititorii sunt activi. Avantajul acestei strategii este că un scriitor nu așteaptă (cu excepția cazului în alt scriitor este activ). Dezavantajul este acela că un cititor poate fi, uneori, forțat să citească aceleași date de mai multe ori, până când acestea devin o copie validă.
SEMAFOARE • Semaforul are asociat un contor. • Operații pe semafor sunt atomice: • down: - contorul este decrementat, dacă este strict pozitiv altfel, procesul este trecut în BLOCKED • up: - contorul este incrementat - dacă există procese blocate la semafor, sunt trezite • Semafoare binare au două stări: • Locked • Unlocked
SEMAFOARE Rezolvarea problemei producător-consumator folosind semafoare semaphore mutex = 1; semaphore empty = N; semaphore full = 0; void producer(void){ int item; while (TRUE) { item = produce item( ); down(&empty); down(&mutex); insert_item(item); up(&mutex); up(&full); }}
CONCLUZII • Avem nevoie de sincronizare atunci când: • Există concurenţă • „Concurenţii” accesează aceaşi zonă de memorie • Se fac atât accese read cât şi write • Lipsa sincronizării duce la condiţii de concurenţă • Pentru rezolvarea condiţiilor de concurenţă: • atomicizarea zonei critice • dezactivarea preempţiei în zona critică • secvenţializarea accesului la zona critică • metode de sincronizare
Vă mulțumesc pentru atenție!
- Slides: 15