Elementele de bază ale programării unix cu fire folosind posix pthreads

copie

1 Fundamentele sistemului de operare Unix cu thread-uri care utilizează POSIX Pthreads Elementele de bază ale Unix OS Slide 1 din 34

2 Astăzi: Ce este multi-threaded fire de programare (fire) Introducere în paralel Programare Prezentare generală a POSIX fire fire de bibliotecă Gestionați secțiunile critice și de sincronizare mutex obiecte mulaje Bazele Unix Slide 2 din 34







dacă ($ this-> show_pages_images $ page_num doc ['images_node_id']) // $ snip = Bibliotecă :: get_smart_snippet ($ text, DocShare_Docs :: CHARS_LIMIT_PAGE_IMAGE_TITLE); $ snips = Bibliotecă :: get_text_chunks ($ text, 4); ?>

Elementele de bază ale programării unix cu fire folosind posix pthreads

Elementele de bază ale programării unix cu fire folosind posix pthreads

5 Compararea proceselor și a firelor de bază Unix OS Basics Slide 5 of 34

6 Contextul unui fir unic Pointerul stivei Regiștrii CPU Parametrii planificatorului (prioritate, politică) Mască de semnal Date specifice de filete Unix OS de bază Slide 6 din 34

7 Total fire există în cadrul procesului de proces și utilizarea resurselor sunt propriul fir de control, cu condiția ca procesul de generare, și suportul sistemului de operare au propriile lor resurse specifice necesare pentru utilizarea Task Scheduler sunt partajate pentru a procesa resursele la sfârșitul procesului tuturor firelor sale termina-l „proces legkoveny“ ca provocând comutator firului și context între firele de execuție ale aceluiași proces, fără a necesita o repornire a tabelelor de pagini și așa mai departe. Fundamentele Unix OS Slide 7 din 34

10 Comparație între furcă și pthread_create

11 Probleme comune de programare paralelă selecție model de programare paralelă paralelizare sarcini de echilibrare a sarcinii pe interacțiunea procesorului Subactivități accesul la date Interdependența Sincronizarea și apariția de „condițiile de rasă“ (condițiile de rasă) pentru a optimiza utilizarea memoriei I Companie / O, complexitatea programului și așa mai departe. Bazele Unix sisteme de operare Slide 11 din 34

Elementele de bază ale programării unix cu fire folosind posix pthreads

12 Executarea filetului paralel Bazele Unix Slide 12 of 34

13 Ce programe sunt potrivite pentru multithreading? Lucrări sau de prelucrare a datelor pot fi efectuate simultan sarcini independente de blocare probabilitate de lungă I / O într-un anumit loc în program, utilizând mai multe cicluri este necesar ca răspuns la evenimente asincrone Unele subactivități au un nivel crescut sisteme de operare bazate pe Unix prioritare Slide 13 din 34

14 Unele modele de multithreading Manager / Worker Conveyor Drepturile Equale Unix OS Basics Slide 14 din 34







Elementele de bază ale programării unix cu fire folosind posix pthreads

15 Modul de memorie partajată Bazele Unix de bază 15 din 34

Elementele de bază ale programării unix cu fire folosind posix pthreads

16 Thread Safe Threads Unix OS Fundamente Slide 16 din 34

17 Pthreads API Nu este gratuit! Distribuite de IEEE, dar incluse în multe distribuții Linux Include grupuri de proceduri pentru gestionarea firelor: generare, comutare, asociere, atribute etc. Mutexuri: gestionarea obiectelor care se exclud reciproc (excluderi reciproce) pentru sincronizarea firului; variabile condiționale: obiecte de interacțiune a firelor în funcție de condiții și semnale convenite de comun acord. Elementele de bază ale Unix OS Slide 17 din 34

Elementele de bază ale programării unix cu fire folosind posix pthreads

18 Acordul titlului API pentru Pthreads Principiile OS Unix Slide 18 of 34

Elementele de bază ale programării unix cu fire folosind posix pthreads

19 Gestionarea firelor de bază Unix OS Basics Slide 19 of 34

20 Finalizarea firului atunci când a reveni în procedura în cazul în care pthread_exit în procedura atunci când apelați pthread_cancel într-un alt fir de la sfârșitul întregului proces Comentarii: dacă principalele cauze pthread_exit, The zavershetsya doar firul principal, în caz contrar întregul proces pthread_exit nu inchide fișierele deschise de bază sistem de operare Unix Slide 20 34

filamente de legare 21 (aderarea) pthread_join acest fir de blocuri până fire după spus în parametri. poate verifica starea de finalizare a filamentului asociat poate fi contactat cu un singur fir, există și alte metode de sincronizare: mutex, și variabile condiție poate fi fire nonbonding (desprinse) Bazele Unix OS Slide 21 din 34

22 fire de management (opțional). ID-ul Subiect și atributele sunt „ascunse“ (opace) obiecte pentru a obține ID-ul firului. pthread_self () pentru a compara două ID: pthread_equal (thread1, thread2) Procedura de inițializare unică: pthread_once (once_control, init_routine) mișcarea firului în coadă Scheduler: pthread_yield () Bazele Unix Slide 22 din 34

23 Obiecte de sincronizare Mutex (excludere reciprocă) Mutexul acționează ca o cheie pentru accesul la o resursă partajată. Dacă încercați să blocați accesul din mai multe fire în același timp, este garantat că numai un fir va avea acces. Variabila condiției controlează accesul la date, în funcție de valoarea acestora. Evită programarea ciclurilor de verificare a condițiilor. Este întotdeauna folosit împreună cu un mutex. Bazele de Unix OS Slide 23 din 34

24 Exemplu de condiție de cursă

25 Lucrul cu mutex-ul pentru a crea și inițializa un mutex de mai multe fire încearcă zahvanit (blocare) mutex doar un masterat mutex fire, altele sunt blocate în așteptare pentru eliberarea sa, proprietarul mutex efectuează „secțiune critică“, proprietarul unui comunicat de mutex mutex un alt fir apucă mutex, etc. Fundamentele În cele din urmă, mutex-ul este distrus de sisteme de operare Unix Slide 25 din 34

26 Lucrul cu declarații variabile condiționată și inițializarea variabilei globale (de ex. Count) Crearea unei condiții variabile de două fire de fir 1, fir 2 în curs de desfășurare, până când este îndeplinită condiția Capturează mutex apel pthread_cond_wait c eliberarea automată mutex printr-un semnal de 2 Trezește și blochează mutex eliberează în mod explicit mutex continua Alăturați-vă / Continuare Rularea Modifică variabila Capturează mutex globale care așteaptă o valoare Prveryaet a variabilei globale și să îndeplinească condițiile de 1 trimite un semnal stăpânit bozhdaet mutex Continuare Elemente fundamentale ale sistemelor de operare Unix Slide 26 din 34

27 Probleme ale planificatorului și firelor de execuție Algoritmul de programare pentru fire poate fi special, dar de cele mai multe ori funcționează obișnuit. API Pthreads oferă funcții care definesc politica planificatorului și prioritățile firului care modifică algoritmul normal. Stiva și datele specifice firului sunt șterse la sfârșitul firului, dar poate fi transferat un alt fir. Există probleme specifice în gestionarea priorităților de fir. Probleme ale interacțiunii firelor de procese diferite. Partajarea variabilelor condiționate cu diferite procese Elementele de bază ale sistemelor de operare Unix Slide 27 of 34







Articole similare

Trimiteți-le prietenilor: