Je vais commencer par le niveau le plus bas qui pourrait être pertinent (je peux commencer par un niveau encore plus bas, mais ils sont probablement beaucoup trop inutiles), en commençant par Atom, en passant par l'électricité, les transistors, les portes logiques, les circuits intégrés (puce / processeur). ) et se termine à l’assemblée (je suppose que vous connaissez les niveaux supérieurs).
Au début
Atome
Atom est une structure composée d'électrons, de protons et de neutrons (eux-mêmes composés de particules élémentaires ). La partie la plus intéressante de l’atome pour les ordinateurs et l’électronique sont les électrons car ils sont mobiles (c’est-à-dire qu’ils peuvent se déplacer assez facilement, contrairement aux protons et aux neutrons qui sont plus difficiles à déplacer) et qu’ils peuvent flotter par eux-mêmes sans être retenus à l’intérieur. un atome.
Habituellement, chaque atome a un nombre égal de protons et d'électrons, nous appelons cet état "neutre". En l'occurrence, il est possible qu'un atome perde ou gagne des électrons supplémentaires. Les atomes dans cet état non équilibré sont dits être des atomes "chargés positivement" (plus de protons que d'électrons) et des atomes "chargés négativement" (plus d'électrons que de protons) respectivement.
Les électrons sont impossibles à construire et indestructibles (ce n'est pas le cas en mécanique quantique, mais cela n'a aucune importance pour notre propos); ainsi, si un atome perd un électron, un autre atome à proximité devait recevoir les électrons supplémentaires ou l'électron devait être libéré dans un électron flottant librement, inversement, l'électron étant non-constructible, pour gagner un électron supplémentaire, un atome devait l'enlever des atomes proches ou d'un électron flottant libre. La mécanique des électrons est telle que s'il y a un atome chargé négativement près d'un atome chargé positivement, certains électrons vont migrer jusqu'à ce que les deux atomes aient la même charge.
Électricité
L’électricité n’est qu’un flux d’électrons provenant d’une région comportant un très grand nombre d’atomes chargés négativement vers une région comportant un très grand nombre d’atomes chargés positivement. Certaines réactions chimiques peuvent créer une situation dans laquelle nous avons un nœud avec beaucoup d'atomes chargés négativement (appelé "anode") et un autre nœud avec beaucoup d'atomes chargés positivement (appelé "cathode"). Si nous connectons deux nœuds chargés de manière opposée avec un fil, des masses d'électrons vont circuler de l'anode à la cathode, et cet écoulement est ce que nous appelons "courant électrique".
Tous les fils ne peuvent pas transmettre les électrons aussi facilement, ils circulent beaucoup plus facilement dans les matériaux "conducteurs" que dans les matériaux "résistants". Un matériau "conducteur" a une faible résistance électrique (par exemple, des fils de cuivre dans des câbles) et un matériau "résistant" a une grande résistance électrique (par exemple, une isolation de câble en caoutchouc). Certains matériaux intéressants sont appelés semi-conducteurs (par exemple, les silicons), car ils peuvent modifier facilement leur résistance. Dans certaines conditions, un semi-conducteur peut agir en tant que conducteur et, dans d'autres conditions, il peut devenir une résistance.
L’électricité préfère toujours traverser le matériau avec la moindre résistance. Ainsi, si une cathode et une anode sont connectées avec deux fils, l’un ayant une résistance très élevée et l’autre avec une résistance très faible, la majorité des électrons traversera le câble à faible résistance et presque aucun ne traverse le matériau à haute résistance.
Le moyen age
Commutateurs et transistors
Les interrupteurs / bascules ressemblent à vos interrupteurs ordinaires. Un interrupteur peut être placé entre deux fils pour couper et / ou rétablir le flux d’électricité. Les transistors fonctionnent exactement comme un interrupteur de lumière, sauf qu'au lieu de connecter et de déconnecter physiquement les fils, un transistor connecte / déconnecte le flux électrique en modifiant sa résistance en fonction de la présence d'électricité dans le nœud de base et, comme vous l'avez peut-être déjà deviné Je sais que les transistors sont fabriqués à partir de semi-conducteurs, car nous pouvons en changer pour devenir soit une résistance, soit un conducteur pour connecter ou déconnecter des courants électriques.
Un type de transistor commun, le transistor de jonction bipolaire NPN (BJT), comporte trois noeuds: "base", "collecteur" et "émetteur". Dans un NPN BJT, l'électricité peut circuler du nœud "émetteur" vers le nœud "collecteur" uniquement lorsque le nœud "base" est chargé. Lorsque le nœud de base n'est pas chargé, pratiquement aucun électron ne peut circuler et lorsque le nœud de base est chargé, des électrons peuvent alors circuler entre l'émetteur et le collecteur.
Le comportement d'un transistor
(Je vous suggère fortement de lire ceci avant de continuer car cela peut expliquer mieux que moi avec des graphiques interactifs)
Supposons qu'un transistor soit connecté à une source électrique à sa base et à son collecteur, puis que nous connectons un câble de sortie près de son collecteur (voir la figure 3 à l' adresse http://www.spsu.edu/cs/faculty/bbrown/web_lectures). / transistors / ).
Lorsque nous n'appliquons ni l'électricité à la base ni au collecteur, aucune électricité ne peut circuler car il n'y a pas d'électricité à proprement parler:
B C | E O
0 0 | 0 0
Lorsque nous appliquons de l'électricité sur le collecteur mais pas sur la base, elle ne peut pas parvenir à l'émetteur car la base devient un matériau à haute résistance. Ainsi, l'électricité s'échappe sur le fil de sortie:
B C | E O
0 1 | 0 1
Lorsque nous appliquons de l’électricité à la base mais pas au collecteur, aucune électricité ne peut circuler car il n’ya pas de différence de charge entre le collecteur et l’émetteur:
B C | E O
1 0 | 0 0
Lorsque nous appliquons de l'électricité à la base et au collecteur, nous obtenons de l'électricité traversant le transistor, mais comme le transistor a maintenant une résistance inférieure à celle du fil de sortie, il n'y a presque plus d'électricité qui traverse le fil de sortie:
B C | E O
1 1 | 1 O
Des portes logiques
Lorsque nous connectons l’émetteur d’un transistor (E1) au collecteur d’un autre transistor (C2), nous connectons une sortie à proximité de la base du premier transistor (O) (voir la figure 4 dans http://www.spsu.edu). / cs / faculty / bbrown / web_lectures / transistors / ), il se passe alors quelque chose d’intéressant. Disons aussi que nous appliquons toujours de l'électricité au collecteur du premier transistor (C1) et que nous ne jouons qu'avec les nœuds de base des transistors (B1, B2):
B1 B2 C1 E1/C2 | E2 O
----------------------+----------
0 0 1 0 | 0 1
0 1 1 0 | 0 1
1 0 1 0 | 0 1
1 1 1 1 | 1 0
Résumons le tableau afin que nous ne voyions que B1, B2 et O:
B1 B2 | O
---------+-----
0 0 | 1
0 1 | 1
1 0 | 1
1 1 | 0
Et bien , si vous êtes familier avec la logique booléenne et / ou les portes logiques, vous devriez remarquer qu'il s'agit précisément de la porte NAND. Et si vous êtes familier avec la logique booléenne et / ou les portes logiques, vous savez peut-être aussi qu'un NAND (ou un NOR) est fonctionnellement complet , c'est-à-dire que vous n'utilisez que NAND, vous pouvez construire toutes les autres portes logiques et le reste de la vérité. les tables. En d’autres termes, vous pouvez concevoir une puce informatique entière en utilisant uniquement les portes NAND.
En fait, la plupart des processeurs sont (ou est-il déjà utilisé?) Conçus à l'aide de NAND uniquement, car leur fabrication coûte moins cher que d'utiliser une combinaison de NAND, NOR, AND, OU, etc.
Dériver les autres opérateurs booléens de NAND
Je ne décrirais pas comment rendre tous les opérateurs booléens, uniquement les opérateurs NOT et AND, vous pouvez trouver le reste ailleurs.
Avec un opérateur NAND, nous pouvons alors construire une porte NOT:
Given one input B
O = NAND(B, B)
Output O
Avec un opérateur NAND et NOT, nous pouvons alors construire une porte AND:
Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O
Nous pouvons construire d'autres portes logiques de la même manière. Puisque la porte NAND est fonctionnellement complète , il est également possible de construire des portes logiques avec plus de 2 entrées et plus d'une sortie, je ne vais pas discuter ici de la façon de construire de telles portes logiques.
Âge des Lumières
Construire une machine de Turing à partir de portes booléennes
Un processeur ne sont qu'une version plus compliquée d'une machine de Turing. Les registres de la CPU correspondent à l'état interne de la machine Turing et la RAM à la bande d'une machine.
Une machine de Turing (CPU) peut faire trois choses:
- lire un 0 ou un 1 de la bande (lire une cellule de mémoire de la RAM)
- changer son état interne (changer ses registres)
- se déplacer à gauche ou à droite (lire plusieurs positions de la RAM)
- écrivez 0 ou 1 sur la bande (écrivez dans une cellule de la mémoire dans la RAM)
Pour ce faire, nous construisons la machine de Turing à 2 états et à 3 symboles de Wolfram en utilisant une logique combinatoire (les processeurs modernes utiliseraient le microcode, mais ils sont plus complexes que nécessaire.
La table d'état de la machine de Turing de Wolfram (2,3) est la suivante:
A B
0 P1,R,B P2,L,A
1 P2,L,A P2,R,B
2 P1,L,A P0,R,A
Nous voulons réencoder la table d'états ci-dessus en tant que table de vérité:
Let I1,I2 be the input from the tape reader (0 = (0,0), 1 = (0,1), 2 = (1,0))
Let O1,O2 be the tape writer (symbol encoding same as I1,I2)
Let M be connected to the machine's motor (0 = move left, 1 = move right)
Let R be the machine's internal state (A = 0, B = 1)
(R(t) is the machine's internal state at timestep t, R(t+1) at timestep t+1)
(Note that we used two input and two outputs since this is a 3-symbol Turing machine.)
R 0 1
I1,I2
(0,0) (0,1),1,1 (1,0),0,0
(0,1) (1,0),0,0 (1,0),1,1
(1,0) (0,1),0,0 (0,0),1,0
The truth table for the state table above:
I1 I2 R(t) | O1 O2 M R(t+1)
-------------+--------------------
0 0 0 | 0 1 1 1
0 0 1 | 1 0 0 0
0 1 0 | 1 0 0 0
0 1 1 | 1 0 1 1
1 0 0 | 0 1 0 0
1 0 1 | 0 0 1 0
Je ne vais pas vraiment construire une telle porte logique (je ne sais pas comment la dessiner en SE et elle va probablement être assez énorme), mais puisque nous savons que la porte NAND est fonctionnellement complète , nous avons un moyen pour trouver une série de portes NAND qui implémenteront cette table de vérité.
Une propriété importante de Turing Machine est qu'il est possible d'émuler un ordinateur à programme enregistré à l' aide d'une machine de Turing qui possède uniquement une table d'états fixe. Par conséquent, toute machine universelle Turing peut lire son programme sur la bande (RAM) au lieu d’avoir à coder en dur ses instructions dans la table d’état interne. En d’autres termes, notre (2, 3) Turing Machine peut lire ses instructions à partir des broches I1, I2 (en tant que logiciel) au lieu d’être codées en dur dans l’implémentation de la porte logique (en tant que matériel).
Microcodes
En raison de la complexité croissante des processeurs modernes, il devient extrêmement difficile d’utiliser la logique combinatoire seule pour concevoir un processeur complet. Les processeurs modernes sont généralement conçus comme un interpréteur d'instructions de microcodes; Un microcode est un petit programme intégré dans la CPU qui est utilisé par la CPU pour interpréter le code machine réel. Cet interpréteur de microcode lui-même est généralement conçu en utilisant la logique combinatoire.
Register, Cache et RAM
Nous avons oublié quelque chose ci-dessus. Comment nous souvenons-nous de quelque chose? Comment mettons-nous en œuvre la bande et la RAM? La réponse se trouve dans un composant électronique appelé condensateur. Un condensateur est comme une batterie rechargeable. Si un condensateur est chargé, il retient les électrons supplémentaires et peut également renvoyer des électrons aux circuits.
Pour écrire sur un condensateur, remplissez-le d'électron (écriture 1) ou drainez tous les électrons du condensateur jusqu'à ce qu'il soit vide (écriture 0). Pour lire la valeur d'un condensateur, nous essayons de le décharger. Si, lorsque nous essayons de nous décharger, aucune électricité ne coule, alors le condensateur est vide (lire 0), mais si nous détectons de l'électricité, le condensateur doit alors être chargé (lire 1). Vous remarquerez peut-être que la lecture d'un condensateur draine son magasin d'électrons, les RAM modernes disposent des circuits permettant de recharger périodiquement le condensateur afin de pouvoir conserver leur mémoire aussi longtemps qu'il y a de l'électricité.
Il existe plusieurs types de condensateurs utilisés dans une CPU, les registres de la CPU et les caches de processeur de niveau supérieur sont réalisés à l'aide de "condensateurs" à très grande vitesse construits à partir de transistors (il n'y a donc presque pas de "retard" en lecture / écriture). eux), on parle de RAM statique (SRAM); alors que la mémoire vive principale est constituée de condensateurs plus lents et beaucoup moins chers, ils sont appelés RAM dynamique (DRAM).
L'horloge
Un composant très important d'un processeur est l'horloge. Une horloge est un composant qui "tique" régulièrement pour synchroniser le traitement. Une horloge contient généralement un quartz ou d’autres matériaux ayant une période d’oscillation bien connue et relativement constante, et le circuit d’horloge maintient et mesure cette oscillation pour conserver sa valeur temporelle.
Les opérations de la CPU sont effectuées entre les ticks d'horloge et les lectures / écritures sont effectuées dans les ticks pour garantir que tous les composants se déplacent de manière synchrone et ne se piétinent pas les uns dans les autres dans des états intermédiaires. Dans notre (2, 3) machine de Turing, entre les signaux d'horloge, l'électricité passe par les portes logiques pour calculer la sortie de l'entrée (I1, I2, R (t)); et dans les tics d'horloge, le graveur écrit O1, O2 sur la bande, le moteur se déplace en fonction de la valeur de M et le registre interne est écrit à partir de la valeur de R (t + 1), puis le lecteur de bande lit la bande en cours et met la charge dans I1, I2 et le registre interne est relu vers R (t).
Parler avec les périphériques
Notez comment la (2, 3) machine de Turing s'interface avec son moteur. C’est une vue très simplifiée de la façon dont un processeur peut s’interfacer avec un matériel arbitraire. Le matériel arbitraire peut écouter ou écrire sur un fil spécifique pour les entrées / sorties. Dans le cas de la (2, 3) machine de Turing, son interface avec le moteur est un simple fil qui demande au moteur de tourner dans le sens horaire ou anti-horaire.
Ce qui n’a pas été dit sur cette machine, c’est que le moteur devait disposer d’une autre "horloge" fonctionnant de manière synchronisée avec "l’horloge" interne de la machine pour savoir quand démarrer et arrêter de fonctionner. C’est donc un exemple de transmission de données synchrone . L'autre alternative couramment utilisée, la transmission asynchrone, utilise un autre fil, appelé ligne d'interruption, pour communiquer les points de synchronisation entre la CPU et le périphérique asynchrone.
L'ère numérique
Code machine et assemblage
Le langage d'assemblage est une mnémonique lisible par l'homme pour les codes machine. Dans le cas le plus simple, il existe un mappage un à un entre le code assemblage et le code machine; bien que, dans les langages d'assemblage modernes, certaines instructions puissent être mappées sur plusieurs opcodes.
Langage de programmation
Nous connaissons tous cela, n'est-ce pas?
Ouf, enfin fini, j'ai tapé tout cela en seulement 4 heures, donc je suis sûr qu'il y a une erreur quelque part (je suis avant tout un programmeur, pas un ingénieur électricien ni des physiciens, donc il pourrait y avoir plusieurs choses qui sont manifestement fausses). S'il vous plaît, si vous trouvez une erreur, n'hésitez pas à donner un @yell ou à la réparer vous-même si vous avez le représentant ou créez une réponse complémentaire.