Sistemas operativos modernos
A. Si A vuelve a ejecutarse pronto, podría tener un mejor desempeño si lo hace en la CPU k, por que es posible que el caché de k todavía contenga algunos de los bloques de A. Tener bloques de caché precargados eleva la tasa de aciertos y, por tanto, la rapidez del proceso. Además, puede ser que el TLB contenga las páginas correctas, con lo que se reducirán los fallos correspondientes. Algunos multiprocesadores toman en cuenta este efecto y usan lo que se conoce como ca lendarización por afinidad (Vaswani y Zahorjan, 1991). La idea básica consiste en hacer un esfuerzo serio por lograr que un proceso se ejecute en la misma CPU en que se ejecutó la últi ma vez. Una forma de crear esta afinidad es con un algoritmo de calendarización de dos ni veles. Cuando se crea un proceso, se asigna a una CPU, quizá a la que üene la carga más baja en ese momento. Esta asignación de procesos a CPUs es el nivel superior del algoritmo. El re sultado es que cada CPU adquiere su propia colección de procesos. La calendarización en sí de los procesos es el nivel inferior del algoritmo. Cada CPU la realiza por separado, utilizando prioridades o algún otro mecanismo. Al procurar mantener un proceso en la misma CPU, se logra la afinidad de caché máxima. Sin embargo, si una CPU no tiene procesos que ejecutar, toma uno de otra CPU, en lugar de estar inactiva. La calendarización de dos niveles produce tres beneficios. Primero, distribuye la carga de ma nera más o menos uniforme entre las CPUs disponibles. Segundo, aprovecha la afinidad de caché siempre que es posible. Tercero, al proporcionar a cada CPU su propia lista de procesos listos, re duce al mínimo la competencia por las listas porque no son muy frecuentes los intentos por usar la lista de otra CPU. Espacio compartido El otro enfoque general de la calendarización de multiprocesadores puede usarse cuando los procesos están relacionados entre sí de alguna manera. Ya mencionamos el ejemplo del make paralelo. También es común que un solo proceso cree varios subprocesos que colaboran. Para nuestros fines, un trabajo que consiste en múltiples procesos relacionados y un proceso que consiste en múltiples subprocesos de kemel esencialmente son la misma cosa. Aquí nos refe riremos a las entidades calendarizables como subprocesos, pero el material es válido también para los procesos. La calendarización de múltiples subprocesos al mismo tiempo entre múlti ples CPUs se denomina espacio compartido. El algoritmo de espacio compartido más sencillo funciona como sigue. Supongamos que de repente se crea todo un grupo de subprocesos relacionados. En ese momento, el calendarizador ve si hay tantas CPUs desocupadas como subprocesos. Si las hay, se concederá a cada subpro ceso su propia CPU dedicada (es decir, no multiprogramada) y todos iniciarán. Si no hay sufi cientes CPUs, ninguno de los subprocesos inicia mientras no haya suficientes CPUs disponibles. Cada subproceso retiene su CPU hasta que termina, y en ese momento la CPU se devuelve a la reserva de disponibles. Si un subproceso se bloquea por E/S, seguirá reteniendo la CPU, la cual simplemente estará inactiva hasta que el subproceso despierte. Cuando aparezca el siguiente lo te de subprocesos, se aplicará el mismo algoritmo. En cualquier instante dado, el conjunto de procesadores se divide estáticamente en cierto número de particiones, cada una de las cuales ejecuta los subprocesos de un proceso. En la fi gura 8-13 tenemos particiones con tamaños de 4, 6 , 8 y 12 procesadores, con dos CPUs sin
RkJQdWJsaXNoZXIy MjI4NDcx