Comment fonctionne exactement un programme informatique ? Comment des lignes de texte disent-elles à une boîte de fils de faire quelque chose ? Je croyais que les ordinateurs étaient basés sur des 0 et des 1 ? Comment cela se traduit-il ?


Oh wow. Quelle bonne question. Il faut connaître un peu d'architecture informatique pour bien comprendre ce qui se passe&. Les ordinateurs fonctionnent effectivement avec des 0 et des 1. Laissez-moi commencer par le tout, tout en bas.

  1. La partie centrale d'un ordinateur est appelée CPU (Central Processing Unit). Les CPU modernes comprennent beaucoup de choses, mais expliqué simplement, le CPU est un tas de microélectronique qui peut exécuter des instructions.

main-qimg-59acf5b686888287a39b51be4d2184bf.webp

  1. Vous pouvez penser au CPU comme un tas de portes de transistors logiques. Un grand nombre d'entre elles. Ces portes sont constituées de transistors et d'autres pièces électroniques qui mettent en œuvre des opérateurs logiques très simples : AND, OR et NOT. Les unités centrales très simples comptaient autrefois des milliers de transistors. Pour saisir la complexité des unités centrales modernes, il faut savoir que certaines d'entre elles comptent plus de 2,5 milliards de transistors. Comme vous l'avez sans doute deviné, ils sont minuscules. Mais en voici d'autres, pas si minuscules que ça :

main-qimg-b59ee324cb1fbe8b03ffb3adcf7d8ea4.webp

  1. (notez les trois connecteurs - deux entrées, une sortie)
  2. Les transistors fonctionnent sur des courants électriques. C'est de là que viennent vos 1 et vos 0. Un courant existe - 1. Pas de courant - 0. Les opérations logiques modifient ces courants. Par exemple, AND signifie que la sortie n'aura du courant que si ses deux entrées en ont (1 AND 1 = 1). OR signifie qu'un seul suffit (1 OR 0 = 1). NOT inverse simplement l'existence du courant (NOT 0 = 1).
  3. Croyez-le ou non, ces trois opérateurs logiques, lorsque vous les combinez, suffisent à mettre en œuvre toute la logique, y compris les opérations arithmétiques sur les entiers (+, -, /, *), et par conséquent à peu près tout le reste. C'est juste qu'il faut en combiner un grand nombre. Vous pouvez y penser de la manière suivante : les nombres sont représentés par des 1 et des 0 dans le système numérique binaire, donc l'addition est juste un ensemble d'opérations logiques entre les 1 et les 0 des deux nombres. Voici, par exemple, un couple de transistors qui additionnent deux bits. Combinez-en plusieurs et vous pouvez additionner de grands nombres.

main-qimg-a2c3b3248175a9f1553f77eaa8e3aacd.webp

  1. OK, voici le CPU et sa logique. Mais d'où viennent les instructions ? Puisque nous savons comment des opérations comme l'addition sont mises en œuvre, nous pouvons maintenant leur donner une sorte de code. Par exemple, nous pouvons convenir que 45 signifie ajouter deux nombres, et que 87 signifie les diviser (bien sûr, nous devrions également spécifier exactement quoi). Ce que fait le CPU, c'est lire ces nombres (code) et exécuter l'instruction correspondante.
  2. Dans les CPU modernes, ce que je viens de décrire est appelé Microcode, et le microcode contient les instructions les plus basiques. Le microcode est ensuite utilisé pour mettre en œuvre un ensemble plus compliqué d'instructions, qui est appelé code machine. Le code machine est également constitué de chiffres, mais les instructions sont un peu plus compliquées. À titre d'exemple imaginaire, disons que l'instruction en code machine est 76 2 3 4. Elle pourrait signifier "additionner deux nombres (opcode 76) de la mémoire en positions 2 et 3, et écrire le résultat en position 4". Son implémentation en microcode contient des commandes atomiques beaucoup plus simples, telles que "récupérer le nombre en position 2". Ensuite, le processeur les exécute.
  3. Maintenant que j'ai mentionné la mémoire. La mémoire est plus facile à comprendre - elle contient juste un grand nombre de ces 0 et 1 qui peuvent être modifiés. Et elle ne ressemble à rien d'excitant, aussi :

main-qimg-8a36945b1c58fe41c7109ac3cd916efc.webp

  1. Dans presque toutes les architectures informatiques existantes (grâce au type nommé Von Neumann), le code d'instructions dont nous avons parlé plus haut est stocké en mémoire, comme n'importe quelle autre donnée. Les instructions que j'ai mentionnées précédemment (76 2 3 4) sont également stockées en mémoire. Pour allumer l'ordinateur (CPU), vous devez le diriger vers un emplacement de la mémoire contenant des instructions et dire - Go ! Il lira les instructions une par une et les exécutera de la manière que j'ai décrite ci-dessus.
  2. Bien sûr, puisque les ordinateurs ne comprennent que le courant électrique ou son absence (1s et 0s), toutes les données, y compris ces numéros d'instructions, sont stockées dans le système numérique binaire. Le système binaire est en fait assez facile à comprendre. Nous utilisons le système décimal, car nous avons 10 doigts. Chaque nombre peut être l'un des 10 chiffres possibles : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Il n'y a rien de spécial à propos de 10. On peut imaginer que des extraterrestres avec 8 doigts, pourraient utiliser un système numéral avec seulement 8 chiffres : 0, 1, 2, 3, 4, 5, 6, 7.

main-qimg-c3a65c5b2ab6d11f3b52058ab04e6dd9.webp

  1. J'utilise le système numéral Octal (8)!

    Vous pouvez penser au binaire comme un système numéral que certains ET très malchanceux avec seulement deux doigts utiliseraient. Voici'un exemple de conversion de binaire en décimal:

main-qimg-1787b1bb3353b27292701d16ff972d7c

  1. Phew ! Maintenant, nous arrivons à quelque chose. Mais nous sommes loin d'avoir terminé. Vous voyez, l'écriture des nombres, même dans le système décimal, est très, très peu pratique et source d'erreurs. Donc, la première chose qui apparaît est le langage d'assemblage. Le langage d'assemblage est juste une représentation mnémonique du code machine. Par exemple, notre instruction préférée 76 2 3 4, pourrait être représentée comme quelque chose comme:

    ADD [2], [3] -> [4] (pas un vrai code d'assemblage)

  2. Le premier Assembler (le programme qui traduit le langage d'assemblage en code machine) bien sûr, devait être écrit en code pur (chiffres). Mais c'est relativement facile, car les commandes d'assemblage correspondent presque 1:1 au code machine.
  3. OK, maintenant c'est un peu mieux, mais le langage d'assemblage est encore beaucoup, beaucoup trop verbeux. Même les programmes simples, tels que lire l'entrée de l'utilisateur, ajouter 1 à elle, et l'imprimer en arrière contiennent beaucoup de commandes en langage d'assemblage. Il'est de très bas niveau et manque d'abstractions plus élevées.
  4. Entrez dans les langages de programmation. Ils sont beaucoup plus haut niveau, et vous pouvez exprimer des choses compliquées très succinctement par rapport aux langages d'assemblage. Vous pourriez écrire quelque chose comme ça :

    R = 2,0
    print "Carré du cercle de rayon %f est %f" % (R, 3,14*R*R)

    Cela se traduit par beaucoup de commandes en langage d'assemblage, ce qui est exactement ce que fait un Compilateur. Le compilateur prend un programme dans un langage d'abstraction relativement élevé comme l'exemple ci-dessus, et le convertit en un programme en langage d'assemblage (en fait, souvent directement en code machine, mais bon). Le tout premier compilateur, bien sûr, a dû être écrit en langage d'assemblage. Mais une fois que votre première version fonctionne, vous pouvez écrire les futures versions de votre compilateur dans le même langage que celui à partir duquel il compile. Après tout, un compilateur est comme n'importe quel autre programme informatique - il traduit les entrées en sorties.

  5. Donc, vous avez maintenant un compilateur. Et vous pouvez écrire des programmes et les compiler en code machine. Le résultat final est un fichier exécutable. Vous vous souvenez quand nous parlions de la façon dont le code machine est juste des nombres en mémoire ? Vous avez donc ces chiffres sur le disque, quelque part dans un fichier. Pour exécuter votre programme, l'ordinateur charge ce fichier en mémoire, pointe l'unité centrale au début du programme et dit : Go!
  6. Le dernier terme que vous voulez connaître pour avoir une compréhension approximative de l'architecture informatique est Système d'exploitation. Le système d'exploitation est essentiellement un programme qui démarre lorsque votre ordinateur démarre, et il gère des concepts encore plus compliqués (tels que le disque, le fichier, votre moniteur, votre clavier et votre souris, etc.) afin que chaque programme que vous écrivez n'ait pas à les implémenter encore et encore. Au lieu de savoir comment parler à un clavier, par exemple, un programme demande simplement au système d'exploitation, disons, la dernière touche que vous avez pressée, et le système d'exploitation prend en charge les détails de la communication avec le clavier (ou tout autre matériel d'ailleurs).

main-qimg-44378404da64b22b4377ef1f9e157024.webp

  1. Les trois systèmes d'exploitation de bureau les plus populaires

main-qimg-14921901148797b1b7981d4bbf72d8e9.webp

  1. Systèmes d'exploitation mobiles

    C'est le système d'exploitation qui introduit des concepts tels que Fichier et Dossier. C'est le système d'exploitation qui charge votre programme depuis le fichier exécutable dans la mémoire, pointe l'unité centrale au début de celui-ci et dit : Allez-y!

Félicitations ! Vous avez maintenant une compréhension approximative de l'architecture des ordinateurs!

main-qimg-790e56af154d4afc43ffd506a6215ce9.webp.