Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/12/2009, à 03:20

brakbabord

Question sur le 32bits et addressage

Bonsoir,

Sur un autre forum un membre soulève une question pertinente. Les processeurs 32bits peuvent adresser au maximum 4GB de ram. On explique souvent ce nombre en balançant 2^32.

Or 2^32 donne 4294967296, mais ce sont des bits et non des bytes.
Si on converti en bytes (division par 8) ça donne 536870912 (grosso modo 512 MB).

Donc la question est pourquoi on utilise 2^32 pour justifier la limitation de ram des processeurs 32bits, alors qu'il y a visiblement une erreur d'unités? Quelle est la vraie explication à cette limitation?

Dernière modification par brakbabord (Le 13/12/2009, à 03:21)

Hors ligne

#2 Le 13/12/2009, à 04:34

GentooUser

Re : Question sur le 32bits et addressage

Sauf que justement on adresse pas un bit mais un octet, en 32 bit sans PAE on a donc 4294967296 adresses d'octet.

Dernière modification par GentooUser (Le 13/12/2009, à 04:36)

Hors ligne

#3 Le 13/12/2009, à 09:56

Kris73

Re : Question sur le 32bits et addressage

Tout à fait, ce qui est codé sur 32 bits c'est bien l'adresse de l'octet stocké, ce qui donne bien 2^32 possibilités....


L'échec, ce n'est pas de tomber, c'est de rester là où l'on est tombé.

Linux Counter user #461733                         Ubuntu User number # 19929

Hors ligne

#4 Le 13/12/2009, à 18:08

brakbabord

Re : Question sur le 32bits et addressage

Merci pour l'explication c'est plus clair

Hors ligne

#5 Le 13/12/2009, à 18:32

kimented

Re : Question sur le 32bits et addressage

https://secure.wikimedia.org/wikipedia/fr/wiki/Random_Access_Memory a écrit :

Les informations peuvent être organisées en mots de 8, 16 ou 32 bits voire plus. Certaines machines anciennes avaient des mots de taille plus exotique, comme par exemple 60 bits pour le Control Data 6600, 36 bits pour l'IBM 7030 « Stretch » ou le DEC PDP-10 et 12 bits pour la plupart des premiers mini-ordinateurs de DEC, les appareils d'instrumentation travaillant au mieux sur 12 bits à l'époque.

Si j'ai bien compris, on pourrait avoir plus de 4Gio de RAM si on adresse plus que huit bits? On adresse un octet parce que les barrettes n'acceptent que ça, ou c'est le noyau qui définit ça?

Hors ligne

#6 Le 13/12/2009, à 19:22

Link31

Re : Question sur le 32bits et addressage

kimented a écrit :

Si j'ai bien compris, on pourrait avoir plus de 4Gio de RAM si on adresse plus que huit bits? On adresse un octet parce que les barrettes n'acceptent que ça, ou c'est le noyau qui définit ça?

Parce que toute l'architecture est basée là-dessus (et en particulier le processeur). D'où l'un des principaux intérêts de l'architecture x86_64 : toutes les adresses du système sont sur 64 bits.

Hors ligne

#7 Le 13/12/2009, à 19:58

HymnToLife

Re : Question sur le 32bits et addressage

kimented a écrit :
https://secure.wikimedia.org/wikipedia/fr/wiki/Random_Access_Memory a écrit :

Les informations peuvent être organisées en mots de 8, 16 ou 32 bits voire plus. Certaines machines anciennes avaient des mots de taille plus exotique, comme par exemple 60 bits pour le Control Data 6600, 36 bits pour l'IBM 7030 « Stretch » ou le DEC PDP-10 et 12 bits pour la plupart des premiers mini-ordinateurs de DEC, les appareils d'instrumentation travaillant au mieux sur 12 bits à l'époque.

Si j'ai bien compris, on pourrait avoir plus de 4Gio de RAM si on adresse plus que huit bits? On adresse un octet parce que les barrettes n'acceptent que ça, ou c'est le noyau qui définit ça?

Au contraire. Si on utilisait par exemple des mots de 16 bits, une barrette de 4 GiB ne ferait plus que 2 GiB, puisque la taille d'un byte serait doublée.

EDIT: d'ailleurs, on ne pourrait pas parler de "Gio", puisqu'un byte ne serait plus égal à un octet.

@Link31: un byte = 8 bits, que ce soit en x86 ou en x86_64. La taille de l'adressage, c'est autre chose (là, on parle de la taille des objets adressés).

Dernière modification par HymnToLife (Le 13/12/2009, à 19:59)


- Rodrigue, as-tu du cœur ?
- Non, mais j'ai du pique !

Hors ligne

#8 Le 13/12/2009, à 21:13

inconnu

Re : Question sur le 32bits et addressage

Pour les PC, la taille de la cellule mémoire(ou byte) est d'1 octet. Mais pour certains gros serveurs c'est plus. Avec 1 octet, 8 bits, on peut coder 256 caractères. La norme iso 8859-1 utilise l'octet pour coder les alphabets d'une dizaine de langues.

edit : en y repensant je me dis que la taille du byte n'a pas augmenté peut-être aussi pour des raisons de compatibilité ascendante avec les programmes d'anciens processeurs ? Un changement dans le système d'adressage est peut être assez chaud à gérer niveau compatibilité, pour un apport moindre.

re edit : la taille de la cellule de base je veux dire. Merci k.o.x.

Dernière modification par shlok (Le 13/12/2009, à 23:37)

#9 Le 13/12/2009, à 23:15

k-o-x

Re : Question sur le 32bits et addressage

Vous confondez bytes/octets et mots. Les bytes/octets font toujours la même taille, 8 octets (*), ce sont les mots dont la taille varie (mais restent un nombre entier d'octets) en fonction de l'architecture. De plus, chaque architecture adresse différemment, en mots ou en octets.

Par exemple, x86 et x86_64 adressent toujours en octets, pour permettre l'accès à la mémoire avec cette granularité, mais les mots font respectivement 4 octets ou 32 bits (x86) et 8 octets ou 64 bits (x64). Le mot est la taille d'information "nominale" utilisable pour les calculs (typiquement, la taille des registres processeur utilisés pour le calcul - ce qui n'empeche pas, avec des techniques particulières mais moins rapides, de calculer avec des mots plus grands) ainsi que la taille standard d'une instruction processeur en mémoire.

Le x86(_64) a cette particularité que la taille des mots correspond à la taille d'adressage. Cela permet d'utiliser les mêmes registres pour stocker/calculer avec des nombres ou avec des adresses. Ce n'est pas le cas de toutes les architectures : certaines ont des registres spécifiques pour les adresses mémoire.

D'autres architectures peuvent adresser différemment. Certains DSP adressent des mots de 16 ou 32 bits; et si par exemple un DSP à mots de 16 bits adresse avec des registres de 32 bits, il pourra donc adresser 4gigamots, soit 8 gigaoctets.

(*) Pour la transmission série, on utilise parfois des "octets"de 5, 6, 7 ou 9 bits, suivant le nombre de caractères possibles dans la transmission, mais c'est une autre histoire.

Dernière modification par k-o-x (Le 13/12/2009, à 23:15)

Hors ligne

#10 Le 13/12/2009, à 23:33

HymnToLife

Re : Question sur le 32bits et addressage

k-o-x a écrit :

Vous confondez bytes/octets et mots. Les bytes/octets font toujours la même taille, 8 octets (*), ce sont les mots dont la taille varie (mais restent un nombre entier d'octets) en fonction de l'architecture. De plus, chaque architecture adresse différemment, en mots ou en octets.

mot = byte
octet = octet

Q.E.D. byte != octet smile

http://en.wikipedia.org/wiki/Byte

The byte (pronounced /ˈbaɪt/) is a unit of digital information in computing and telecommunications. It is an ordered collection of bits, in which each bit denotes the binary value of 1 or 0. Historically, a byte was the number of bits (typically 6,7,8, or 9) used to encode a character of text in a computer[1][2] and it is for this reason the basic addressable element in many computer architectures.

http://en.wikipedia.org/wiki/Octet_%28computing%29

In computing, an octet is a grouping of eight bits.

Dernière modification par HymnToLife (Le 13/12/2009, à 23:38)


- Rodrigue, as-tu du cœur ?
- Non, mais j'ai du pique !

Hors ligne

#11 Le 14/12/2009, à 01:44

ares

Re : Question sur le 32bits et addressage

@k-o-x
Beaucoup trop confus !!!!

«ce sont les mots dont la taille varie (mais restent un nombre entier d'octets) en fonction de l'architecture.»
Non ! un mot= 2octets. Merci HymnToLife smile

«Par exemple, x86 et x86_64 adressent toujours en octets (...)»
L'adressage est fonction du bus mémoire 8,16,32,64 et de l'instruction du programme.
On peut charger un octet avec une adresse 32 bits
ex :
mov al,[esi] ; charge le registre 8 bits(octet) avec le contenu de l'adresse pointé par ESI
mov ax,[esi] ; charge le registre 16 bits(mot) avec le contenu de l'adresse pointé par ESI
mov eax,[esi] ; charge le registre 32 bits(double mot) avec le contenu de l'adresse pointé par ESI
etc
L'adressage et instruction sont deux choses différentes.
La taille des instructions varient sur un CPU de type CISC, pratique quand la mémoire était chère.
La Mnémonique "mov" faisant partie des "déplacements" peut être codé sur 2octets à plus de 5 octets (mov eax,[ebx*2+ecx+offset]) suivant les instructions (opcode) prévus par le fabricant Intel

«Le x86(_64) a cette particularité que la taille des mots correspond à la taille d'adressage. Cela permet d'utiliser les mêmes registres pour stocker/calculer avec des nombres ou avec des adresses.»
Regarde LA et tu verra que ce n'est pas exacte smile

GentooUser & Kris73 ont donner la réponse la plus clair ! smile

Ne pas tenir compte de ma réponse rébarbative si elle embrouille le sujet... sauf si avant de vous endormir cette page vous aide a rejoindre Morphée tongue

Hors ligne

#12 Le 14/12/2009, à 02:32

GentooUser

Re : Question sur le 32bits et addressage

C'est pas stable dans le temps, avant un mot (word) c'était l'équivalent de deux int (soit sur les processeurs 8 bits : 16 bits) d'où cette confusion mot = 16 bits et ses conséquences dword (32 bits), qword (64 bits) après en ASM x86 ça change pas (vu qu'on se traine la compatibilité)

Maintenant, hors ASM, c'est pas la première fois que je lit "mot" = "nombre de bits" d'un processeur ou de "mot mémoire" = taille du bus" entre la mémoire et le processeur.

Dernière modification par GentooUser (Le 14/12/2009, à 02:35)

Hors ligne

#13 Le 14/12/2009, à 11:56

k-o-x

Re : Question sur le 32bits et addressage

ares a écrit :

Non ! un mot= 2octets. Merci HymnToLife smile

Désolé, mais non. Un mot ne fait pas 2 octets en général. Un "word" en C fait 16 bits, ce qui est hérité du 8086 dont les mots faisaient cette taille. Mais un mot machine en x86 fait 32 bits, et 64 en x86_64. Et sur d'autres archis, c'est encore différent.

ares a écrit :

L'adressage est fonction du bus mémoire 8,16,32,64 et de l'instruction du programme.
On peut charger un octet avec une adresse 32 bits
ex :
mov al,[esi] ; charge le registre 8 bits(octet) avec le contenu de l'adresse pointé par ESI
mov ax,[esi] ; charge le registre 16 bits(mot) avec le contenu de l'adresse pointé par ESI
mov eax,[esi] ; charge le registre 32 bits(double mot) avec le contenu de l'adresse pointé par ESI
etc

Certes, mais le contenu de ESI est toujours une adresse 32 bits, qui permet d'adresser chaque octet. D'ailleurs, avec un mov al, c'est une adresse quelconque; avec mov ax elle doit etre multiple de 2 et avec mov eax multiple de 4 (plus précisément, les derniers bits de ESI sont ignorés).

ares a écrit :

L'adressage et instruction sont deux choses différentes.
La taille des instructions varient sur un CPU de type CISC, pratique quand la mémoire était chère.
La Mnémonique "mov" faisant partie des "déplacements" peut être codé sur 2octets à plus de 5 octets (mov eax,[ebx*2+ecx+offset]) suivant les instructions (opcode) prévus par le fabricant Intel

«Le x86(_64) a cette particularité que la taille des mots correspond à la taille d'adressage. Cela permet d'utiliser les mêmes registres pour stocker/calculer avec des nombres ou avec des adresses.»
Regarde LA et tu verra que ce n'est pas exacte smile

Certes, mais c'est une astuce qui a été introduite tardivement. Le CPU charge toujours ses instructions par mots. Après, la manière dont il les décode, c'est une autre histoire.

Dernière modification par k-o-x (Le 14/12/2009, à 11:58)

Hors ligne

#14 Le 14/12/2009, à 22:42

ares

Re : Question sur le 32bits et addressage

<hs>
Je veux pas pinaillé mais si tu te relis :

Désolé, mais non. Un mot ne fait pas 2 octets en général. Un "word" en C fait 16 bits, ce qui est hérité du 8086 dont les mots faisaient cette taille. Mais un mot machine en x86 fait 32 bits, et 64 en x86_64. Et sur d'autres archis, c'est encore différent.

Pas très claire car comment 2 octets (2*8) soit 16bits en général seraient diférent d'un "word" en C de 16 bits ?!? tongue Ce n'est pas un "héritage" de Intel. Intel comme Motorola innovaient avec leur CPU 16 bits. L'adoption du bus 16 bits fut "longue", Intel s'imposa avec le 8088 lui aussi CPU de 16 bits mais un bus d'adresse mémoire de 8 bits. Pratique pour des cartes électroniques 8 bits ! smile

Certes, mais le contenu de ESI est toujours une adresse 32 bits, qui permet d'adresser chaque octet. D'ailleurs, avec un mov al, c'est une adresse quelconque; avec mov ax elle doit etre multiple de 2 et avec mov eax multiple de 4 (plus précisément, les derniers bits de ESI sont ignorés).

- Dans cette exemple oui !
- Poutant l'instruction : mov al,[bh] montre bien que l'adresse est sur 1 octet ! Cela est possible parce  que en mode "protégé" on adresse des "plages mémoires. Ce n'est pas un modèle mémoire linéaire (flat).
- Les bits les moins significatifs sont les derniers pour infos smile

Certes, mais c'est une astuce qui a été introduite tardivement. Le CPU charge toujours ses instructions par mots. Après, la manière dont il les décode, c'est une autre histoire.

- Heureusement que non ! Quelle perte de temps sinon !
- Le décodage des instructions est tout un poème, la on est d'accord !

Cela ne remet pas en cause le "word" en "C" car c'est un langage structuré.
Langage au dessus des problèmes d'adressage et de pagination mémoire d'un quelconque CPU. smile

</hs>

Hors ligne

#15 Le 15/12/2009, à 00:02

GentooUser

Re : Question sur le 32bits et addressage

C'est quoi un word en C ?

J'ai pas toute la libc en tête, mais dans le langage lui-même je ne connais que char, int, float et double comme types, avec les modificateurs short, long et unsigned (signed est reconnu aussi si je me rappelle bien, mais c'est comme le 'h' Hawaï).

Dernière modification par GentooUser (Le 15/12/2009, à 00:04)

Hors ligne

#16 Le 15/12/2009, à 00:13

ares

Re : Question sur le 32bits et addressage

C'est quoi un word en C ?

Bin la question reste posé...
Si k-o-x peut nous donner sa définition : «Un "word" en C fait 16 bits»
Je ne connais pas le langage "C",  mise a part la définition et son histoire tongue

Hors ligne

#17 Le 15/12/2009, à 09:20

ours.des.carpates

Re : Question sur le 32bits et addressage

Bonjour,

Soit dit en passant, j'avais entendu que la limitation des PC était de 3GB, je dis bien des PC et pas des processeurs 32 bits.

Est ce une info erronée ou non ?

#18 Le 15/12/2009, à 09:40

Seren

Re : Question sur le 32bits et addressage

ours.des.carpates a écrit :

Bonjour,

Soit dit en passant, j'avais entendu que la limitation des PC était de 3GB, je dis bien des PC et pas des processeurs 32 bits.

Est ce une info erronée ou non ?

Un PC ça veut pas dire grand chose en soit, il peut y avoir à peu près n'importe quoi dedans : un CPU x86, X64, powerPC ?

Par contre, t'as pu lire que pour un CPU à 32 bits la limite de la mémoire vive pouvait être autour de 3 Go et pas 4 Go.
Parce que 2³² c'est la taille totale de la mémoire adressable par le CPU, y compris par exemple la taille de la mémoire vidéo.

En gros avec tes 2³² adresses il faut que tu puisses:
- accéder à la RAM
- accéder à la mémoire vidéo
- accéder à des registres de divers périphériques
...

Donc au final tu a moins que 2³² octets de RAM adressable.


"I am not young enough to know everything". Oscar Wilde

Hors ligne

#19 Le 15/12/2009, à 10:39

eiger

Re : Question sur le 32bits et addressage

GentooUser a écrit :

C'est quoi un word en C ?

Rien. Cela n'existe tout simplement pas. Le "word" n'a pas de définition universelle. Intel en a une pour les x86, reprise par Microsoft dans l'API de Windows (le type WORD), mais le langage C ne connait pas le "word".
Et définir "un word = 16 bits" ne marche pas partout : Freescale parle de "24-bit words" pour ses DSP 24-bits. Cette notion est complètement dépendante de l'architecture.

Concernant la taille d'un byte, voici les définitions données dans la spec C99:

3.6 byte
addressable unit of data storage large enough to hold any member of the basic character
set of the execution environment
NOTE 1 It is possible to express the address of each individual byte of an object uniquely.
NOTE 2 A byte is composed of a contiguous sequence of bits, the number of which is implementation-defined.
The least significant bit is called the low-order bit; the most significant bit is called the high-order
bit.

Un byte en C est donc une entité adressable. Un processeur qui n'est capable d'adresser que des entités de N bits aura donc des bytes de N bits (ou multiples de N-bits).
Comme précisé dans la note 2 ci-dessus, la taille d'un byte est dépendante de la plateforme. La spec prévoit d'ailleurs la définition dans le fichier d'en-tête "limits.h" de la constate CHAR_BIT qui définit la taille en bits du type "char", dont la taille en byte est par définition de 1 (sizeof(char) == 1).

Et comme exemple de bytes exotiques, voici un extrait d'un fichier limits.h de Motorola/Freescale pour des DSP :

/* Copyright (C) 1990, 1995 by Motorola, Inc. */

#if ! defined( __LIMITS )
#define __LIMITS

#if defined( __DSP561C__ )
/* the 561c supports 16 bit chars and ints, and 32 bit longs. */
#define    CHAR_BIT        16
...
#elif defined( __DSP56K__ ) || defined( __DSP563C__ )
/* the 56k supports 24 bit chars and ints, and 48 bit longs. */
#define    CHAR_BIT        24
...
#elif defined( __DSP96K__ )
/* the 96k supports 32 bit chars, ints, and longs. */
#define CHAR_BIT        32           
...
#endif

Comme quoi, des bytes de 32 bits, on peut en trouver.

Pour information, les fabricants de mémoire donnent toujours la taille de leurs composants en bits, jamais en byte, puisque cette notion n'est pas universelle.

Hors ligne

#20 Le 15/12/2009, à 13:43

ours.des.carpates

Re : Question sur le 32bits et addressage

Seren a écrit :

Un PC ça veut pas dire grand chose en soit, il peut y avoir à peu près n'importe quoi dedans : un CPU x86, X64, powerPC ?

Merci beaucoup pour ta réponse, cependant je croyais que tous les PC avaient la même architecture ?
Cette architecture découlant du premier PC.

Comment un même Linux ou Windows pourrait ils fonctionner sur des architectures différentes ?

Je dis bien un même, je sais que Linux fonctionne sur des Solaris, mais seulement car il a été porté, c'est à dire que le code n'est pas exactement le même.

Si quelqu'un a un lien répondant à ces questions, je suis preneur. Merci smile

#21 Le 15/12/2009, à 14:00

GentooUser

Re : Question sur le 32bits et addressage

Les PC ont tous la même architecture mais elle évolue, sur les PC 32 bits la limite de mémoire adressable c'est 4go, sur les premiers PC c'était beaucoup moins.
Tout comme on se tape plus les ports ISA et les bus RLL !

Et Linux tourne sur beaucoup d'architectures différentes  yikes

Dernière modification par GentooUser (Le 15/12/2009, à 14:02)

Hors ligne

#22 Le 15/12/2009, à 16:31

ours.des.carpates

Re : Question sur le 32bits et addressage

Ce que je voudrais savoir c'est si sur tous les PC les ports (PCI, AGP, vidéo etc) ont la même adresse ?

Et éventuellement qui fixe (au niveau normalisation) l'adressage des nouveaux ports.

Un lien qui réponde à ces questions me conviendrait très bien (le but d'un forum n'étant pas de faire des cours)

Merci.

Dernière modification par ours.des.carpates (Le 15/12/2009, à 16:33)

#23 Le 15/12/2009, à 19:31

ours.des.carpates

Re : Question sur le 32bits et addressage

GentooUser a écrit :

Les PC ont tous la même architecture mais elle évolue...

En fait, possible que tous les PC n'aient pas la même architecture mais les différences sont gérés par les chipset. Et ce serait transparent pour le micro-processeur.

Enfin, je n'arrive à trouver nul part des infos sur ça....

Edit : si j'ai trouvé, je n'avais pas vraiment cherché.

Dernière modification par ours.des.carpates (Le 15/12/2009, à 20:48)