C - semafori privati vs mutex & condition variables (userspace/kernel) - dubbio
Inviato: venerdì 21 maggio 2010, 19:28
salve,
ho iniziato da poco a studiare la programmazione concorrente, e ovviamente mi son inbattuto in queste primitive.
devo far luce su queste problematiche...
1 - semaforo :
wait : if counter==0, thread rimosso dalla ready e inserito nella blocked queue; else if counter>0 counter--
post : if counter==0, thread rimosso dalla blocked e inserito nella ready queue; else counter++
ma blocked/ready queue sono le code dei processi a livello sistema operativo? oppure sono delle struttura dati (implementate dai semafori) che si occupano di accodarli e di richiamarli quando il contatore diventa a 0?
2 - mutex & condition variables :
quì non ci sono contatori. se un processo deve aspettare finisce in in una blocked queued.
stessa domanda di sopra... è la coda dei processi del sistema operativo o un'altra struttura? poi la logica di come venga risvegliato un processo dentro questa coda, non essendoci contatori, è un altro mistero... (ma ci saran dei costrutti specifici)
3 - semafori livello kernel :
quando un processo livello kernel deve mettersi in attesa, bisogna impostare lo stato su TASK_INTERRUPTIBLE e schedularlo (per una migliore efficenza) : ma perchè si fà questo a livello kernel e a livello userspace non bisogna farlo?
spero si possa far luce... cordiali saluti
ho iniziato da poco a studiare la programmazione concorrente, e ovviamente mi son inbattuto in queste primitive.
devo far luce su queste problematiche...
1 - semaforo :
wait : if counter==0, thread rimosso dalla ready e inserito nella blocked queue; else if counter>0 counter--
post : if counter==0, thread rimosso dalla blocked e inserito nella ready queue; else counter++
ma blocked/ready queue sono le code dei processi a livello sistema operativo? oppure sono delle struttura dati (implementate dai semafori) che si occupano di accodarli e di richiamarli quando il contatore diventa a 0?
2 - mutex & condition variables :
quì non ci sono contatori. se un processo deve aspettare finisce in in una blocked queued.
stessa domanda di sopra... è la coda dei processi del sistema operativo o un'altra struttura? poi la logica di come venga risvegliato un processo dentro questa coda, non essendoci contatori, è un altro mistero... (ma ci saran dei costrutti specifici)
3 - semafori livello kernel :
quando un processo livello kernel deve mettersi in attesa, bisogna impostare lo stato su TASK_INTERRUPTIBLE e schedularlo (per una migliore efficenza) : ma perchè si fà questo a livello kernel e a livello userspace non bisogna farlo?
spero si possa far luce... cordiali saluti