Los chipsets de la placa base y el mapeo de memoria
Voy a escribir algunos posts sobre computadoras con el objetivo de explicar cómo funcionan los modernos núcleos. Espero que sean útiles a los entusiastas y programadores que estén interesados en esta materia, pero no tienen experiencia con ella. Mi enfoque se centra en Linux, Windows y los procesadores de Intel. Las computadoras son un hobby para mí, he escrito un poco de código en modo kernel, pero no lo he hecho desde hace tiempo. Este artículo describe en primer lugar el diseño de las modernas tarjetas madre (placas base) basadas en Intel, como la CPU accede a la memoria y el mapa de memoria del sistema.
Para empezar vamos a echar un vistazo a cómo una computadora Intel está conectada hasta hoy en día. El siguiente diagrama muestra los principales componentes en una placa base:
Diagrama de la placa base moderna. El northbridge y el southbridge conforman el chipset.
Como puedes ver, lo fundamental para tener en cuenta es que la CPU no sabe nada acerca de lo que es conectado. Habla con el mundo exterior a través de sus pines , pero no le importa lo que ese mundo exterior. Podría ser una placa base en un ordenador, pero podría ser una tostadora, un router de red, un implante en el cerebro, o banco de pruebas de CPU. Hay tres formas principales por las que la CPU y el exterior se comunican: espacio de direcciones de memoria, espacio de direcciones de I/O, y las interrupciones. Solo nos preocuparemos de las placas base y la memoria por ahora.
En una placa la puerta de enlace del CPU al mundo está al lado frontal del bus conectado en el northbridge. Cada vez que la CPU necesita leer o escribir en la memoria lo hace a través de este bus. Utiliza algunos pines para transmitir la dirección de memoria física que quiere escribir o leer, mientras que otros pines envian el valor a escribir o recibir el valor que se lee. Un procesador Intel Core 2 QX6600 tiene 33 pines para transmitir la dirección de memoria física (por lo que hay 2^33 opciones de posiciones de memoria) y 64 pines para enviar o recibir datos (así que los datos se transmiten en una ruta de datos de 64-bits, u trozos de 8 bytes). Esto permite a la CPU direccionar físicamente 64 gigabytes de memoria (2^33 localidades * 8 bytes), aunque la mayoría de los chipsets sólo manejan hasta 8 gigas de memoria RAM.
Ahora viene el problema. Estamos acostumbrados a pensar en la memoria sólo en términos de memoria RAM, los programas leen y escriben todo el tiempo. Y de hecho la mayoría de las peticiones de memoria del procesador son enviadas a los módulos de memoria RAM por el northbridge. Pero no todos ellos. Las direcciones de memoria física también se utilizan para la comunicación con una variedad de dispositivos en la placa base (esta comunicación se llama mapeado de memoria E/S ). Estos dispositivos incluyen tarjetas de vídeo, la mayoría de las tarjetas PCI (por ejemplo, un escáner o una tarjeta SCSI), y también la memoria flash que almacena el BIOS.
Cuando el northbridge recibe una petición de memoria física decide dónde rutearla: ¿debe ir a la RAM? ¿a la Tarjeta de vídeo tal vez? Esta ruta se decide a través del mapa de direcciones de memoria. Para cada región de direcciones de memoria física, el mapa de memoria sabe que el dispositivo que posee la región. La mayor parte de las direcciones se asignan a la RAM, pero cuando no están en el mapa de memoria el chipset dice que el dispositivo debe atender las solicitudes de las direcciones. Esta asignación de direcciones de memoria fuera de los módulos de memoria RAM produce el clásico orificio en memoria de la PC entre 640 KB y 1 MB. Un agujero más grande se produce cuando las direcciones de memoria están reservados para las tarjetas de vídeo y los dispositivos PCI. Esta es la razón por la cual los sistemas operativos de 32-bits tienen problemas con 4 gigas de memoria RAM. En Linux el archivo /proc/iomem cuidadosamente lista estos rango de direcciones mapeadas. El siguiente diagrama muestra un mapa de memoria típica de los primeros 4 gigas de direcciones de memoria física en un PC Intel:
Memoria de diseño para los primeros 4 gigabytes en un sistema Intel.
Las direcciones reales y rangos dependen de la placa base y dispositivos en la computadora, pero la mayor parte de los sistemas Core 2 están bastante cerca de lo anterior. Todas las regiones de color marrón se mapean fuera de la RAM. Recuerda que se trata de física direcciones que se utilizan en los buses de la placa base. Dentro de la CPU (por ejemplo, en los programas que ejecuta y escribe), las direcciones de memoria son lógicas y que debe ser traducido por la CPU en una dirección física antes de que la memoria sea accedida en el bus.
Las normas para la traducción de direcciones lógicas en direcciones físicas son complejas y dependen de la modalidad en la que la CPU se está ejecutando (en modo real, modo 32-bits protegido, y modo 64-bits protegido). Independientemente del mecanismo de traducción, el modo de la CPU determina la cantidad de memoria física se puede acceder. Por ejemplo, si la CPU se ejecuta en modo de 32 bits, a continuación, sólo es físicamente capaz de hacer frente a 4 GB (bueno, hay una excepción, la llamada extensión de dirección física, pero lo ignoraremos por ahora). Desde la parte superior de 1 GB o más de las direcciones físicas se asignan a los dispositivos de la placa de la CPU puede utilizar eficazmente sólo ~ 3 GB de RAM (a veces menos – Tengo una máquina con Windows Vista, donde sólo 2,4 GB son utilizables). Si la CPU está en modo real, entonces sólo puede referirse a 1 megabyte de memoria RAM física (esta fue la única forma temprana que los procesadores Intel eran capaces). Por otra parte, una CPU que se ejecuta en modo de 64 bits pueden acceder físicamente a 64 GB (sin embargo pocos chipsets soportan esa cantidad de RAM). En el modo de 64 bits es posible utilizar direcciones físicas por encima de la RAM total del sistema para acceder a las regiones de memoria RAM que corresponden a las direcciones físicas robados por los dispositivos de la placa base. Esto se llama recuperación de la memoria y se hace con la ayuda del chipset.
Esa es todo sobre la memoria que necesitamos para el próximo post, que describe el proceso desde el encendido hasta cuando el gestor de arranque está a punto de saltar al núcleo. Si desea obtener más información sobre esta materia, le recomiendo los manuales de Intel. Estoy muy grandes a las fuentes principales generales, pero los manuales de Intel, en particular, están bien escritos y son precisos. Éstos son algunos:
- Hoja de datos para el chipset Intel G35 documentos representativos de un conjunto de chips Core 2. Esta es la principal fuente para este post.
- Hoja de datos para el procesador Intel Core 2 Quad-Core Q6000 Sequence es una hoja de datos del procesador. Documenta cada pin en el procesador (no hay que muchos en realidad, y después de agruparlos realmente no hay mucho para él). Cosas fascinantes, aunque algunos bits son arcanos.
- Los Manuales para desarrolladores de software Intel son excepcionales. Lejos de arcanos, explican muy bien todo tipo de cosas acerca de la arquitectura. Volúmenes 1 y 3A tienen las cosas buenas (no se deje intimidar por el nombre, el «volumen» son pequeñas y se pueden leer de forma selectiva).
- Pádraig Brady me sugirió enlazar al excelente papel sobre memoria de Drepper Ulrich. Es una gran cosa. Yo estaba esperando enlazarlo en un post acerca de la memoria, pero cuantos más mejor.
Entradas relacionadas