Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so:cursuri:curs-04 [2015/03/17 22:27]
stefan_gabriel.mirea [Alterare prioritate proces]
so:cursuri:curs-04 [2019/03/09 16:06] (current)
razvan.deaconescu
Line 1: Line 1:
-====== Curs 04 - Planificarea execuției======+====== Curs 04 - Planificarea execuției. IPC ======
  
-<​html>​ +  * [[http://​prezi.com/​7hdjlraoycrn/so-curs-4/?kw=view-7hdjlraoycrn&rc=ref-31844697|Curs 04 - Planificarea execuției (vizualizare Prezi)]] 
-<iframe src="http://​prezi.com/embed/​7hdjlraoycrn/?​bgcolor=ffffff&amp;​lock_to_path=0&​amp;​autoplay=no&​amp;​autohide_ctrls=0&​amp;​features=undefined&​amp;​disabled_features=undefined"​ width="​550"​ height="​400"​ frameBorder="​0"><​/iframe> +  * [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-04.pdf|Curs 04 - Planificarea execuției (PDF)]] 
-</html>+  * [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-04_IPC.pdf|Curs 04 - Comunicarea interprocese (PDF)]] 
 + 
 +  * [[https://​docs.google.com/​document/​d/​1s9mWubSu19r4aCThxlDx7MW7uFu3o2v9tSHuvhnfbME/​edit?​usp=sharing|Notițe de curs]]
  
-  * [[http://​prezi.com/​7hdjlraoycrn/​so-curs-4/?​kw=view-7hdjlraoycrn&​rc=ref-31844697 | Curs 04 - Planificarea execuției (vizualizare Prezi)]] 
-  * [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-04.pdf | Curs 04 - Planificarea execuției (PDF)]] 
  
   * Suport curs   * Suport curs
Line 17: Line 17:
       * Capitolul 2 - Processes and Threads       * Capitolul 2 - Processes and Threads
         * Secțiunea 2.4 - Scheduling         * Secțiunea 2.4 - Scheduling
 +    * Linux System Programming
 +      * Capitolul 9 - Signals ​
 +    * Windows System Programming ​
 +     * Capitolul 11 - Interprocess Communication
 +
 +<​html>​
 +  <​center>​
 +    <iframe src="​https://​prezi.com/​embed/​7hdjlraoycrn/?​bgcolor=ffffff&​amp;​lock_to_path=0&​amp;​autoplay=no&​amp;​autohide_ctrls=0&​amp;​features=undefined&​amp;​disabled_features=undefined"​ width="​550"​ height="​400"​ frameBorder="​0"></​iframe>​
 +  </​center>​
 +</​html>​
 +
 +<​html>​
 +  <​center>​
 +    <iframe src="​https://​docs.google.com/​viewer?​url=http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-04_IPC.pdf&​embedded=true"​ width="​600"​ height="​480"​ style="​border:​ none;">​
 +    </​iframe>​
 +  </​center>​
 +</​html>​
  
 ===== Demo-uri ===== ===== Demo-uri =====
Line 53: Line 70:
 Întrucât nu se mai lucrează cu terminalul aferent ieșirii standard, nu se execută multe operații blocante și nu se tranferă date generate de comandă în fișier. Rezultă direct un număr și mai mic de schimbări de context (atât voluntare cât și nevoluntare) și o durată de execuție mai mică a procesului. Întrucât nu se mai lucrează cu terminalul aferent ieșirii standard, nu se execută multe operații blocante și nu se tranferă date generate de comandă în fișier. Rezultă direct un număr și mai mic de schimbări de context (atât voluntare cât și nevoluntare) și o durată de execuție mai mică a procesului.
  
-==== Alterare ​prioritate proces ====+==== Modificare ​prioritate proces ====
  
 Dorim să analizăm impactul configurării priorității statice (nice) a sistemului. Pentru aceasta vom porni același proces cu diverse valori pentru nice și vom observa durata de rulare. Dorim să analizăm impactul configurării priorității statice (nice) a sistemului. Pentru aceasta vom porni același proces cu diverse valori pentru nice și vom observa durata de rulare.
Line 71: Line 88:
   * 2 procese vor fi subprioritare (''​nice = 19''​).   * 2 procese vor fi subprioritare (''​nice = 19''​).
  
-Pentru fiecare proces, este reținut output-ul într-un fișier. Pentru a afla timpul ​fiecărui proces în fișierul rezultat, folosim comanda:<​code bash>+Pentru fiecare proces, este reținut output-ul într-un fișier. Pentru a afla timpul fiecărui proces în fișierul rezultat, folosim comanda:<​code bash>
 grep -H '​Elapsed'​ pri* grep -H '​Elapsed'​ pri*
 </​code>​ </​code>​
Line 81: Line 98:
 Vrem să vedem cât timp durează pentru un proces să stea în coada READY. Pentru aceasta forțăm trecerea procesului din starea RUNNING în starea READY; ulterior, când va veni rândul său, procesul va fi planificat și va fi trecut din nou în starea RUNNING. Vrem să vedem cât timp durează pentru un proces să stea în coada READY. Pentru aceasta forțăm trecerea procesului din starea RUNNING în starea READY; ulterior, când va veni rândul său, procesul va fi planificat și va fi trecut din nou în starea RUNNING.
  
-Forțarea trecerii procesului din starea RUNNING în starea READY se face cu ajutorul apelului [[http://​man7.org/​linux/​man-pages/​man2/​sched_yield.2.html|sched_yield]]. Acesta ​eliberea ​procesorul curent și trece procesul în starea READY. Dacă nu există alt proces în starea READY, procesul curent va fi replanificat practic instant înapoi pe procesor.+Forțarea trecerii procesului din starea RUNNING în starea READY se face cu ajutorul apelului [[http://​man7.org/​linux/​man-pages/​man2/​sched_yield.2.html|sched_yield]]. Acesta ​eliberează ​procesorul curent și trece procesul în starea READY. Dacă nu există alt proces în starea READY, procesul curent va fi replanificat practic instant înapoi pe procesor.
  
 Intrăm în directorul ''​yield/''​ din arhiva cu demo-uri a cursului și parcurgem fișierele ''​yield.c''​ și ''​run-many''​. Fișierul ''​yield.c''​ execută operații care țin procesorul ocupat apoi apelează ''​sched_yield'';​ în momentul apelării ''​sched_yield''​ procesul este trecut din starea RUNNING în starea READY; în momentul în care procesul revine din ''​sched_yield'',​ a fost replanificat,​ adică retrecut din starea READY în starea RUNNING; se rulează 10 runde. Fișierul ''​run-many''​ este un script care pornește mai multe procese ''​yield'';​ numărul de procese pornite este argumentul primit ca parametru. Intrăm în directorul ''​yield/''​ din arhiva cu demo-uri a cursului și parcurgem fișierele ''​yield.c''​ și ''​run-many''​. Fișierul ''​yield.c''​ execută operații care țin procesorul ocupat apoi apelează ''​sched_yield'';​ în momentul apelării ''​sched_yield''​ procesul este trecut din starea RUNNING în starea READY; în momentul în care procesul revine din ''​sched_yield'',​ a fost replanificat,​ adică retrecut din starea READY în starea RUNNING; se rulează 10 runde. Fișierul ''​run-many''​ este un script care pornește mai multe procese ''​yield'';​ numărul de procese pornite este argumentul primit ca parametru.
Line 88: Line 105:
 make make
 </​code>​ </​code>​
-În urmă compilării obținem executabilul ''​yield''​.+În urma compilării obținem executabilul ''​yield''​.
  
-Ca să pornim mai multe procese din executabil, rulăm pe rând scrptul ​''​run-many''​ cu un număr crescător dat ca parametru:<​code bash>+Ca să pornim mai multe procese din executabil, rulăm pe rând scriptul ​''​run-many''​ cu un număr crescător dat ca parametru:<​code bash>
 ./run-many 1 ./run-many 1
 ./run-many 2 ./run-many 2
Line 98: Line 115:
 </​code>​ </​code>​
  
-Pentru rulările de la început durata apelului ''​sched_yield''​ (adică tranziția RUNNING -> READY și înapoi READY -> RUNNING) este de 1-2 microsecunde. Practic este instantă schimbarea. De la o anumită valoare primită ca argument durata crește semnificativ pentru anumite ​apeluril ​(de ordinul miilor de microsecunde).+Pentru rulările de la început durata apelului ''​sched_yield''​ (adică tranziția RUNNING -> READY și înapoi READY -> RUNNING) este de 1-2 microsecunde. Practic este instantă schimbarea. De la o anumită valoare primită ca argument durata crește semnificativ pentru anumite ​apeluri ​(de ordinul miilor de microsecunde).
  
 Motivul acestei creșteri este atingerea numărului de procesoare/​core-uri ale sistemului. Fiecare core/​procesor are coada proprie READY. Dacă se creează un număr de procese mai mic sau egal cu numărul de procesoare/​core-uri ale sistemului atunci nu există competiție pe procesor; un proces este trecut în starea READY și apoi revine imediat în RUNNING. Motivul acestei creșteri este atingerea numărului de procesoare/​core-uri ale sistemului. Fiecare core/​procesor are coada proprie READY. Dacă se creează un număr de procese mai mic sau egal cu numărul de procesoare/​core-uri ale sistemului atunci nu există competiție pe procesor; un proces este trecut în starea READY și apoi revine imediat în RUNNING.
Line 105: Line 122:
  
 Durata apelului ''​sched_yield''​ este timpul de așteptare al procesului (//waiting time//), timp care se dorește să fie cât mai mic. Durata apelului ''​sched_yield''​ este timpul de așteptare al procesului (//waiting time//), timp care se dorește să fie cât mai mic.
 +
 +==== Folosire pipe-uri ====
 +
 +Dorim să creăm un exemplu simplu de folosire a pipe-urilor anonime pentru comunicare între procese înrudite.
 +
 +Intrăm în directorul ''​pipe/''​ din arhiva cu demo-uri a cursului și parcurgem fișierul ''​pipe.c''​.
so/cursuri/curs-04.1426624061.txt.gz · Last modified: 2015/03/17 22:27 by stefan_gabriel.mirea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0