Sto eseguendo 2 thread (presumo che siano pthreads per il momento). Thread_1() effettua una chiamata API definita dall'utente che alla fine funziona nel kernel. Thread_2() è totalmente nello spazio utente.È possibile anticipare un thread nel mezzo di una chiamata di sistema al kernel?
La mia domanda è: Can Thread_2() inizia l'esecuzione pre-empting Thread_1() mentre la chiamata API è in corso, il controllo è da qualche parte all'interno del kernel? In caso contrario, perché, e se voglio che questo scenario si verifichi (per qualsiasi motivo), cosa devo fare?
In realtà questo presuppone che il tuo i thread sono gestiti dal kernel. E alcuni kernel possono variare. – Artelius
Puoi chiarire la differenza tra la gestione del kernel e quella non gestita dal kernel? Quali variazioni esistono? – TCSGrad
I thread non gestiti dal kernel sono visti dal kernel come un singolo processo. Il processo internamente (senza supporto del kernel) pianifica i vari thread. Di solito se uno di questi thread si blocca, l'intero processo viene visto come bloccato dal kernel e quindi non viene eseguito alcun thread. Se i thread sono gestiti dal kernel, la maggior parte dei kernel eseguirà altri thread se un thread si blocca. È possibile eseguire un semplice test in cui un thread richiama ripetutamente un syscall e un altro produce ripetutamente. Se il thread di rendimento ottiene un runtime, significa che syscall è un punto di prelazione. – Artelius