Saltar al contenido

¿Qué es la programación por turnos?

Al fin después de mucho batallar hemos encontrado la contestación de esta impedimento que algunos de nuestros lectores de nuestro sitio tienen. Si quieres aportar algún detalle no dejes de compartir tu conocimiento.

Solución:

Programación por turnos

Si es el anfitrión de un grupo de 100 invitados, la programación por turnos significa que dedica 1 minuto (una cantidad fija) por invitado. Revisas a cada invitado uno por uno, y después de 100 minutos, habrías pasado 1 minuto con cada invitado. Más en Wikipedia.

Hay muchos otros tipos de programación, como la basada en prioridades (es decir, las personas más importantes primero), el orden de llegada, la fecha límite más temprana (es decir, la persona que se va primero), etc. Puede comenzar buscando en Google para programar algoritmos o consulte la programación en Wikipedia

La división de tiempo es inherente a cualquier sistema de programación de turnos en la práctica, AFAIK.

No estoy de acuerdo con la insinuación de InSciTek Jeff de que lo siguiente es programación por turnos:

Es decir, se puede permitir que cada tarea con la misma prioridad en la rotación por turnos se ejecute hasta que alcance una condición de bloqueo de recursos antes de pasar a la siguiente tarea en la rotación.

No veo cómo esto podría considerarse round-robin. Esto es en realidad una programación preventiva. Sin embargo, es posible tener un algoritmo de programación que tenga elementos de programación rotativa y preventiva, lo que hace VxWorks si la programación rotatoria y la preferencia están habilitadas (la rotación rotativa está desactivada de manera predeterminada). La forma de habilitar la programación por turnos es proporcionar un valor distinto de cero en kernelTimeSlice.

Estoy de acuerdo con esta afirmación:

Por lo tanto, mientras que la programación basada en la división de tiempo implica la programación por turnos, la programación por turnos no requiere la misma división de tiempo basada en el tiempo.

Tienes razón en que no requiere el mismo tiempo. La preferencia puede ensuciar eso. Y, de hecho, en VxWorks, si se reemplaza una tarea durante la programación por turnos, cuando la tarea vuelve a tener el control, se ejecutará durante el resto del tiempo que se le asignó.

Edición dirigida a InSciTek Jeff (no tengo privilegios para comentar) Sí, me refería al bloqueo de tareas/desactivación de interrupciones, aunque obviamente no lo expresé muy bien. Me adelantaste (¡ja!) con tu segundo comentario. Espero debatir el punto más destacado, que usted cree que la programación por turnos puede existir sin división de tiempo. ¿O simplemente te refieres a la división de tiempo basada en el tiempo igual? No estoy de acuerdo con lo primero, pero estoy de acuerdo con lo segundo. Tengo muchas ganas de aprender. Gracias.

Edit2 dirigido a Jeff:

Round-robin puede existir sin división de tiempo. Eso es exactamente lo que sucede en VxWorks cuando kernelTimeSlice está deshabilitado (cero).

No estoy de acuerdo con esta afirmación. Consulte la sección 2.2.3 de este documento con el título Programación por turnos.

La programación por turnos utiliza fracciones de tiempo para lograr una asignación justa de la CPU a todas las tareas con la misma prioridad. Cada tarea, en un grupo de tareas con la misma prioridad, se ejecuta durante un intervalo o segmento de tiempo definido. La programación por turnos se habilita llamando a kernelTimeSlice(), que toma un parámetro para un segmento de tiempo o intervalo. […] Si la programación por turnos está habilitada y la preferencia está habilitada para la tarea en ejecución, el controlador de ticks del sistema incrementa el conteo de intervalos de tiempo de la tarea.

La división de tiempo es inherente a la programación por turnos. De lo contrario, confía en una tarea para ceder el control de la CPU, que la programación por turnos pretende resolver.

Las respuestas aquí e incluso el artículo de Wikipedia describen la programación por turnos para incluir inherentemente la división de tiempo periódica. Si bien esto es muy común, creo que la programación por turnos y el intervalo de tiempo son no exactamente lo mismo. Ciertamente, para que la división de tiempo tenga sentido, la programación por turnos está implícita al rotar a cada tarea, sin embargo, puede hacer la programación por turnos sin tener división de tiempo. Es decir, se puede permitir que cada tarea con la misma prioridad en la rotación por turnos se ejecute hasta que alcancen una condición de bloque de recursos y solo entonces se ejecute la siguiente tarea en la rotación. En otras palabras, cuando existen tareas de igual prioridad, los puntos de reprogramación son no tiempo preventivo.

La idea anterior se realiza específicamente en el caso del núcleo VxWorks de Wind River. Dentro de su esquema de prioridad, las tareas de cada prioridad se ejecutan por turnos, pero no en intervalos de tiempo sin habilitar específicamente esa función en el núcleo. El motivo de esta flexibilidad es evitar la sobrecarga de las tareas de división de tiempo que ya se sabe que se ejecutan en un bloque dentro de un tiempo bien delimitado.

Por lo tanto, mientras que la programación basada en la división de tiempo implica la programación por turnos, la programación por turnos no requiere la misma división de tiempo basada en el tiempo.

Reseñas y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *