Dado que el núcleo de cada CPU puede procesar uno o dos subprocesos a la vez, ¿cómo se mantiene estable el sistema operativo incluso si hay varios subprocesos en ejecución?

Dado que el núcleo de cada CPU puede procesar uno o dos subprocesos a la vez, ¿cómo se mantiene estable el sistema operativo incluso si hay varios subprocesos en ejecución?

Para explicar más, supongamos que tenemos una CPU de doble núcleo sin hiperprocesos, eso significa que solo puede procesar 2 subprocesos a la vez, bueno, ahora supongamos que tenemos una aplicación de red que ejecuta dos subprocesos de red en segundo plano, cada uno de los cuales está esperando conexiones entrantes. para manejar, por lo que esos subprocesos deberían estar ejecutándose todo el tiempo, ahora, ¿por qué los procesos y subprocesos del otro sistema operativo siguen funcionando? Según me parece, no se pueden procesar porque hay dos subprocesos que agotan completamente la unidad de procesamiento de la CPU porque están esperando conexiones entrantes de red y, por lo tanto, deberían estar listos cada nanosegundo para las conexiones... ¿Cómo sucede y funciona eso? ¿Cómo la CPU puede manejar muchos y muchos subprocesos a la vez sin que se note ninguna congelación? (Lo sé, a veces Windows se vuelve lento y loco si se ejecutan muchos programas pesados ​​a la vez, pero ese no es un problema general)

Gracias.

Respuesta1

La respuesta es relativamente simple: cuando un subproceso está esperando un evento de E/S, cede el resto de su intervalo de tiempo al sistema operativo, que luego puede programar otro subproceso. Cuando se completa la E/S de alta latencia, el subproceso se marca como listo para su ejecución.

Esto es en gran medida posible porque la mayoría de las E/S se administran con interrupciones en lugar de verificar repetidamente si la solicitud de E/S se ha completado (lo que se conoce como sondeo).

Respuesta2

Si utilizas la multitarea cooperativa y tienes un mal programa: entonces sí, tienes razón.

Sin embargo, en el mundo real se supone que sucede lo siguiente:

  1. Multitarea cooperativa: Pisado no sigue usando la CPU para siempre. En lugar de eso, le dará una oportunidad a otro programa después de un tiempo o cuando esté bloqueado.
    La respuesta de Pablo describe lo último.

  2. Multitarea preventiva (usada en casi todas partes): el sistema operativo (no el programa) le dará la CPU por un corto período de tiempo a un programa y luego se la quitará. Esto puede ser tan simplista como ejecutar un temporizador y una vez que expire, detener el proceso y pasarlo a la siguiente etapa/programa que está en espera.


En su caso, piense en ello como una oficina con dos trabajadores y tres (o más) tareas. (Llamémoslos tarea-A, tarea-B y tarea-C).

El primero trabajado verifica las órdenes de los supervisores que establecen:

  • Configure un cronómetro de 10 minutos. Cuando suene, deje de trabajar en su tarea actual, colóquela al final de la lista TODO y continúe leyendo este documento.
  • Luego elimine el primer elemento de la parte superior de la lista TODO y comience a trabajar en él.
  • Repetir.

El trabajador 1 configura el temporizador y obtiene la primera tarea de la lista TODO (en este caso, la tarea A).

El trabajador 2 hace lo mismo: configura un temporizador y obtiene lo que ahora está en la parte superior de la lista TODO. Dado que el trabajador 1 eliminó la tarea A, el trabajador 2 ahora comienza en la tarea B.

Diez minutos más tarde suena el cronómetro. El trabajador 1 deja de trabajar en la Tarea A y recibe instrucciones de los supervisores. Esos estados colocan la tarea actual al final de la lista TODO. Continuando con las instrucciones del supervisor, ahora reinicia el cronómetro y comienza a trabajar en lo que ahora está en la parte superior de la lista TODO (que es la tarea C).

El trabajador 2 hace lo mismo y detiene la tarea B y comienza con la parte superior de la lista TODO (que en el ejemplo es la tarea A)

Etcétera etcétera..

Esto está algo simplificado. Pero debería darle una idea de cómo dos bandas (trabajadores) pueden trabajar el 100% del tiempo en tres o más tareas.

En los planificadores reales hay muchas más cosas. Por ejemplo, interrupciones (compárelo con un teléfono que suena en medio de una tarea y cómo manejarlo), programación inteligente (darle la misma tarea al mismo trabajador probablemente hará que se haga más rápido ya que el trabajador ya está familiarizado con ella) , E/S (si un trabajador necesita un libro de una biblioteca, no esperará hasta que expire el temporizador, sino que continuará inmediatamente con la siguiente tarea, etc, etc.

Respuesta3

El sistema operativo se mantiene estable prácticamente de la misma manera que se mantiene estable cuando hay varios subprocesos ejecutándose en diferentes CPU. Desde fuera de un núcleo de CPU hay muy poca diferencia aparente en el comportamiento entre dos LP en el mismo núcleo y un LP en cada uno de dos núcleos diferentes. En ambos casos se deben utilizar las mismas técnicas de programación "seguras para multiprocesador", como los semáforos.

información relacionada