Pregunta

En el contexto de un sistema operativo multitarea, a veces se escucha el término programación por turnos.¿A que se refiere?
¿Qué otro tipo de programación existe?

¿Fue útil?

Solución

Programación por turnos

Si usted es el anfitrión de un grupo de 100 invitados, la programación por turnos significaría que dedicará 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), por orden de llegada, por orden de llegada, por orden de llegada (es decir, por orden de llegada).persona que sale primero primero), etc.Puede comenzar buscando en Google algoritmos de programación o consultar programación en Wikipedia

Otros consejos

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

No estoy de acuerdo con la implicació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 de la rotación.

No veo cómo esto podría considerarse un proceso de todos contra todos.En realidad, se trata de una programación preventiva.Sin embargo, es posible tener un algoritmo de programación que tenga elementos de programación por turnos y preventiva, lo que VxWorks hace si la programación por turnos y la preferencia están habilitadas (la operación por turnos está deshabilitada de forma 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 divisiones de tiempo implica una programación por turnos, la programación por turnos no requiere una división de tiempo basada en el mismo tiempo.

Tienes razón en que no requiere el mismo tiempo.La prevención puede arruinar eso.Y, de hecho, en VxWorks, si una tarea se adelanta durante la programación por turnos, cuando la tarea vuelva a tomar el control, se ejecutará durante el resto del tiempo asignado.

Editar dirigido a Inscitek Jeff (no tengo privilegios de comentarios) Sí, me refería al bloqueo de tareas/deshabilitación, aunque obviamente no lo expresé muy bien.Te adelantaste a mí (¡ja!) con tu segundo comentario.Espero debatir el punto más destacado: que usted cree que la programación por turnos puede existir sin dividir el tiempo.¿O simplemente te refieres a una división de tiempo basada en el mismo tiempo?No estoy de acuerdo con lo primero, pero estoy de acuerdo con lo segundo.Tengo muchas ganas de aprender.Gracias.

Edit2 dirigida a Jeff:

El 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.Ver este documento sección 2.2.3 con el título Programación por turnos.

La programación de Round-Robin utiliza el corte 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 para un intervalo definido o una porción de tiempo.La programación de round-robin se habilita llamando a KernelTimesLice (), que toma un parámetro por una porción de tiempo o intervalo....] Si se habilita la programación de redondeos, y la preferencia está habilitada para la tarea de ejecución, el controlador de tick del sistema incrementa el recuento de ventas de tiempo de la tarea.

La división de tiempos es inherente a la programación por turnos.De lo contrario, dependerá de una tarea para ceder el control de la CPU, lo 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 divisiones de tiempo periódicas.Si bien esto es muy común, creo que la programación por turnos y la división del 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 cada tarea; sin embargo, se puede realizar una 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 alcance 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 se no tiempo preventivo.

La idea anterior en realidad se implementa específicamente en el caso del kernel VxWorks de Wind River.Dentro de su esquema de prioridades, las tareas de cada prioridad se ejecutan por turnos, pero no se dividen en intervalos de tiempo sin habilitar específicamente esa característica en el kernel.La razón de esta flexibilidad es evitar la sobrecarga de 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 divisiones de tiempo implica una programación por turnos, la programación por turnos no requiere una división de tiempo basada en el mismo tiempo.

Una opinión.Parece que estamos entrelazando dos mecanismos en uno solo.Suponiendo solo la afirmación original del OP "En el contexto de un sistema operativo multitarea", entonces

1: un programador por turnos siempre programa el siguiente elemento en una cola circular.

2 - La forma en que el planificador recupera el control para realizar la programación es independiente y no tiene relación.

No estoy en desacuerdo con que el método más frecuente para 2 sea la división de tiempo/rendimiento en espera de recursos, pero como se ha señalado, existen otros.Si no me equivoco, las primeras Mac no utilizaban división de tiempo, utilizaban rendimiento/rendimiento voluntario en espera de recursos (las células cerebrales de más de 20 años pueden estar equivocadas a veces).

Round Robin es un algoritmo de programación simple en el que el tiempo se divide equitativamente entre trabajos sin prioridad.

Por ejemplo, si tiene 5 procesos en ejecución, cada proceso podrá ejecutarse durante 1/5 de la unidad de tiempo antes de que se permita ejecutar otro proceso.La operación por turnos suele ser fácil de implementar en un sistema operativo.

En realidad, se está confundiendo con la programación preventiva y el Round Robin.De hecho, RR es parte de la programación preventiva.

La programación Round Robin se basa en el tiempo compartido, también conocido como cuántico (tiempo máximo otorgado por la CPU a cualquier proceso de una sola vez).Hay múltiples procesos (que requieren diferentes tiempos para completarse, también conocido como tiempo de ráfaga) en una cola y la CPU tiene que procesarlos todos para seguir cambiando entre procesos para darle a cada proceso el mismo tiempo según el valor cuántico.Este tipo de programación se conoce como programación Round Robin.Vea este sencillo vídeo para comprender fácilmente la programación por turnos: https://www.youtube.com/watch?v=9hw-_qJ55K4

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top