Más sobre el Algoritmo de Peterson

3,598 views

Published on

Ampliación del algoritmo de Peterson para exclusion mutual en n procesos

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,598
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
25
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Más sobre el Algoritmo de Peterson

  1. 1. Más sobre el algoritmo de Peterson Sistemas Operativos 2.0 UNITEC, Campus Tegucigalpa Egdares Futch H. Basado en Windows Operating System Internals - by David A. Solomon and Mark E. Russinovich with Andreas Polze
  2. 2. Solución para 2 procesos (Peterson - 1981) <ul><li>Shared variables of algorithms 1 and 2 - initialization: </li></ul><ul><ul><li>int flag[2]; flag[0] = flag[1] = 0; int turn = 0; </li></ul></ul><ul><li>Thread T i </li></ul><ul><li>do { </li></ul><ul><li>flag[i] = 1; turn = j; while ((flag[j] == 1) && turn == j) ; </li></ul><ul><li>critical section </li></ul><ul><li>flag[i] = 0; </li></ul><ul><li>remainder section </li></ul><ul><li>} while (1); </li></ul><ul><li>Solves the critical-section problem for two threads. </li></ul>
  3. 3. Solución para N procesos (Hofri - 1990) <ul><li>N procesos, T 1 a T N-1 , N niveles/salas de espera: </li></ul><ul><ul><li>int level[n]; int turn[n-1]; // primer proceso=1 </li></ul></ul><ul><li>Thread T i </li></ul><ul><li>do { </li></ul><ul><li>for (k = 1 ; k < n ; k++) { </li></ul><ul><li> level[i] = k; </li></ul><ul><li> turn[k] = i; foreach (t != i) </li></ul><ul><li> if (level[t] >= k && turn[k] == i) ; } level[i] = n; </li></ul><ul><li> critical section </li></ul><ul><li> level[i] = 0; </li></ul><ul><li> remainder section </li></ul><ul><li>} while (1); </li></ul>

×