Puedo entender fácilmente cómo el .bss y el código tienen representaciones físicas en el procesador que tiene un banco de memoria para las instrucciones que un contador de programa puede contar y el bss (símbolo de inicio de bloque) es sólo datos globales. Pero luego está la pila para las variables locales y el montón para la memoria dinámica. ¿Cómo se colocan físicamente estas cosas en el circuito?
Respuestas
¿Demasiados anuncios?Nota: Me refiero principalmente a x86 porque estoy más familiarizado con él y está ampliamente documentado:
En x86 (y en la mayoría de las otras arquitecturas) la pila es sólo residente en la memoria como todo lo demás. El procesador manipula la pila a través de un puntero, que normalmente se almacena en un registro (el puntero de la pila). Las instrucciones "push" y "pop" cambian el valor del puntero de la pila, modificando el lugar donde se encuentra la parte superior de la pila.
La pila es una abstracción de software . Como su nombre indica, se trata de un trozo de RAM que un asignador trocea y reparte punteros. En términos físicos, el montón no es diferente a cualquier otra parte de la RAM.
Sin embargo, la paginación y la segmentación están relacionadas tangencialmente con el montón. Tienen que ver sobre todo con la multitarea, donde no se puede permitir que los procesos modifiquen la RAM que no poseen explícitamente.
En términos lógicos, la pila y el montón suelen ser sólo memoria; sin embargo, a nivel de implementación, es de esperar que se sirvan principalmente de la caché. En la mayoría de los sistemas llegan allí dinámicamente a través de algoritmos de caché, pero ha habido sistemas que soportan la ubicación explícita en la caché u otra memoria más rápida de lo habitual, y probablemente también aquellos que soportan dejar pistas de que determinados datos deberían tener prioridad para su colocación allí cuando el espacio lo permita.
Es de esperar que el diseño del software de bajo nivel y de los generadores de código del compilador tenga en cuenta la organización del acceso a los datos, lo que probablemente dará lugar a una buena utilización de la caché, frente a las constantes pérdidas de caché.
Algunos procesadores tienen un registro de dirección de retorno, que funciona como una especie de caché de pila explícita de una profundidad (probablemente también los hay con varias pilas de hardware profundas, aunque no se me ocurren ejemplos).