Sistemas operativos modernos
Multiprocesadores NUMA Los multiprocesadores UMA de un solo bus por lo general están limitados a cuando más unas cuantas docenas de CPUs, y los multiprocesadores tipo crossbar o conmutados necesitan una gran cantidad de hardware (costoso) y no son mucho más grandes. Para llegar a más de 100 CPUs, tiene que ceder algo. Por lo regular, lo que cede es la idea de que los módulos de me moria tienen el mismo tiempo de acceso. Esta concesión da pie a la idea de los multiprocesa dores NUMA, como dijimos antes. Al igual que sus parientes UMA, ofrecen un solo espacio de direcciones para todas las CPUs pero, a diferencia de las máquinas UMA, el acceso a los módulos de memoria locales es más rápido que a los remotos. Por tanto, todos los programas UMA se ejecutan sin cambios en las máquinas NUMA, pero el desempeño será más bajo que en una máquina UMA con la misma velocidad de reloj. Las máquinas NUMA tienen tres características esenciales que todas poseen y que en con junto las distinguen de otros multiprocesadores: 1. Hay un solo espacio de direcciones, visible para todas las CPUs. 2. El acceso a la memoria remota es por medio de instrucciones LOAD y STORE. 3. El acceso a la memoria remota es más lento que el acceso a la memoria local. Cuando el tiempo de acceso a la memoria remota no se oculta (porque no se usan cachés), el sistema se conoce como NUMA-NC. Cuando hay cachés coherentes, el sistema se conoce co mo NUMA-CC (NUMA con caché coherente). El enfoque más popular en la actualidad para construir grandes multiprocesadores NUMA- CC es el multiprocesador basado en directorios. La idea consiste en mantener una base de datos que indica dónde está cada línea de caché y cuál es su situación. Cuando se hace referen cia a una línea de caché, se consulta la base de datos para averiguar dónde está y si tiene o no cambios. Puesto que esta base de datos debe consultarse en cada instrucción que hace referen cia a la memoria, es preciso mantenerla en hardware especial extremadamente rápido, capaz de responder en una fracción de un ciclo de bus. Para hacer un poco más concreta la idea de un multiprocesador basado en directorios con sideremos un ejemplo sencillo (e hipotético): un sistema de 256 nodos, cada uno de los cuales consiste en una CPU y 16 MB de RAM conectados a ella por medio de un bus local. La me moria total es 232 bytes, divididos en 2^6 líneas de caché de 64 bytes cada una. La memoria se reparte en forma estática entre los nodos, con 0M-16M en el nodo O, 16M-32M en el nodo 1, y así de manera sucesiva. Los nodos se conectan mediante una red de interconexión, como se muestra en la figura 8 - 6 a. Además, cada nodo contiene las entradas de directorio para las 2 is líneas de caché de 64 bytes que constituyen su memoria de 22-^ bytes. Por el momento, supon dremos que una línea puede mantenerse sólo en un caché. Para ver cómo funcionan los directorios, rastreemos una instrucción LOAD de la CPU 20 que hace referencia a una línea en caché. Primero, la CPU que emite la instrucción la presen ta a su MMU, que la traduce a una dirección física, digamos 0x24000108. La MMU divide es-
RkJQdWJsaXNoZXIy MjI4NDcx