Se usa en
los sistemas multiusuario.
Cada usuario tiene asignado algún tipo de ponderación, que indica la parte de los recursos del sistema para el usuario como una fracción de la utilización total de dichos recursos. En particular, cada usuario dispone de una parte del procesador. Este esquema debe funcionar de una forma más o menos lineal, por lo que si un usuario A tiene un peso dos veces mayor que el de un usuario B, entonces, a la larga, el usuario A debe poder hacer el doble de trabajo que B. El objetivo de un planificador por reparto equitativo es supervisar el uso, de forma que se asignen menos recursos a los usuarios que han consumido más de lo que les corresponde y más recursos a los que han consumido menos de lo que le corresponde.
Cada usuario tiene asignado algún tipo de ponderación, que indica la parte de los recursos del sistema para el usuario como una fracción de la utilización total de dichos recursos. En particular, cada usuario dispone de una parte del procesador. Este esquema debe funcionar de una forma más o menos lineal, por lo que si un usuario A tiene un peso dos veces mayor que el de un usuario B, entonces, a la larga, el usuario A debe poder hacer el doble de trabajo que B. El objetivo de un planificador por reparto equitativo es supervisar el uso, de forma que se asignen menos recursos a los usuarios que han consumido más de lo que les corresponde y más recursos a los que han consumido menos de lo que le corresponde.
En un sistema multiusuario, si las aplicaciones o los
trabajos de los usuarios pueden organizarse en forma de varios procesos (o
hilos), se dispone de una estructura para el conjunto de procesos que no se
identifica con ningún planificador tradicional. Desde el punto de vista del
usuario, el interés no está en cómo se comporta un proceso
en particular, sino en cómo se comporta el conjunto de procesos de usuario que
constituyen una aplicación. Así pues, sería interesante poder tomar decisiones
de planificación en función de estos grupos de procesos. Este enfoque se conoce
generalmente como planificación por reparto equitativo.
La
planificación se lleva a cabo por prioridades, teniendo en cuenta la prioridad
básica del proceso, su utilización reciente de la CPU y la utilización reciente
de la CPU por parte del grupo al que pertenece. Cuanto mayor es el
valor numérico de la prioridad, menor es ésta. Las fórmulas siguientes se
aplican al proceso j del grupo k.
CPUj(i) = CPUj(i - 1) / 2
GCPUk(i) = GCPUk(i - 1) / 2
Pj(i) = Basej + CPUj(i - 1) / 2 +
GCPUk(i - 1) / (4 x Wk)
Donde:
CPUj(i)
= Media ponderada de la utilización de la CPU del proceso j en el intervalo i.
GCPUk(i)
= Media ponderada de la utilización de la CPU del grupo k en el intervalo i.
Pj(i)
= Prioridad del proceso j al principio del intervalo i; los valores más bajos
indican prioridades más altas.
Basej
= Prioridad de base del proceso j.
Wk
= Peso asignado al grupo k, con la restricción de 0 <= Wk <= 1 y S Wk =
1.
Cada
proceso tiene asignada una prioridad de base. Esta prioridad desciende a medida
que el proceso y el grupo al que pertenece utilizan la CPU. En el caso de la
utilización del grupo, la media se normaliza dividiendo por el peso del grupo.
Cuanto mayor es el peso asignado al grupo, menos afecta su utilización a la
prioridad.
Implementación
de acciones:
Cada segundo t1: programación a nivel de usuario
para cada usuario
Cada uso y actualización de los costos incurridos en los
últimos segundos t1
Usado por usuario = usageuser × K1 + chargesuser
Restablecer recuento del costo
chargesuser = 0
Cada segundo T2: decaimiento de las prioridades del
proceso
para cada proceso
priorityprocess priorityprocess = K2 × × (niceprocess +
K3)
Cada segundo t3: ajuste de prioridad
prioritycurrent_process
= prioritycurrent_process +
usagecurrent_user ×
active_processescurrent_user acciones 2
current_user
En cada evento de programación: el proceso de selección
actual
chargescurrent_user = costo + chargescurrent_user +
costo del evento
ejecutar el proceso con prioridad más baja
Prioridad
de normalización:
max_priorida = 0
for each process
if
max_priorida <
priorityprocess ≤ priority_bound
then
max_priorida=
priorityprocess
for each process
Scale priority to
appropriate range
if
priorityprocess ≤
max_priorida
then
normalised_priorityprocess
= (K4 − 1) ×
priorityprocess
max_priorida
else
normalised_priorityprocess = K4
Ajustando
grupos:
for each group
(descend hierarchy)
if
actual_machine_proportiongroup
< K6 × machine_proportion_duegroup
entonces
for each user in the
group (descend hierarchy)
chargesuser =
chargesuser ×
actual_machine_proportiongroup K6 × machine_proportion_duegroup
Web
Grafía :
1 comentarios:
Publicar un comentario