Question

Qu'est-ce que 16 bits, 32 bits et les architectures 64 bits signifient en cas de Microprocesseurs et / ou systèmes d'exploitation?

En cas de Microprocesseurs, ce que cela signifie taille maximale de General Purpose Registers ou de la taille de Integer ou le nombre de Address-lines ou le nombre de Data Bus lines ou quoi?

Qu'est-ce que nous entendons en disant "DOS is a 16-bit OS", "Windows in a 32-bit OS", etc ...?

Était-ce utile?

La solution

La différence se résume à la largeur de bits d'un jeu d'instructions transmis à un registre d'usage général pour agir sur. 16 bits peuvent fonctionner sur 2 octets, 64 octets de 8 sur instruction à la fois. Vous pouvez souvent augmenter le débit d'un processeur en exécutant des instructions plus denses par cycle d'horloge.

Autres conseils

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

Nouvelle réponse

Comme vous le dites, il y a une variété de mesures. Heureusement pour de nombreux processeurs, un grand nombre de mesures sont les mêmes, il n'y a donc pas de confusion. Le regard Let quelques données (Désolé pour le téléchargement d'images, je ne pouvais pas voir une bonne façon de faire une table démarquage). données de table

Comme vous pouvez le voir, de colonnes sont de bons candidats. Cependant, je dirais que la taille des registres généraux (vert) est la réponse la plus souvent comprise.

Quand un processeur est très varié en taille des registres différents, il sera souvent décrit plus en détail, par exemple, le Motorola 68k étant décrit comme une puce 16/32 bits.

D'autres ont fait valoir qu'il est la largeur du bus d'instructions (jaune) qui correspond également à la table. Cependant, dans le monde d'aujourd'hui pipelining je dirais ceci est une mesure beaucoup moins pertinente pour la plupart des applications que la taille des registres à usage général.


Réponse originale

Différentes personnes peuvent avoir différentes significations, parce que vous dites qu'il ya plusieurs mesures. Ainsi, par exemple quelqu'un parler de l'adressage mémoire peut signifier quelque chose de différent à quelqu'un parler de l'arithmétique entière. Cependant, je vais essayer de définir ce que je pense est la compréhension commune.

Mon point de vue est que pour une CPU, cela signifie « La taille du registre typique utilisé pour les opérations standard » ou « la taille du bus de données » (les deux sont normalement équivalents).

Je justifie cela avec la logique suivante. Le Z80 a un accumulateur de 8 bits et un bus de données 8 bits, tout en ayant des registres d'adressage de mémoire de 16 bits (IX, IY, SP, PC) et un bus d'adresse mémoire 16bit. Et le Z80 est appelé un microprocesseur 8 bits. Cela signifie les gens doivent normalement dire le principal entier taille arithmétique ou la taille databus, pas la taille d'adressage mémoire.

Il est pas la taille des instructions, comme le Z80 (nouveau) avait 1,2 et 3 instructions d'octets, mais bien sûr la lecture ont été multi-octets dans plusieurs lectures. Dans l'autre sens, le 8086 est un microprocesseur 16 bits et peut lire 8 ou 16 bits instructions. Donc, je suis 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éfinir comme « le code est compilé pour fonctionner sur une unité centrale de traitement de cette taille », donc un OS 32 bits a exécution du code compilé sur un processeur 32 bits (selon la définition ci-dessus).

Combien de bits d'une unité centrale de traitement « est », des moyens que sa longueur de mot d'instruction est. Sur un processeur 32 bits, la longueur de mot de cette instruction est de 32 bits, ce qui signifie que c'est la largeur quelle CPU peut traiter des instructions ou des données, entraînant souvent une ligne de bus avec cette largeur. Pour une raison similaire, les registres ont la taille de la longueur de mot de la CPU, mais vous avez souvent des registres plus importants à des fins différentes.

Prenez le PDP-8 ordinateur comme exemple. Ce fut un ordinateur 12 bits. Chaque instruction était 12 peu long. Pour traiter les données de la même largeur, l'accumulateur a également été 12 bits. Mais ce qui rend l'ordinateur 12 bits une machine 12 bits, était sa longueur de mot d'instruction. Il avait douze interrupteurs sur le panneau avant avec lequel il pourrait être programmé, instruction par instruction.

Ceci est un bon exemple pour sortir de la mise au point peu 8/16/32.

Le nombre de bits est généralement la taille du bus d'adresse. Elle a donc dit généralement la mémoire adressable maximale.

Il y a une bonne explication de cette Wikipedia :

  

Dans l'architecture de l'ordinateur, des nombres entiers de 32 bits, les adresses de mémoire, ou d'autres unités de données sont ceux qui sont dans la plupart des 32 bits (4 octets) de large. En outre, les architectures CPU et ALU 32 bits sont ceux qui sont basés sur les registres, les bus d'adresse, ou les bus de données de cette taille. 32 bits est également un terme donné à une génération d'ordinateurs dans lesquels les processeurs 32 bits étaient la norme.

Maintenant, nous allons parler de l'OS.

Avec OS-es, c'est beaucoup moins lié à la réelle « Bitty-ness » de la CPU, il reflète généralement la façon dont opcodes sont assemblés (pour lesquels longueur de mot de la CPU) et la façon dont les registres sont Adressé (vous pouvez » t charger une valeur de 32 bits dans un registre de 16 bits) et la façon dont la mémoire est adressé. Pensez-y comme terminé, le programme compilé. Il est stocké sous forme d'instructions binaires et doit donc entrer dans la longueur de mot CPU. Tâche sage, il doit être en mesure de répondre à toute la mémoire, sinon il ne pouvait pas faire la gestion appropriée de la mémoire.

Mais que s'est à elle, est de savoir si un programme est de 32 ou 64 bits (un système d'exploitation est essentiellement un programme ici) il comment ses instructions binaires sont stockées et comment sont traités les registres et la mémoire. Dans l'ensemble, cela vaut pour tous les types de programmes, pas seulement OS-es. Voilà pourquoi vous avez des programmes compilés pour 32 bits ou 64 bits.

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

En terme technique floue, ils sont plus liés à des largeurs visibles que tout architecturalement réel registre de mise en œuvre ou de la largeur de bus. Par exemple, le 68008 a été classé comme un processeur de 32 bits, mais il y avait registres de 16 bits dans le silicium et seulement un bus de données à 8 bits et 20 bits d'adresse impairs.

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

Le « OS est x bits » phrase habituellement signifie que le système d'exploitation a été écrit pour le mode cpu x bits, qui est, Windows utilise le mode à long 64 bits sur x86-64, où les registres sont 64 bits et l'espace d'adressage est 64 bits grandes et il existe d'autres différences distinctes de mode 32 bits, où les registres sont généralement de 32 bits de large et un espace d'adresse est de 32 bits grand. Sur 86 une grande différence entre les modes 32 et 64 bits est en présence de segmentation de 32 bits pour une compatibilité historique.

En général, le système d'exploitation est écrit avec bitness CPU à l'esprit, x86-64 étant un exemple remarquable des décennies de rétrocompatibilité - vous pouvez avoir tout de 16 bits programmes en mode réel à 32 bits programmes en mode protégé à 64- bits de programmes longs en mode.

De plus, il existe différentes façons de virtualiser, de sorte que votre programme peut fonctionner comme si en mode 32 bits, mais en réalité, il est exécuté par un noyau non-x86 du tout.

Quand on parle de 2 ^ n architectures de bits dans la science informatique nous parlons essentiellement des registres de mémoire, l'adresse taille de bus ou de la taille des bus de données. Le concept de base derrière terme de l'architecture de bit 2 ^ n est de signifier que ce ici 2 ^ n bit de données peut être utilisé pour l'adresse / transporter les données de taille 2 ^ n par les processus.

Pour autant que je sache, sur le plan technique, il est la largeur des voies entières. Je l'ai entendu parler de puces 16bit qui ont 32bit adressage. Cependant, en réalité, il est la largeur d'adresse. sizeof (void *) est 16 bits sur une puce de 16 bits, 32 bits sur un 32bit, et 64 bits sur un 64 bits.

Cela conduit à des problèmes parce que C et C ++ permet des conversions entre void * et types entiers, et il est sûr si le type intégral est assez grand (la même taille que le pointeur). Cela a conduit à toutes sortes de choses dangereuses en termes de

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

Ce qui va épouvantablement crash and burn sur le code 64bit (travaux sur 32bit) car 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top