Estoy ejecutando 2 hilos (supongamos que son subprocesos por el momento). Thread_1() hace una llamada API definida por el usuario que finalmente hace algo de trabajo en el kernel. Thread_2() está totalmente en espacio de usuario.¿Se puede anular un subproceso en medio de una llamada al kernel del sistema?
Mi pregunta es: ¿Puede Thread_2() comenzar a ejecutar al anular Thread_1() mientras la llamada API está en progreso, el control está en algún lugar dentro del kernel? De lo contrario, ¿por qué? Y si deseo que ocurra este escenario (por algún motivo), ¿qué debo hacer?
En realidad, esto supone que su los hilos son manejados por kernel. Y algunos granos pueden variar. – Artelius
¿Puede aclarar: la diferencia entre administrado por kernel y no por kernel? ¿Qué variaciones existen? – TCSGrad
Los subprocesos gestionados por kernel son vistos por el kernel como un proceso único. El proceso interno (sin soporte de kernel) programa sus diversos hilos. Por lo general, si uno de estos subprocesos se bloquea, todo el proceso se ve bloqueado por el kernel y, por lo tanto, no se ejecutan subprocesos. Si los hilos son administrados por kernel, la mayoría de los kernels ejecutarán otros hilos si un hilo se bloquea. Puede ejecutar una prueba simple donde un hilo llama a un syscall repetidamente y otro produce repetidamente. Si el hilo de rendimiento obtiene algún tiempo de ejecución, significa que el syscall es un punto de preferencia. – Artelius