PDA

Voir la version complète : Problème de compréhension d'unités



Zes
09/11/2016, 22h50
Toutes mes excuses si je me suis trompé de section, j'ai pensé après avoir un peu fouillé que celle-ci me semblait la plus appropriée pour ma question.

Elle va peut-être vous paraître étrange mais je reste bloqué sur les ordinateurs 16-bits, 32-bits etc... et je sais qu'à une époque on disait que les 32-bits ne pouvaient pas gérer plus de 4Go de Ram (même si j'ai compris qu'il existait des procédés permettant de faire du 36-bits en réalité et ainsi arriver à 64 Go de Ram utilisable.)

Mon problème réside dans les calculs que je trouve sur le net, je pige bien le 2 puissance 32 qui donne 4'294'967'296, mais c'est l'unité que je ne pige pas, car pour moi la valeur obtenue est en bits et non pas en bytes car dans ma compréhension du truc c'est 2 puissance 32 bits. Lorsqu'on parle de 4 Go c'est bien de 4 giga-octets dont il s'agit et non pas de 4 giga-bits et c'est là que je ne pige plus rien, étant donné les unités à mes yeux on devrait pouvoir gérer 4 giga-bits d'adresses et non pas 4 giga-bytes d'adresses avec ce calcul.

Quelqu'un pourrait m'expliquer où se situe mon erreur de logique ? Merci d'avance.

nephyl
10/11/2016, 00h09
A vérifier, mais la première réponse qui me vient est que la limite étant due à l'adressage, si tu as un octet à chaque "adresse" tu peux stocker 4GO avec 4G "adresses".

Zes
10/11/2016, 06h35
Donc si je pige bien le calcul de base me donne le nombre de giga-bits d'adresses différentes possibles et chaque adresse pourrait stocker un octet ?

revanwolf
10/11/2016, 09h58
Alors concernant ton problèmes avec les bits/bytes/octets,tout cela vient en partie que les termes anglais sont fourbe(des faux-amis):



un bit en français et anglais c'est la même chose:une valeur binaire(0 ou 1)
un bytes est en français un octet et est un groupement de 8 bit
le symbole d'un bit est un b minuscule tandis que celui du bytes est un B majuscule.
le problème est quand on se trompe quand on l’écris(maux de têtes garantie :huh: )


Donc quand on parle de 4 GB(la majuscule c'est important), c'est 4 Go.

Cela-dit ta question aurait surement été plus judicieux dans le topic Hardware Advanced. (http://forum.canardpc.com/forums/34-Hardware-Advanced)

Møgluglu
10/11/2016, 10h01
2^32 n'a pas d'unité, c'est un nombre d'éléments. Avec 32 bits tu peux compter 2^32 serviettes, cochons, octets ou ce que tu veux, et même des bits. Si la théorie qui est derrière t'amuse, tu peux regarder la théorie de l'information (https://fr.wikipedia.org/wiki/Th%C3%A9orie_de_l%27information) de Shannon.


Cela-dit ta question aurait surement été plus judicieux dans le topic Hardware Advanced. (http://forum.canardpc.com/forums/34-Hardware-Advanced)

Alors là on va démarrer sur Shannon et Kolmogorov direct. :ninja:

Zes
10/11/2016, 16h03
un bytes est en français un octet et est un groupement de 4 bit


Euh.... ce ne serait pas plutot un groupement "mot" de 8 bits et pas 4 bits ??

- - - Mise à jour - - -


2^32 n'a pas d'unité, c'est un nombre d'éléments. Avec 32 bits tu peux compter 2^32 serviettes, cochons, octets ou ce que tu veux, et même des bits. Si la théorie qui est derrière t'amuse, tu peux regarder la théorie de l'information (https://fr.wikipedia.org/wiki/Th%C3%A9orie_de_l%27information) de Shannon.



Mais il doit quand même il y a avoir une unité implicite lorsqu'il s'agit de mémoire comme la mémoire vive par exemple. Est-ce que l'unité implicite du 2^32 correspond toujours au nombre d'octets de mémoire lorsqu'on parle de mémoire vive ?

Et de plus pour un ordinateur ne faut-il pas aussi un certain nombre de bit qui soient utilisé pour communiquer ce que l'on compte. Combien de bits sont utilisés dans un ordinateur pour par exemple dire qu'il s'agit d'une adresse pour la carte graphique et pas pour la mémoire vive. Lorsque tu dis que tu peux compter 2^32 cochons ne doit-il pas avoir une partie des bits utilisés pour autre chose que compter mais pour donner l'information sur l'objet compté lui-même ?

Styo
10/11/2016, 16h37
Euh.... ce ne serait pas plutot un groupement "mot" de 8 bits et pas 4 bits ??

- - - Mise à jour - - -



Mais il doit quand même il y a avoir une unité implicite lorsqu'il s'agit de mémoire comme la mémoire vive par exemple. Est-ce que l'unité implicite du 2^32 correspond toujours au nombre d'octets de mémoire lorsqu'on parle de mémoire vive ?

Et de plus pour un ordinateur ne faut-il pas aussi un certain nombre de bit qui soient utilisé pour communiquer ce que l'on compte. Combien de bits sont utilisés dans un ordinateur pour par exemple dire qu'il s'agit d'une adresse pour la carte graphique et pas pour la mémoire vive. Lorsque tu dis que tu peux compter 2^32 cochons ne doit-il pas avoir une partie des bits utilisés pour autre chose que compter mais pour donner l'information sur l'objet compté lui-même ?

Le 2^32 te donne le nombre d'unité de mémoire différente que ton système peut adresser. Et comme on a décidé d'avoir une précision à l'octet près, on peut adresser 4 Gio de donnée en utilisant un entier sur 32 bits non signé. Ensuite, c'est une partie de ton OS qui fait le boulot, et qui sait qui a stocké quoi, en quelle quantité et où. Mais au final il ne pourra y avoir que 4 Gio de données récupérables.
Au final, le programmeur n'aura aucune connaissance de ces adresses. Lui il aura écrit des trucs comme (pour prendre l'exemple du C) :
int a = 3;
int* b = &a;

Pour lui a vaut 3, et b contient l'adresse de la variable a. Vu que c'est un entier, la taille vaudra 32 bits (cas le plus général). Le compilateur et l'OS vont s'occuper de stocker cela là ou il faut, et de le retrouver quand on aura besoin de a ou de b.

revanwolf
10/11/2016, 16h50
Euh.... ce ne serait pas plutot un groupement "mot" de 8 bits et pas 4 bits ??

Yup,j'ai fait cela de mémoire donc je me suis un poil embrouillé les pinceaux.

Zes
10/11/2016, 17h17
Le 2^32 te donne le nombre d'unité de mémoire différente que ton système peut adresser.

Donc que vaut l'unité ici ? Ce sont des octets par adresse et ça ne peut être rien d'autre que des octets par adresse ?


Et comme on a décidé d'avoir une précision à l'octet près, on peut adresser 4 Gio de donnée en utilisant un entier sur 32 bits non signé.

Qu'est-ce que tu entends par précision ? Et ton 4 Gio veut dire 4 giga-octets parce qu'il y a 2^32 adresses possibles qui chacune peut gérer un seul octet ?

Et si c'est le cas, dans un octet = 8 bits, on ne peut stocker que 255 informations différentes pourquoi ne gère-t-on pas plus que des octets ? On est en 32 bits on pourrait gérer des quadri-octets et ainsi avoir une bien plus grande diversité de possibilités de variété d'informations, non ?



Ensuite, c'est une partie de ton OS qui fait le boulot, et qui sait qui a stocké quoi, en quelle quantité et où.

Justement, accompagnant l'information elle-même il doit obligatoirement avoir un certain nombre d'octets utilisés pour déterminer le quoi et le où, ceci ne fait pas qu'une partie de la mémoire est elle-même utilisée pour les méta-informations du quoi et où ?

Møgluglu
10/11/2016, 17h18
Euh.... ce ne serait pas plutot un groupement "mot" de 8 bits et pas 4 bits ??

En bon françois on dit un quartet pour 4 bits. Enfin on disait, parce que des machines qui manipulent des mots de 4 bits, ça ne court plus les rues.

Bytes est moins précis qu'octet, historiquement il y a eu des bytes de 6, 7 ou 9 bits et peut-être même 4. Même en anglais, on dit parfois octet pour éviter toute ambiguïté.


Mais il doit quand même il y a avoir une unité implicite lorsqu'il s'agit de mémoire comme la mémoire vive par exemple. Est-ce que l'unité implicite du 2^32 correspond toujours au nombre d'octets de mémoire lorsqu'on parle de mémoire vive ?

Non, il y a eu des machines qui adressent par mots de 16 bits, 18 bits, 36 bits ou autres. On s'est vite rendu compte que c'était une mauvaise idée. ;) L'adressage par octet est une simple convention, mais elle s'applique pour toute les machines modernes.


Et de plus pour un ordinateur ne faut-il pas aussi un certain nombre de bit qui soient utilisé pour communiquer ce que l'on compte. Combien de bits sont utilisés dans un ordinateur pour par exemple dire qu'il s'agit d'une adresse pour la carte graphique et pas pour la mémoire vive. Lorsque tu dis que tu peux compter 2^32 cochons ne doit-il pas avoir une partie des bits utilisés pour autre chose que compter mais pour donner l'information sur l'objet compté lui-même ?

C'est inclus dans les 32 bits. L'adresse physique indique à la fois de quel composant on parle et de quel emplacement on accède dans la mémoire dudit composant. Des bouts de la mémoire graphique et des ports d'entrée/sortie sont "mappés" à différents emplacements de l'espace mémoire physique. C'est le réseau d'interconnexion qui va router chaque requête mémoire vers la DRAM ou vers la carte graphique par exemple en fonction de l'adresse.

Styo
10/11/2016, 17h40
Donc que vaut l'unité ici ? Ce sont des octets par adresse et ça ne peut être rien d'autre que des octets par adresse ?



Qu'est-ce que tu entends par précision ? Et ton 4 Gio veut dire 4 giga-octets parce qu'il y a 2^32 adresses possibles qui chacune peut gérer un seul octet ?

Et si c'est le cas, dans un octet = 8 bits, on ne peut stocker que 255 informations différentes pourquoi ne gère-t-on pas plus que des octets ? On est en 32 bits on pourrait gérer des quadri-octets et ainsi avoir une bien plus grande diversité de possibilités de variété d'informations, non ?




Justement, accompagnant l'information elle-même il doit obligatoirement avoir un certain nombre d'octets utilisés pour déterminer le quoi et le où, ceci ne fait pas qu'une partie de la mémoire est elle-même utilisée pour les méta-informations du quoi et où ?

Comme dit plus haut, dans 99% des système, on va gérer la mémoire par octet. Pour en revenir au C par exemple, tu peux déclarer des variables qui correspondent à 1, 2, 4, 8 octets. Pouvoir adresser un ensemble de 7 octets n'aura pas de sens, en tout cas pour une machine générique comme le PC. Et adresser une paire d'octet, cela risque de te faire perdre de la place si tu ne compte utiliser qu'un seul octet (le char en C par exemple).

Le Gio, c'est comme le Go, mais dans la vision de l'informatique : 2^10 * 2 ^10 * 2^10 = 1024 * 1024 * 1024.

Et oui, je gestionnaire mémoire va utiliser de la mémoire pour fonctionner ! Et la mémoire d'un ordinateur s'étend au delà de la RAM, il y a aussi les caches de ton CPU, ou la swap sur ton disque dur par exemple. La RAM est juste un intermédiaire, moyennement rapide, moyennement grand.

Et n'oublie pas que depuis plus de 10 ans, il y a le 64 bits. Tu ne risque plus d'être à l'étroit dans ton espace d'adressage avec lui.

Zes
10/11/2016, 17h56
Merci beaucoup pour toutes vos réponses. C'est très sympa.

Pour les 64 bit la quantité d'adresses possibles et tellement énorme que ce n'est plus du tout une problématique, ça fait bien longtemps que je profite de mon ordi qui a 12Go de mémoire vive mais j'aimerai comprendre mieux comment l'information est stockée dans la mémoire vive d'un ordi et les différences entre les différentes architectures.

Si pour pratiquement toutes les mémoires on les gère par octets, cela veut-il dire qu'un 32 bit n'est qu'un 8 bits à 4 voies pour les informations stockable en mémoire vive ? Par cela je veux dire que dans un octet on ne peut avoir que 255 informations différentes possibles ce qui me semble peu. Si un 32 bit gère sa mémoire aussi par tranche de 8bits, il n'a au final pas plus de vocabulaire qu'un 8-bits mais il peut juste le faire 4 fois pendant qu'un 8 bit à la même fréquence ne le fait qu'une fois ?

Møgluglu
10/11/2016, 20h57
Un bit c'est juste un chiffre en base 2.
Avec un chiffre décimal tu ne codes que 10 informations différentes, pourtant avec 4 chiffres tu en codes 10000. Peu importe que tu écrives les chiffres un par un ou tous en même temps, tu as toujours 10000 combinaisons possibles avec 4 chiffres. En binaire c'est pareil.

(En l'occurence ton CPU 64-bit sait écrire des blocs de 8 octets consécutifs d'un seul coup, mais ça ne change rien au nombre de combinaisons possibles.)

Styo
11/11/2016, 07h17
Merci beaucoup pour toutes vos réponses. C'est très sympa.

Pour les 64 bit la quantité d'adresses possibles et tellement énorme que ce n'est plus du tout une problématique, ça fait bien longtemps que je profite de mon ordi qui a 12Go de mémoire vive mais j'aimerai comprendre mieux comment l'information est stockée dans la mémoire vive d'un ordi et les différences entre les différentes architectures.

Si pour pratiquement toutes les mémoires on les gère par octets, cela veut-il dire qu'un 32 bit n'est qu'un 8 bits à 4 voies pour les informations stockable en mémoire vive ? Par cela je veux dire que dans un octet on ne peut avoir que 255 informations différentes possibles ce qui me semble peu. Si un 32 bit gère sa mémoire aussi par tranche de 8bits, il n'a au final pas plus de vocabulaire qu'un 8-bits mais il peut juste le faire 4 fois pendant qu'un 8 bit à la même fréquence ne le fait qu'une fois ?

Un CPU 32bits signifie que le CPU est optimisé pour traiter des 32 bits. C'est la taille de donnée la plus commune en général. Si la mémoire peut stocker des informations plus petites que 4 octets, c'est tout simplement car on manipule parfois des informations plus petite. Cela n'a rien à voir avec son jeu d'instruction (ce qui ressemblerai le plus à ton vocabulaire si je comprend bien).

Un CPU 32 bits est optimisé pour le traitement des données sur 32 bits, mais il peut très bien être aussi rapide à traiter des données en 16 bits. Ou plus rapide. Ou plus lent. Tout dépend de l'architecture de ton CPU et de son usage. Et tu ne peux pas paralléliser 4 opération en 8 bits sur un CPU en 32 bits, tu vas soit utiliser que 8 bits sur les 32 possibles, soit passer par des instructions spéciale de traitement 8 bits, mais rien ne dit qu'il pourra en faire 4 en parallèle.