operating system - systems - ¿Qué es la programación round-robin?
scheduler traduccion (7)
En un contexto de sistema operativo multitarea, a veces escuchas el término programación de turnos rotativos. ¿A que se refiere?
¿Qué otro tipo de programación hay?
Actaully, te estás confundiendo con la programación preventiva y Round Robin. De hecho RR es parte de la programación preventiva.
La programación de Round Robin se basa en el tiempo compartido también conocido como quantum (tiempo máximo dado por la CPU a cualquier proceso de una vez). Hay múltiples procesos (que requieren tiempo diferente para completar el tiempo de ráfaga aka) en una cola y la CPU tiene que procesarlos todos para que siga cambiando entre los procesos para dar a cada proceso el mismo tiempo en función del valor cuántico. Este tipo de programación se conoce como programación Round Robin. Consulte este sencillo video para comprender fácilmente la programación de round robin: https://www.youtube.com/watch?v=9hw-_qJ55K4
Las respuestas aquí e incluso el artículo de Wikipedia describen la programación round-robin para incluir intrínsecamente timecings periódicos. Si bien esto es muy común, creo que la programación de Round-Robin y el tiempo compartido no son exactamente lo mismo. Ciertamente, para que el timelicing tenga sentido, la planificación de round-robin está implícita cuando se rota en cada tarea, sin embargo se puede hacer una planificación round-robin sin tener timescings. 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 tengan la siguiente tarea en la ejecución de rotación. En otras palabras, cuando existen tareas con igual prioridad, los puntos de reprogramación no son preferenciales en el tiempo.
La idea anterior se realiza específicamente en el caso del kernel VxWorks de Wind River. Dentro de su esquema de prioridad, las tareas de cada prioridad se ejecutan por turnos, pero no hacen un ciclo de tiempo sin habilitar específicamente esa función en el kernel. La razón de esta flexibilidad es evitar la sobrecarga de las tareas de división del 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 timeslicing implica la planificación de turnos, la planificación de turnos no requiere un horario de tiempo basado en el mismo tiempo.
Round Robin es un algoritmo de programación simple donde el tiempo se divide de manera uniforme entre trabajos sin prioridad.
Por ejemplo, si tiene 5 procesos en ejecución, se permitirá que cada proceso se ejecute durante 1/5 de una unidad de tiempo antes de que se permita la ejecución de otro proceso. Round Robin suele ser fácil de implementar en un sistema operativo.
Timeslicing es inherente a cualquier sistema de programación round-robin en la práctica, AFAIK.
No estoy de acuerdo con la implicación de InSciTek Jeff de que la siguiente es la programación de turnos rotativos:
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 bloqueo de recursos antes de continuar con 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 tanto de planificación por turnos como preventiva, lo que hace VxWorks si la programación y apropiación de turnos rotativos están habilitados (round-robin está deshabilitado por defecto). La forma de habilitar la planificación por turnos es proporcionar un valor distinto de cero en kernelTimeSlice .
Estoy de acuerdo con esta declaración:
Por lo tanto, mientras que la programación basada en timeslicing implica la planificación de turnos, la planificación de turnos no requiere un horario de tiempo basado en el mismo tiempo.
Tienes razón en que no requiere igual tiempo. La preferencia puede ensuciar con eso. Y, de hecho, en VxWorks, si una tarea se reemplaza durante la planificación de turnos, cuando la tarea vuelve a tener el control se ejecutará durante el resto del tiempo que se haya asignado.
Edición dirigida a InSciTek Jeff (no tengo privilegios de comentario) Sí, me refería a bloqueo de tareas / deshabilitación de interrupciones, aunque obviamente no lo expresé muy bien. Me has adelantado (¡ja!) Con tu segundo comentario. Espero debatir el punto más destacado, que usted cree que la programación de todos contra todos puede existir sin cortar el tiempo. ¿O simplemente te refieres a un tiempo de corte basado en el mismo tiempo? No estoy de acuerdo con el primero, pero estoy de acuerdo con el último. Estoy ansioso por aprender Gracias.
Edit2 dirigido a Jeff:
Round-robin puede existir sin timeslicing. Eso es exactamente lo que sucede en VxWorks cuando kernelTimeSlice está desactivado (cero).
No estoy de acuerdo con esta afirmación. Consulte este documento en la sección 2.2.3 con el encabezado Round-Robin Scheduling.
La programación 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 segmento de tiempo. La programación round-robin se habilita llamando a kernelTimeSlice (), que toma un parámetro para un intervalo de tiempo o intervalo. [...] Si se habilita la planificación por turnos y se habilita la prioridad para la tarea de ejecución, el controlador de ticks del sistema incrementa el recuento de franjas horarias de la tarea.
Timeslicing es inherente a la programación round-robin. De lo contrario, dependerá de una tarea para renunciar al control de la CPU, cuya programación de turnos está destinada a resolver.
Una opinión. Parece que estamos entrelazando dos mecanismos en uno. Asumiendo solo la afirmación original del OP "En un contexto de sistema operativo multitarea", entonces
1 - Un programador round robin siempre programa el siguiente ítem en una cola circular.
2 - Cómo el programador recupera el control para realizar la programación es independiente y no relacionado.
No estoy en desacuerdo con que el método más frecuente para 2 es el time-slicing / yield a la espera de recursos, pero como se ha señalado hay otros. Si no me equivoco, los primeros Mac no utilizaron la segmentación temporal, usaron el rendimiento / rendimiento voluntario a la espera de recursos (a veces, las células cerebrales de más de 20 años pueden estar equivocadas;).
Programación Round Robin
Si usted es un anfitrión en un grupo de 100 invitados, la programación por turnos significa que usted pasará 1 minuto (una cantidad fija) por huésped. Revisa a cada invitado uno por uno, y después de 100 minutos, habría pasado 1 minuto con cada invitado. Más en Wikipedia .
Hay muchos otros tipos de programación, como la basada en prioridad (es decir, la gente más importante primero), primero en llegar, la primera fecha límite (es decir, la persona que sale primero), etc. Puede comenzar buscando en Google para programar algoritmos o verificar la programación en Wikipedia