L’ordinateur démystifié
Le 4 juin 1996, la fusée Ariane 5 explose peu après son décollage. Un nombre codé sur 64 bits dans la centrale inertielle a été converti en un nombre entier sur 16 bits, valeur bien supérieure aux possibilités de 2^16 (65.536) et cause de l'overflow (l'anglais est indissociable de l'informatique et mieux vaut utiliser un langage commun). Un microprocesseur ne connait que deux états logiques, l'état haut « 2 » Volts (la tension a diminué avec la miniaturisation) et l'état bas 0 V, le courant passe c'est 1, il ne passe pas c'est 0. Si une case mémoire (adresse) contient 1011, cela signifie qu'un transistor est à l'état haut, le suivant à l'état bas et les deux derniers à l'état haut. Le nombre de transistors placés sur la puce dépend de la taille de la gravure (l'échauffement augmente avec la réduction de la gravure).
L'unité d'information élémentaire traité par le Central Processing Unit est le bit (binary digit) groupé en octet afin d'uniformiser la longueur des données et des instructions. Lorsque vous saisissez la touche « A » sur votre clavier, cela correspond à 01000001 en binaire (code ASCII), l'UNICODE permet d'utiliser de nombreux alphabets étrangers, la lettre A correspond à 0041, valeur hexadécimale. Un octet égal 8 bits, soit un décalage 2^8 = 2 x 2 x 2 x 2 x... 256 (valeur comprise entre 0 et 255). L'octet se lit de droite à gauche, on ajoute des 0 devant les bits les plus significatifs, le chiffre 15 par exemple, est codé 00001111 (8+4+2+1), les quatre premiers bits sont non significatifs. La quantité d'informations s'exprime en octets : 1 ko = 10^3 et non 2^10 (1024) - 1 Mo = 10^6 - 1 Go = 10^9 - 1 To = 10^12. Avec 64 bits, 64^2 adresses sont accessibles, un plus grand nombre de données peut être traité simultanément et le calcul de grands nombres s'en trouve facilité.
Le CPU communique avec la mémoire centrale du système via un réseau de connexions câblées. Un bus fait référence à des fils en nappe et aux conducteurs gravés sur le circuit imprimé chargés d'interagir avec : le système d'adressage, l'acheminement des données, la synchronisation (contrôle) et permettre l'ajout de matériel (imprimante, scanner, lecteur CD, carte son, etc) via un port série, parallèle, un slot, prise USB, etc. Le chipset fait office de « station d'aiguillage » entre les différents bus(es) et le CPU. Un processeur multi-cœurs (cores) permet d'accomplir une tâches pendant qu'un autre un cœur en accomplit une autre, et l'hyper-threading divise chaque cœur en deux espaces virtuels afin d'optimiser la vitesse d'exécution.
L'algorithme s'apparente à une recette de cuisine, les données et instructions suivent pas à pas les lignes du programme rédigé (code source), et la programmation consiste à modifier les données à l'aide d'opérateurs logiques : AND, NAND, OR, NOR, XOR, etc. Chaque donnée placée dans une case (adressage) est traitée par le microprocesseur qui calcule les données délivrées en sortie. Les données en attente de traitement sont stockées dans une mémoire, les premières entrées sont les premières sorties (First In, First Out), dans la pile (stack) c'est l'inverse, la dernière empilée sort en premier (Last In, First Out). Le traitement des données est pris en charge par des portes logiques symétriques (vrai/faux, oui/non), l'activation de l'une bloque l'autre ; la multiplication est en fait une suite d'additions et la division une suite de soustractions et de décalages. Chaque instruction est précédée de son OPCODE. Un cycle machine correspond à l'exécution d'une instruction élémentaire, il peut nécessiter de 1 à 10 cycles d'horloge selon le type de microprocesseur. Un ordinateur tournant à 3 GHz effectue trois milliards de cycles par seconde. Le turbo boost augmente momentanément la vitesse d'horloge (overclocking), et réduire la vitesse d'horloge permet de gagner en autonomie.
Pour interagir avec le microprocesseur il faut passer par un interprète, l'assembleur (code source ->code assembleur ->binaire). Le premier langage inventé par Grace Hopper en 1953 comprenait une dizaine d'instructions : INC (increment), JUMP (saut), MOV (déplacement), ADD, etc., et chaque instruction correspond à une action du microprocesseur. L'assembleur est généralement dédié à un type de processeur, Pentium, AMD, ARM, etc., et ne permet guère la portabilité (fonctionnement sur une autre « bécane »). Un désassembleur fait l'opération inverse permettant d'analyser le langage machine et les instructions en binaire et/ou hexadécimal afin de repérer un bug, une faille, voire la présence d'un malware. L'hexadécimal ou base 16 reste plus maniable que le binaire : 0,1,2,3...,9, A (10), B (11), C (12) D (13), E (14), F (15), soit 16 x 16 valeurs de 0 à 255 ; en binaire 1+1+1+1+1+1+1+1 (128+64+32+16+8+4+2+1). Prenons la lettre A qui correspond à la valeur décimale 65, à 010000010 en binaire et à 41 en hexadécimal, pour traduire 41 en binaire, il suffit de traduire 4 en binaire (0100) puis 1 (0001) et d'assembler les deux quartets (01000001).
Au démarrage, l'ordinateur boot (amorce) l'OS (Windows, Androïde, Linux, Mac) ; le BIOS (Basic Imput Output System) a été remplacé fin 2012 par l'UEFI car il ne permettait plus la gestion de disques durs supérieurs à 2 To, était inadapté au mode à 32 bits, l'espace alloué à la mémoire trop restreint et restait la porte d'entrée à une la prise de contrôle extérieure. L'Unified Extensible Firmware Interface en mode 64 bits est beaucoup plus rapide, elle occupe une mémoire flash et elle peut être exécutée à partir d'une clé USB. Le Secure boot offre un démarrage sécurisé en s'opposant aux chargements de pilotes non autorisés tout en permettant des fonctionnalités réseau dont la prise de contrôle à distance. Il semblerait que BadBIOS puisse le « véroler »... (L'utilisation d'un ancien modèle d'ordinateur couplé avec un MODEM, adressage dynamique, peut rendre bien des services).
Le logiciel sert d'interface entre l'utilisateur et un utilitaire : traitement de texte, navigateur, chiffrement, retouche photographique, etc. Chaque langage de programmation a ses spécificités, le langage interprété exécute les lignes de code une par une, s'il fonctionne sur tous les ordinateurs (portabilité), il doit par contre faire appel à un logiciel (interpréteur). N'importe qui peut prendre connaissance du code source (ce que vous saisissez), le modifier, voire le copier ! Imaginez le désastre pour des transactions financières ou des communications confidentielles...
Le langage compilé (C par exemple) le code source est compilé en binaire pour alimenter directement le système d'exploitation. L'Operating System gère et contrôle le hardware (matériel), le software (logiciel) et le firmware (programme constructeur). Le compilateur génère un fichier exécutable plus difficilement modifiable, chaque modification du fichier source nécessite la recompilation du programme.
Le langage intermédiaire (Java, Python, etc.) est un trait d'union entre ces deux catégories car il peut subir une compilation intermédiaire vers un fichier différent du fichier source non exécutable.
L'ordinateur est étoffé de périphériques, disque dur, clavier, souris, écran, carte WI-FI, imprimante, scanner, etc., qui ont chacun besoin de leur pilote ou driver (petit programme) pour fonctionner correctement. Les plus courants sont généralement livrés avec l'OS. Le kernel (noyau) désigne la couche logiciel de l'OS qui fait office de chef d'orchestre pour gérer les ressources et l'espace mémoire disponible (RAM). Si vous téléchargez un programme, prenez toujours la précaution de créer un fichier pour l'accueillir, sinon il pourrait être dirigé vers l'OS par défaut !
Le patch est un correctif pour corriger un bug (terme popularisé par Grace Hopper en 1946, suite à un dysfonctionnement de l'ordinateur Mark II dû à la présence d'un papillon de nuit dans la machine) qui peut se révéler être une porte ouverte pour un « exploit »... Un script correspond à un petit programme rédigé en langage interprété de très haut niveau (Javascript, active X) chargé d'exécuter une tâche précise, voire d'accéder aux couches inférieures de l'OS... Visual basicscript peut : ouvrir, lire, écrire des fichiers sur le système de fichier local utilisateur. Le risque majeur de VBS est lié à sa capacité à activer des contrôles active X à l'insu de l'utilisateur ! PatchGuard (Windows 64 bits) est censé rendre moins vulnérable le noyau de l'OS aux rootkits, mais un conflit entre l'antivirus et le kernel est susceptible de déjouer la protection...
Vous souhaitez vous initier au hardware, à la programmation ou conduire à bien un projet quelconque ? Le micro-ordinateur Raspberry à peine plus grand qu'un paquet de cigarettes est tout désigné, vous pouvez acquérir une carte mère pour une vingtaine d'euros et un kit pour moins d'une centaine. Compatible avec GNU/Linux, vous pourrez réaliser un VPN, un serveur Web, piloter un robot, etc. Le Web regorge de projets dans tous les domaines, mêmes les moins avouables, et seule notre imagination en limite les applications.
°°°°°°°°°°°°°°°°°°
49 réactions à cet article
Ajouter une réaction
Pour réagir, identifiez-vous avec votre login / mot de passe, en haut à droite de cette page
Si vous n'avez pas de login / mot de passe, vous devez vous inscrire ici.
FAIRE UN DON