Que sont les architectures 16, 32 et 64 bits?

que signifient les architectures 16 bits, 32 bits et 64 bits dans le cas de microprocesseurs et/ou de systèmes D'exploitation?

dans le cas des microprocesseurs, est-ce que cela signifie une taille maximale de General Purpose Register s ou taille de Integer ou <!-S ou nombre de Data Bus lines ou quoi?

Qu'entendons-nous par "DOS is a 16-bit OS","Windows in a 32-bit OS", etc...?

23
demandé sur anonymous 2010-08-29 14:40:54

7 réponses

Ma réponse est ci-dessous, si vous voulez comprendre les commentaires.

Nouvelle Réponse

Comme vous le dites, il existe une variété de mesures. Heureusement pour de nombreux CPU, beaucoup de mesures sont les mêmes, il n'y a donc pas de confusion. Regardons quelques données (désolé pour le téléchargement d'image, Je ne pouvais pas voir une bonne façon de faire une table dans markdown). Table data

Comme vous pouvez le voir, beaucoup de colonnes sont de bons candidats. Cependant, je dirais que la taille de l'objet général les registres (en vert) sont la réponse la plus couramment comprise.

Lorsqu'un processeur est de taille très variable pour différents registres, il sera souvent décrit plus en détail, par exemple le Motorola 68k décrit comme une puce de 16/32 bits.

D'autres ont fait valoir que c'est la largeur du bus d'instruction (jaune) qui correspond aussi dans le tableau. Cependant, dans le monde d'aujourd'hui de pipelinier je dirais que c'est une mesure beaucoup moins pertinente pour la plupart des applications que la taille de les registres à usage général.


réponse originale

différentes personnes peuvent signifier différentes choses, parce que comme vous dites Il ya plusieurs mesures. Par exemple, quelqu'un qui parle d'adressage de mémoire pourrait signifier quelque chose de différent de quelqu'un qui parle d'arithmétique entière. Cependant, je vais essayer de définir ce que je pense est la compréhension commune.

mon avis est que pour un CPU cela signifie "la taille du registre typique utilisé pour standard les opérations" ou "la taille du bus de données" (les deux sont normalement équivalent).

je justifie cela par la logique suivante. Z80 possède un accumulateur 8 bits et une base de données 8 bits, tout en ayant des registres d'adressage mémoire de 16 bits (IX, IY, SP, PC), et un bus d'adresse mémoire de 16 bits. Et le Z80 s'appelle un microprocesseur 8 bits. Cela signifie que les gens doivent normalement signifier la taille arithmétique de l'entier principal, ou la taille de la base de données, pas la taille d'adressage de la mémoire.

ce n'est pas la taille des instructions, comme le Z80 (encore) avait 1,2 et 3 instructions octet, bien que bien sûr le multi-octet ont été lus en plusieurs lectures. Dans l'autre sens, le 8086 est un microprocesseur de 16 bits et peut lire des instructions de 8 ou 16 bits. Donc je devrais être en désaccord avec les réponses qui disent que c'est la taille de l'instruction.

pour les systèmes D'exploitation, je le définirais comme "le code est compilé pour fonctionner sur un CPU de cette taille", donc un OS 32bit a du code compilé pour fonctionner sur un bit 32 CPU (selon la définition ci-dessus).

16
répondu Nick Fortescue 2010-08-31 09:39:42

combien de bits un CPU "est", signifie ce qu'est la longueur de mot d'instruction. Sur un CPU 32 bits, le mot longueur d'une telle instruction est 32 bits, ce qui signifie que c'est la largeur qu'un CPU peut traiter comme des instructions ou des données, résultant souvent en une ligne de bus avec cette largeur. Pour une raison similaire, les registres ont la taille du mot longueur du CPU, mais vous avez souvent des registres plus grands pour des buts différents.

Prendre PDP-8 ordinateur comme exemple. C'était un 12 bits ordinateur. Chaque instruction était de 12 bits. Pour gérer les données de la même largeur, l'accumulateur était aussi 12 bits. Mais ce qui fait de l'ordinateur 12 bits une machine 12 bits, c'est sa longueur de mot d'instruction. Il avait douze interrupteurs sur le panneau avant avec lesquels il pourrait être programmé, instruction par instruction.

C'est un bon exemple de sortir de la 8/16/32 bits focus.

Le nombre de bits est également généralement la taille du bus d'adresse. Il indique donc généralement le maximum de mémoire adressable.

il y a une bonne explication de ceci à Wikipédia:

dans l'architecture informatique, les entiers de 32 bits, les adresses mémoire, ou autres unités de données sont ceux qui ont au plus 32 bits (4 octets) de large. De plus, les architectures CPU et ALU 32 bits sont celles qui sont basées sur des registres, des bus d'adresses ou des bus de données de cette taille. 32 bits est aussi un terme donné à une génération d'ordinateurs dans laquelle les processeurs 32 bits étaient les norme.

maintenant, parlons D'OS.

avec OS-es, Ceci est beaucoup moins lié à la véritable "bitty-ness" du CPU, il reflète habituellement comment les opcodes sont assemblés (pour quelle longueur de mot du CPU) et comment les registres sont adressés (vous ne pouvez pas charger une valeur de 32 bits dans un registre de 16 bits) et comment la mémoire est adressée. Pensez - y comme le programme terminé et compilé. Il est stocké sous forme d'instructions binaires et doit donc s'insérer dans la longueur des mots CPUs. Tâche-sage, il a pour être capable de traiter toute la mémoire, sinon il ne pourrait pas faire une bonne gestion de la mémoire.

mais ce qui vient à elle, est si un programme est 32 ou 64 bits (un OS est essentiellement un programme ici) la façon dont ses instructions binaires sont stockées et comment les registres et la mémoire sont adressées. Dans l'ensemble, cela s'applique à toutes sortes de programmes, pas seulement OS-es. C'est pourquoi vous avez des programmes compilés pour 32 bits ou 64 bits.

7
répondu polemon 2010-08-29 13:24:22

les définitions sont des termes de marketing plus que des termes techniques précis.

en termes techniques flous ils sont plus liés à des largeurs architectoniques visibles que n'importe quel registre d'implémentation réel ou la largeur de bus. Par exemple, le 68008 a été classé comme un CPU 32 bits, mais avait des registres 16 bits dans le silicium et seulement un bus de données 8 bits et 20 bits d'adresse Impair.

1
répondu hotpaw2 2010-08-29 10:56:19

http://en.wikipedia.org/wiki/64-bit#64-bit_data_models les modèles de données signifient bitness pour la langue.

la phrase "OS is X-bit" signifie habituellement que le système D'exploitation a été écrit pour le mode cpu X-bit, c'est-à-dire que Windows 64-bit utilise le mode long sur x86-64, où les registres sont 64 bits et l'espace d'adresse est 64 bits de large et il y a d'autres différences distinctes du mode 32 bits, où typiquement les registres sont 32 bits de large et l'espace d'adresse est 32 bits de large. Sur x86, l'un des principaux la différence entre les modes 32 et 64 bits est la présence de segmentation en 32 bits pour la compatibilité historique.

habituellement, le système D'exploitation est écrit en gardant à l'esprit le bit CPU, x86-64 étant un exemple notable de décennies de compatibilité ascendante - vous pouvez avoir tout, des programmes en mode réel de 16 bits aux programmes en mode protégé de 32 bits en passant par les programmes en mode long de 64 bits.

de plus il y a différentes façons de virtualiser, donc votre programme peut fonctionner comme en mode 32 bits, mais en réalité il est exécuté par un noyau non-x86.

1
répondu berkus 2010-08-30 22:19:40

La différence se réduit à peu de la largeur d'un ensemble d'instructions transmises à un registre d'exploitation. 16 bits peuvent fonctionner sur 2 octets, 64 sur 8 octets d'instruction à la fois. Vous pouvez souvent augmenter le débit d'un processeur en exécutant des instructions plus denses par cycle d'horloge.

1
répondu htmldrum 2012-12-27 18:27:12

lorsque nous parlons d'architectures 2^N bits en informatique, nous parlons essentiellement de registres de mémoire, de taille de bus d'adresse ou de taille de bus de données. Le concept de base derrière le terme d'architecture bit 2^n est de signifier que ce bit 2^N de données peut être utilisé pour adresser / transporter les données de taille 2^N par des processus.

0
répondu Saurabh 2010-08-29 10:54:48

autant que je sache, techniquement, c'est la largeur des chemins entiers. J'ai entendu parler de puces de 16 bits qui ont une adresse de 32 bits. Cependant, en réalité, c'est la largeur de l'adresse. sizeof (void*) est de 16bit sur une puce de 16bit, 32bit sur une 32bit, et 64bit sur une 64bit.

cela conduit à des problèmes parce que C et c++ permettent des conversions entre les types vides* et intégraux, et c'est sûr si le type intégral est assez grand (la même taille que le pointeur). Cela mène à toutes sortes de choses dangereuses dans termes de

void* p = something;
int i = (int)p;

qui va s'écraser et brûler horriblement sur 64bit code (fonctionne sur 32bit) parce que void* est maintenant deux fois plus grand que int.

Dans la plupart des langues, vous devez travailler dur pour se soucier de la largeur du système sur lequel vous travaillez.

0
répondu Puppy 2010-08-29 12:08:01