Si un CPU a un bus d'adresse 16 bits et des mots 8 bits, combien de mémoire peut-il adresser?

23

J'étudie pour un examen de fin de semestre et je suis confus avec la question suivante. Si un processeur possède un bus d'adresse 16 bits et des mots de 8 bits, combien de mémoire en Ko peut-il traiter? Ma compréhension me dirait qu'il peut traiter 64 Ko, mais pour ce faire, je viens d'utiliser 2 ^ 16 = 65 536. Ce calcul n'a jamais réellement pris en compte les mots de 8 bits, donc je ne suis pas sûr qu'il soit correct. Que signifient également les mots 8 bits?

À votre santé

eZ_Harry
la source
16
Vous l'avez utilisé indirectement: la quantité totale de mémoire adressable est de 2 ^ 16 * 8 bits. Comme un octet = 8 bits, cela fait 2 ^ 16 octets, soit 65536 octets, soit 64 Ko. Notez que K est le préfixe SI pour 1000. Si vous voulez dire 1024, utilisez Ki.
jcaron
2
Faites attention à la différence entre les kilo-octets du préfixe SI (1 000 octets) et les kibio-octets du préfixe binaire (1 024 octets). 2 ^ 16 = 65,536 = 64 kibi ~ 65,5 kilo. La réponse recherchée est probablement celle où le kilo signifie kibi, mais il y a des moments où la différence est vraiment importante. Si vous voulez être absolument certain, prenez la route sûre et spécifiez le nombre d' octets , et proposez la traduction en unités plus pratiques telles que les kilo-octets ou les kibio-octets pour votre professeur. Comparez Wikipédia: préfixe binaire . Les puces mémoire spécifient généralement par exemple 65 536 x 8 bits.
un CVn
3
Je suppose que vous n'assumez aucun échange de banque. La plupart des processeurs 16 bits utilisent une forme d'échange de banque qui rend la réponse très difficile.
Joshua
1
@ MichaelKjörling La question dit KB qui a toujours signifié 1024 octets.
kasperd

Réponses:

38

Un mot, dans les architectures majoritaires, est le plus gros morceau de données qui peut être transféré vers et depuis la mémoire de travail en une seule opération.

La plus grande taille d'adresse possible, utilisée pour désigner un emplacement en mémoire, est généralement appelée mot matériel.

Ainsi, votre CPU pourra adresser 64 Ko (2 ^ 16) mais ne pourra transférer en une seule opération 8 bits.

Surment
la source
3
Je suis sûr que cette réponse est celle que le professeur recherche, mais est-elle en fait correcte? Ne pourriez-vous pas utiliser quelque chose comme PAE pour autoriser une hiérarchie à 3 niveaux (ou même plus) pour permettre aux CPU d'accéder à plus de 64 Ko? Je ne suis pas un expert en matériel, mais le Commodore 128 n'a-t-il même pas réussi à faire quelque chose comme ça sur un mot de 8 bits, un bus de 16 bits en permettant la commutation des banques de RAM?
davidgo
5
Pas tout à fait sûr que je comprends votre phrase "ne pourra transférer en une seule opération est 256B (2 ^ 8)"? Il ne peut transférer qu'un seul mot = 1 octet = 8 bits en une seule opération.
jcaron
8
@davidgo toujours PAE nécessite que le bus d'adresse soit dimensionné de manière appropriée. Les processeurs Intel prenant en charge PAE ont un bus d'adresse de 36 bits.
Dmitry Grigoryev
6
PAE est plus ou moins un nom de marque / fonctionnalité spécifique aux processeurs x86 modernes. Oui, des schémas pour adresser indirectement de plus grandes quantités de mémoire ont été mis en œuvre depuis des siècles (par exemple XMS), ceux-ci finissent par traiter le sous-système de mémoire comme un périphérique qui peut être reconfiguré en permanence pour exposer une mémoire différente dans un espace d'adressage plus petit. Voir également le modèle de mémoire segmentée de la vieille école x86 ...
rackandboneman
6
@Overmind, vous devriez clarifier un peu votre réponse. Personne n'utilise vraiment un seul B comme unité et la raison est exactement ce qui s'est passé ici - vous confondez les bits et les octets. L'OP indique "mots de 8 bits * - chaque mot a donc 8 bits (1 octet) et ne peut le transférer qu'en une seule opération. 256 est simplement le nombre de valeurs possibles de chaque mot, pas combien il est transféré.
adelphus
21

Un mot machine, ou généralement juste un mot, est la plus grande unité de données que le CPU peut manipuler dans son ensemble à l'aide d'instructions communes. Cela n'a rien à voir avec l'adressage mémoire.

Ce qui importe, c'est l' unité de résolution d'adresse , qui est généralement un octet de 8 bits, même sur les architectures 16/32/64 bits. Il ne doit pas nécessairement être égal à la taille du mot machine, mais c'est probablement dans votre cas.

Une unité adressable 8 bits combinée à un bus d'adresse 16 bits représente 64 Ko de RAM que le processeur peut traiter.

Dmitry Grigoryev
la source
3
Mais j'ai utilisé des machines où l'unité de résolution d'adresse était de 16 bits. (Le concept est donc significatif.)
Martin Bonner soutient Monica le
4
@MartinBonner Néanmoins, il n'est pas directement lié à la taille du mot CPU.
glglgl
1
@glglgl - C'est très lié. Je ne crois pas qu'il y ait des architectures qui ne disposent pas d' une unité d'adresse soit 8 bits ou la taille de leur mot.
Jules
1
Je ne suis pas d'accord avec l'affirmation selon laquelle un mot est la plus grande unité que le CPU peut manipuler dans son ensemble. L'Intel i7 possède un bus de données 64 bits et peut toujours utiliser des instructions SIMD 256 bits. Si Wikipedia est correct, le mot fait référence à la largeur du bus de données et non aux éléments internes du processeur.
Thomas Weller
1
@ThomasWeller: 8088 a un bus de données 8 bits, mais toujours des instructions 16 bits. En fait, c'est un 8086 avec un bus de données plus petit. Remarque: la largeur du bus de données et le transfert réel sont également différents (pensez aux données mal alignées).
Giacomo Catenazzi
1

Que signifient également les mots 8 bits?

Dans le contexte, la taille du mot va de pair avec la taille de l'adresse pour décrire le bus mémoire. Il y a 16 bits qui sortent de la mémoire pour qu'il puisse choisir les emplacements 64ki. Ensuite, chaque emplacement contient 8 bits.

La taille de mot ici peut correspondre ou non à la taille de l'unité de calcul CPU, et cela peut ou non correspondre à la granularité logique de l'adressage.

Par exemple, une CPU peut annoncer un bus 16 bits (à cet effet). Il utilise des adresses 16 bits dans ses instructions, et comme votre exemple a 64ki. Mais il a 15 bits de bus d'adresses et 16 bits de bus de données. Il n'a besoin que de 32 adresses kki et obtient toujours 2 octets à chaque emplacement. (Si une instruction voulait 1 octet, elle distribuerait l'adresse avec le moins de bits manquants, récupérerait les deux octets à cette étape, puis examinerait le moindre bit de l'adresse souhaitée pour décider quelle moitié utiliser.)

Notez que le changement de banque, le PAE, etc. mentionnés par d'autres ne sont pas pertinents ici. Une unité de gestion de la mémoire peut utiliser des adresses 16 bits et avoir une adresse matérielle 20 bits, de sorte que le processeur doit commuter et mapper les choses pour utiliser la plage d'adresses réelle de 20 bits des puces RAM qui peuvent être adressées.

Assurez-vous de spécifier des unités dans vos réponses. "64ki". De quoi? Mots 8 bits, ce qui en fait (encore) 64ki octets de RAM adressable. Cette étape élimine la confusion et rend les problèmes comme celui-ci triviaux.

JDługosz
la source
0

Vous devez également utiliser la taille des mots dans les calculs. La réponse est de 64 Ko.

Vous pouvez adresser 2 ^ 16 mots et chaque mot est de 8 bits (= 1 octet). Il s'agit donc de 64 Ko.

Si la taille du mot était de 16 bits. La réponse serait de 128 Ko.

Nuri Tasdemir
la source
1
Votre calcul ne tient pas pour les CPU 32 bits courants qui peuvent toujours adresser 2 ^ 32 octets de mémoire (4 Go), pas (2 ^ 32) * 4 (16 Go).
Dmitry Grigoryev
Les processeurs modernes adressent des «lignes» plus grandes et ont moins de lignes d'adresse à faire correspondre. La question parle de l' adresse et du côté physique des choses. Donc, multiplier par la taille du mot de ce bus (pas la taille du registre CPU) est correct.
JDługosz
0

Il y a deux côtés à cela, ce que votre instructeur veut probablement que vous lui disiez et quelle est la réalité.

D'abord ce que votre instructeur veut probablement que vous lui disiez.

"16 bits peuvent adresser 2 ^ 16 emplacements de mémoire, chaque emplacement est de 8 bits. Nous pouvons donc adresser une mémoire de 524288 bits (65536 octets)."

Cela reflète cependant une vision du monde assez simplifiée. La réalité est plus compliquée et donner une réponse définitive nécessite plus d'informations. Certaines des façons dont les systèmes réels peuvent être plus compliqués que cela incluent.

  • De nombreux processeurs n'ont pas de carte d'E / S dédiée, il peut donc être nécessaire d'utiliser des parties de l'espace d'adressage mémoire pour autre chose que de la mémoire.
  • La "taille de mot" du processeur n'est pas essentiellement la même que la largeur du bus de données de mémoire ou la plus petite unité de mémoire adressable.
  • Certains bus permettent le déplacement d'unités de données de taille variable. Cela nécessite un adressage supplémentaire qui peut ou non être traité par des bits du bus d'adresse principal.
  • Certains bus multiplexent différents signaux sur les mêmes lignes. Par exemple, la SDRAM utilise deux fois les mêmes lignes d'adresse pour envoyer une "adresse de ligne" et une "adresse de colonne".
  • De nombreux systèmes ont utilisé des approches de changement de banque pour permettre aux programmes d'accéder à plus de mémoire que le processeur ne pourrait en natif.
plugwash
la source