7 votos

Tamaño del contador de programa

¿Podemos decir algo sobre el contador de programas mirando el tamaño de un chip de memoria?

Creo que el contador de programa es parte del microprocesador y la memoria es externa. ¿Cómo podemos comentar el contador de programa mirando el tamaño de la memoria?

Por ejemplo, tenía una pregunta en uno de mis exámenes:

Un chip de memoria de 8kB tiene un bus de datos de 4 bits. ¿Cuál será el tamaño del contador de programa?

19 votos

La respuesta correcta es "esta pregunta está mal escrita". En realidad, tu profesor tiene en su mente algunos supuestos no escritos. Se espera que tú hayas asimilado sus suposiciones y llegues a la respuesta que él espera. Es una forma deficiente de hacer las cosas, pero a menudo es así. La pregunta debería ser más del tipo "¿Qué tamaño (número mínimo de bits) necesita el contador de programa para direccionar el código del programa en una memoria de 8kB si el bus de datos de la memoria tiene 4 bits de ancho?". Estoy bastante seguro de que no es sólo que el bus de datos sea de 4 bits, sino que la memoria está organizada en nibbles en lugar de bytes.

0 votos

En las arquitecturas Harvard, el PC sólo necesita preocuparse por el tamaño de la memoria de programa, no por el tamaño del bus de direcciones o de datos. Además, las CPUs con una MMU pueden utilizar configuraciones de memoria virtual que permiten restringir el PC a un determinado tamaño, no necesariamente relacionado con el tamaño de la memoria física. Así que no creo que puedas hacer esta pregunta sobre un "ordenador general".

4 votos

Incluso si reinterpretamos "contador de programa" como "bus de direcciones", es una mala pregunta. Dado que el bus de datos es de 4 bits, uno se pregunta qué significa "8kB". ¿Son 8192 bytes, direccionados en 16384 palabras de 4 bits? O es 8192 bits (en cuyo caso debería haber sido "8 kb" en lugar de "8 kB")? ¿O 8192 palabras de 4 bits cada una?

17voto

RelaXNow Puntos 1164

No se pueden hacer suposiciones sobre el ancho del contador de programa (PC) a partir del ancho de la dirección de memoria.

Históricamente ha habido muchas arquitecturas de memoria diferentes, y sin duda se inventarán otras nuevas. En un nivel muy básico para la máquina más sencilla, el PC contiene la dirección de memoria durante la obtención de instrucciones, por lo que tiene la misma anchura que esa dirección. Sin embargo, hay muchos trucos, incluso en las primeras máquinas, que hacen esto más complicado.

Por ejemplo, las máquinas con memoria virtual pueden direccionar lógicamente más memoria de la que existe físicamente. El PC sería entonces más amplio que el bus de direcciones. En un procesador más moderno que funcione en modo "32 bits", el PC tendría 32 bits de ancho. Sin embargo, eso significa que el PC sólo puede direccionar 4 GB de memoria. Muchas máquinas modernas pueden direccionar más memoria física que eso.

Hay una variedad de esquemas de segmentación. El PC es más limitado, y algún otro registro mantiene los bits de dirección superiores del segmento en el que el PC está operando. Los saltos dentro del mismo segmento funcionan normalmente cargando el PC, pero moverse entre segmentos es más complicado y requiere instrucciones adicionales y similares. La memoria física real puede ser más grande o más pequeña que lo que el PC puede direccionar nativamente.

También hay arquitecturas Harvard y similares en las que no hay un solo espacio de memoria, o en las que no es posible la ejecución desde toda la memoria.

0 votos

El tamaño del PC no limita la memoria máxima que se puede acoplar al sistema, si hay una MMU de por medio. El PDP-11 34a con el que me inicié en la universidad en 1980 tenía un PC de 16 bits, pero tenía un total de 256K de memoria física. Y, en contra de la creencia popular, algunos sistemas operativos de 32 bits de Microsoft pueden utilizar más de 4 GB de memoria. En particular, en el lugar donde trabajé durante el cambio de milenio había un sistema Pentium (conocido como "caballo de batalla", según creo) que ejecutaba Windows 2000 pro de 32 bits y tenía 8 GB de memoria instalada.

0 votos

@dgnuff lo del PAE es un poco restrictivo sin embargo. Ciertamente tiene sentido para servidores, donde tienes muchos procesos "pequeños". Si quieres usar ese Windows 2000 para la computación científica, sigues estando limitado a 4GiB en un solo proceso; utilizar los 8GiB completos allí requerirá una programación innecesariamente complicada.

0 votos

@anrieff Tienes razón al 100%. Lo que pasa es que el trabajo con "workhorse" era desarrollar los drivers de video. Apoyar a PAE para conseguir los 4 bits extra de espacio de direcciones era un verdadero dolor. Y sí, cualquier proceso sólo puede direccionar un máximo total de 4GB en Windows de 32 bits. Sin embargo, hay un caso de uso que no implica un gran número de procesos pequeños: Windows, tanto en la estación de trabajo como en el servidor, utilizará la memoria del chip, que de otro modo no se utilizaría, para la caché del disco. Workhorse era, entre otras cosas, un sistema de servidor bastante grande, por lo que ser capaz de almacenar en caché muchos datos era definitivamente beneficioso.

6voto

user44635 Puntos 4308

La única forma segura de responder a una pregunta como ésta es exponga sus suposiciones y, a continuación, exponer lo que se desprende de ellas.

Por ejemplo

Una memoria de 8kB necesita 13 bits para direccionarla bytewise. Si el PC direcciona bytes, y todo el espacio de memoria de programa direccionable está ocupado por esta memoria de 8k, entonces el PC necesita tener al menos 13 bits de ancho.

Sin embargo, puede que el espacio direccionable sea mayor, o que sea direccionable en nybble, o tal vez sólo en palabras de 16 bits. Todo ello afectaría al tamaño del PC.

3voto

Simen Puntos 191

El contador de programa tiene que ser típicamente lo suficientemente grande para codificar todas las posibles ubicaciones de código, por ejemplo, si tienes 8kB de memoria de programa, eso es 2¹³ bytes direccionables, así que si no se especifica nada más, yo esperaría que el contador de programa tuviera al menos 13 bits de ancho. 16 bits será lo típico, aunque el hardware no necesita implementar los 3 bits superiores, así que puedes tener un registro de contador de programa de 16 bits, donde escribir '1's a los 3 bits superiores sería un no-op, esas escrituras se perderían.

Sin embargo, en la realidad la verdadera respuesta es "es complicado" . Las diferentes arquitecturas han utilizado todo tipo de artimañas (me viene a la mente el acceso a la memoria segmentada del 8086) y es difícil dar una respuesta definitiva.

También hay que tener en cuenta que el hecho de tener 8kB de memoria no significa que toda ella tenga que estar dedicada al código. La mayor parte puede ser de datos. Puede que quieras leer sobre arquitecturas von Neumann vs Harvard .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X