C'est presque embarrassant de demander ... J'ai un diplôme en informatique (et un deuxième en cours). Je travaille comme développeur .NET à temps plein depuis près de cinq ans. Je semble généralement compétent dans ce que je fais.
Mais je ne sais pas comment fonctionnent les ordinateurs!
S'il te plaît, nu avec moi une seconde. Un rapide Google de "Comment fonctionne un ordinateur" donnera de nombreux résultats, mais j'ai eu du mal à en trouver un qui réponde vraiment à ce que je recherche. Je me rends compte que c’est une question énorme, donc si vous pouvez me donner des mots-clés ou une indication.
Je sais qu'il y a des composants ... l'alimentation, la carte mère, la RAM, le processeur, etc. ... et j'ai une "idée générale" de ce qu'ils font. Mais je ne comprends vraiment pas comment vous passez d'une ligne de code comme Console.Readline()
.NET (ou Java ou C ++) et que vous la faites réellement faire .
Bien sûr, je suis vaguement au courant de MSIL (dans le cas de .NET) et du fait qu’un peu de magie se produit avec le compilateur JIT et que cela se transforme en code natif (je pense). On me dit que Java est similaire et que C ++ coupe la dernière étape.
J'ai fait l'assemblage du mainframe, il y a quelques années. Je me souviens qu'il y avait des instructions et des registres de CPU, et j'ai écrit du code ... et puis un peu de magie est arrivé ... et mon programme fonctionnerait (ou planterait). D'après ce que j'ai compris, un "émulateur" simulerait ce qui se passe lorsque vous appelez une instruction et mettrait à jour les registres de la CPU; mais qu'est-ce qui fait que ces instructions fonctionnent comme elles le font?
Est-ce que cela se transforme en une question électronique et non pas une question «informatique»? Je suppose qu'il n'y a aucune raison pratique pour que je comprenne cela, mais je sens que je devrais pouvoir le faire.
(Oui, c'est ce qui se passe lorsque vous passez une journée avec un petit enfant. Cela leur prend environ 10 minutes et cinq répétitions pour demander "Pourquoi?" Pour que vous réalisiez à quel point vous ne savez pas)
Emulator
. C'est un groupe de vrais circuits à semi-conducteurs avec des centaines (des milliers) de fils d'entrée et de sortie et des milliards de portes logiques. Le aEmulator
été utilisé à des fins pédagogiques uniquement.Réponses:
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:
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:
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:
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:
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):
Résumons le tableau afin que nous ne voyions que B1, B2 et O:
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:
Avec un opérateur NAND et NOT, nous pouvons alors construire une porte AND:
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:
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:
Nous voulons réencoder la table d'états ci-dessus en tant que table de vérité:
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.
la source
De Nand à Tetris en 12 étapes
Je pense que ce sera absolument parfait pour vous:
De Nands à Tetris en 12 étapes
la source
Si vous avez terminé l'assemblage, il ne reste en réalité que deux ou trois couches à comprendre:
Le dernier (Microcode) est ce qui m'a fait "cliquer" pour moi, parce qu'il a comblé le fossé entre l'électronique et le code.
la source
Vous trouverez ici un exemple de programme de cours de premier cycle CS qui explique précisément ce que vous avez demandé (cours CS101 de IDC.AC.IL.) . Il est basé sur ce livre de presse du MIT: " Les éléments des systèmes informatiques: Construire un ordinateur moderne à partir de principes premiers ".
la source
Répondre pleinement à cette question prendrait un livre entier. Heureusement, quelqu'un a déjà écrit ce livre. C'est ce qu'on appelle Code: Le langage caché du matériel informatique et des logiciels de Charles Petzold. C'est une lecture très informative et très divertissante.
la source
Je recommande vivement le code de Charles Petzold. Le livre est à la fois une leçon d’histoire et un aperçu technique de la construction d’un ordinateur. En commençant par expliquer de simples commutateurs télégraphiques, le livre montre le fonctionnement des transistors, puis passe aux portes logiques, aux ordinateurs programmables, à des éléments plus complexes. C'est aussi très bien écrit et pourrait probablement être saisi par tous ceux qui ont assez de curiosité.
la source
Il sera bien trop difficile (et long!) D’énumérer tout ce que vous devrez peut-être savoir pour bien comprendre ce que vous devez savoir. Andrew Tanenbaum: Structured Computer Organization, ouvrage célèbre qui répond effectivement à toutes ces questions .
Ce livre vous emmène en fait de l'ordinateur physique sur votre bureau jusqu'aux portes logiques et à l'algèbre booléenne, puis montre un exemple d'architecture pour vous montrer comment tout se passe réellement dans un tel système.
(Une remarque: c'est très cher, cela fait environ 800 pages. C'est probablement bien de se procurer une version de seconde main ou une édition plus ancienne. Les concepts n'ont pas changé.)
la source
Eh bien, il faut beaucoup de couilles pour dire cela et demander je suppose.
En gros, le code est réduit de plus en plus au code de niveau inférieur plus compliqué. Jusqu'au niveau du code d'assemblage avec les registres push and move .. etc ...
Ensuite, le matériel prend ce code et agit en conséquence. La plupart du temps, le matériel aura ses propres instructions sur la façon de faire les choses. Donc, il peut y avoir une instruction simple telle qu'un PUSH où un registre (emplacement mémoire) obtient une valeur telle que 1 ou 2 ou autre.
C'est définitivement une question d'ordinateur. Et aussi une programmation. Certains programmeurs programment le matériel qui va prendre votre code et lui faire faire quelque chose mais à un niveau très bas. C'est aussi une question d'électronique.
la source
Il y a des appareils.
Ensuite, il existe des pilotes de périphérique qui interagissent avec ces périphériques. Partie écrite en C, partie en assemblage généralement.
Le système d'exploitation interagit avec le logiciel d'application à une extrémité et les pilotes de périphérique de l'autre pour communiquer avec le matériel réel.
Si vous êtes vraiment intéressé, pourquoi ne pas pirater un noyau Linux pour en savoir plus?
la source
Au cœur des choses, il s’agit d’une question d’électronique, même si les bases de cette question auraient dû être abordées dans le cours d’enquête pour tous les diplômes de CS. Tout le matériel agit en fonction de portes programmées au niveau des composants. Ce sont les opérations logiques les plus élémentaires: NOT, AND, OR, XOR, NAND, NOR. Chaque porte a une fonction spécifique:
La porte NOT prend une valeur d'entrée et produit une valeur de sortie, elle obtient 0 ou 1 et génère le contraire.
La porte ET prend deux valeurs d'entrée et produit une valeur de sortie. Elle obtient toute combinaison de 0 et 1 et génère 0 pour toute combinaison sauf deux, pour lesquelles elle génère un 1.
La porte OU fonctionne beaucoup comme la porte ET, mais produira un 1 pour chaque combinaison de 0 et 1, sauf deux zéros, pour lesquels elle génère un 0.
La porte XOR est à nouveau similaire aux portes ET et OU, mais elle produira un 0 lorsque les deux entrées sont identiques et un 1 lorsque les deux entrées sont différentes.
La porte NON-ET est l'opposé logique de la porte ET et la porte NOR est l'opposé logique de la porte OU.
En d'autres termes, au niveau matériel, tout se résume à la plus fondamentale des expressions logiques binaires. Tout le reste n’est qu’une transition d’un niveau de programmation supérieur à un niveau inférieur jusqu’à atteindre ce dernier niveau.
la source
Pour la partie sur la transformation d'un programme en langage de haut niveau en instructions machine, tout livre de compilateur doit remplir la facture. Par exemple le livre du dragon .
Pour la partie "comment les instructions sont exécutées?" Organisation et conception de l'ordinateur: l'interface matériel / logiciel doit remplir la facture.
la source
Bien que je trouve stupéfiant que quelqu'un puisse terminer un cours en CS sans comprendre le matériel, je suppose qu'il est tout à fait possible qu'un cours puisse se concentrer uniquement sur la théorie en tant que branche des mathématiques, plutôt que sur les détails d'ingénierie et de mise en œuvre. Les vénérables conférences SICP (telles que données dans les années 1980) semblaient être comme ça.
Lors de mon cours de CS, il y a deux décennies, une édition antérieure d' ordinateurs: de la logique à l'architecture était une lecture obligatoire dès la première année.
Quelque chose comme cela devrait combler les lacunes.
Ou encore, Open Courseware du MIT devrait avoir quelque chose d’aide.
la source