Partage de technologie

Comment fonctionnent les ordinateurs (connaissances de base pour les programmeurs)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Histoire du développement informatique

Le besoin informatique est répandu dans l’histoire de l’humanité et son développement est généralement passé par le processus de développement allant des outils informatiques généraux aux ordinateurs mécaniques en passant par les ordinateurs électroniques actuels.
Le besoin informatique de l’humanité nous pousse à inventer et à améliorer continuellement les ordinateurs. L'ère actuelle est l'ère des « ordinateurs électroniques », et la tendance du développement est la suivante : plus rapide, plus stable et plus petite.
Livres recommandés: "Une brève histoire des ordinateurs"

2. Architecture Von Neumann

Point 1
Les ordinateurs modernes, la plupart sont conformesL'architecture de von Neumann
Insérer la description de l'image ici

  • Unité centrale de traitement CPU : effectue des opérations arithmétiques et des jugements logiques
  • Mémoire : divisée en mémoire externe et mémoire interne, utilisée pour stocker des données (en utilisant le stockage binaire)
  • Périphérique d'entrée : périphérique utilisé par l'utilisateur pour donner des commandes à l'ordinateur.
  • Périphérique de sortie : un périphérique utilisé par l'ordinateur pour rapporter les résultats à l'utilisateur
    Pour l'espace de stockage
    Disque dur>Mémoire>>CPU
    Pour la vitesse d’accès aux données
    CPU>>Mémoire>Disque dur

Introduction à von Neumann (le père des ordinateurs)

John von Neumann (28 décembre 1903 - 8 février 1957), mathématicien et informaticien hongro-américain
Scientifique, physicien et l'un des mathématiciens les plus importants du XXe siècle. Von Neumann est titulaire d'un doctorat en mathématiques de l'Université de Budapest. Il est l'un des esprits scientifiques les plus polyvalents dans les domaines de l'informatique moderne, de la théorie des jeux, des armes nucléaires et des armes biologiques. père des ordinateurs modernes » et « le père de la théorie des jeux ».
Insérer la description de l'image ici

3. Flux de travail de base du processeur

Ensuite, nous utilisons un processus à partir de zéro pour construire un processeur étape par étape. Nous pouvons utiliser ce processus pour comprendre les principes de fonctionnement des principaux composants de l'ordinateur tels que le processeur et la mémoire.

3.1 Portes logiques

Interrupteur électronique – Relais mécanique
Insérer la description de l'image ici
Grâce à des commutateurs électroniques, nous pouvons implémenter des opérations logiques de 1 bit (bit) apparemment inutiles, mais au moins cela fonctionne, n'est-ce pas ?
Nous en apprendrons davantage sur la façon d'utiliser les commutateurs électroniques pour combiner des composants logiques vraiment utiles.
L’essence des futurs tubes à vide et transistors est de réaliser un travail similaire, mais les principes physiques sont plus complexes, nous ne vous expliquerons donc pas en profondeur.

3.2 Circuit de porte

Ensuite, nous apprenons à utiliser des commutateurs électroniques pour construire des composants utiles : des circuits de porte peuvent être réalisés.
Insérer la description de l'image ici
Insérer la description de l'image ici

3.3 Unité arithmétique et logique ALU (Unité arithmétique et logique)

L'ALU est le composant central des opérations arithmétiques et logiques dans les ordinateurs et constitue le cerveau mathématique de l'ordinateur. Ensuite, nous utilisons les portes logiques construites ci-dessus pour compléter notre propre ALU, pour apprendre et comprendre son mode de fonctionnement, afin de. approfondir notre compréhension de la pierre angulaire moderne des principes informatiques.
Insérer la description de l'image ici

3.3.1 Compréhension du système hexadécimal

Insérer la description de l'image ici
Insérer la description de l'image ici

3.3.2 Unité arithmétique

L'unité arithmétique est responsable de toutes les opérations numériques de l'ordinateur, telles que les quatre opérations arithmétiques. Bien sûr, elle peut faire bien plus que cela. Ensuite, je vais vous montrer comment implémenter un additionneur (additionneur) 8 bits pour couvrir. tout le processus et les autres opérations, je n'expliquerai plus l'appareil.
Insérer la description de l'image ici
Insérer la description de l'image ici
À ce stade, nous avons créé un additionneur 8 bits à partir de zéro. Les opérations de l'unité arithmétique sont bien sûr bien plus que celles-ci. En continuant à combiner des portes logiques, l'unité arithmétique peut effectuer des additions, des soustractions, des multiplications, des divisions et encore plus d'opérations arithmétiques, mais un additionneur suffit comme démonstration. En fait, la difficulté de réaliser des multiplicateurs et des diviseurs est plus élevée que celle des additionneurs et des soustracteurs. Si cela vous intéresse, vous pouvez essayer d'en savoir plus.

3.3.3 Unité logique

Les unités logiques sont principalement utilisées pour effectuer des opérations logiques. Les opérations les plus élémentaires sont les opérations AND, OR et NOT, mais il ne s'agit pas uniquement de comparaison de nombres à un bit.
Insérer la description de l'image ici

3.3.4 Symboles ALU

经过我们的努力,通过基本的逻辑门电路,我们⼀步步地做出了⼀个 8 位(bits) ALU,甚至比 Intel 74181 还要强大,Intel 74181 只是⼀个 4 位(bits) ALU(😀)。当然现代的计算机中的 ALU 部件非常强大,复杂度远远超过了我们的想象,32 位 甚至 64 位基本已经普及全球了。但无论如何,再复杂的ALU 也是芯片工程师像我们这样,一层又一层, 一步又一步地将其抽象出来的。ALU 是第⼀次将人类历史上的数学和逻辑学学科有机地结合起来,可以视为人类智慧发展的现代巅峰.
Insérer la description de l'image ici

3.4 Registre (Registre) et mémoire (RAM)

L'ALU seul ne suffit pas. Nous ne pouvons pas fournir de composants de stockage pour l'ALU, nous utilisons donc ensuite des circuits de porte pour expliquer brièvement la production de stockage. Notez que même si cela n'est pas clairement indiqué sur la figure, ces exigences de stockage doivent rester sous tension. , c'est-à-dire que ces stockages sont volatils (volatils)
Insérer la description de l'image ici
Nous cachons certains détails d'implémentation au milieu, et l'effet final est le suivant : lorsque la ligne de désactivation est définie, l'entrée est 1 et 1 est enregistrée lorsque l'entrée est 0, 0 est enregistré lorsque la ligne d'activation n'est pas en position. , l'écriture n'est pas valide.
Nous pouvons utiliser des serrures de porte pour créer les registres et la mémoire dont nous avons besoin.
Insérer la description de l'image ici
La construction de la mémoire est un peu plus compliquée que cela, mais les principes de base sont les mêmes. La mémoire construite de cette manière est appelée RAM (Random Access Memory) et peut prendre en charge la complexité temporelle O(1) pour accéder aux données à n'importe quel emplacement. Cela signifie que notre opération d'accès à l'indice de tableau est O(1).
prise en charge matérielle.

Insérer la description de l'image ici

3.5 Unité de contrôle CU (unité de contrôle)

Nous avons maintenant l'ALU et le stockage, mais cela ne suffit toujours pas pour faire fonctionner notre ordinateur. Nous avons besoin d'un composant pour diriger l'ALU pour effectuer quel type de calculs, et ce composant est l'unité de contrôle (CU).
Insérer la description de l'image ici
Insérer la description de l'image ici

3.6 Paramètres de base du processeur

Point 2

3.6.1 Nombre de cœurs

Insérer la description de l'image ici
Le nombre de cases dans l'image ci-dessus peut être considéré comme le nombre de cœurs. Comme le montre l'image, il s'agit d'un processeur à seize cœurs.
Les premiers processeurs avaient un seul cœur. Avec l'évolution de l'époque, nous avons des exigences de plus en plus élevées en matière de vitesse de traitement du processeur. À l'heure actuelle, nous devons rendre le processeur plus intégré et contenir plus d'unités de calcul pour calculer plus rapidement. l'unité de calcul est petite (processus de fabrication du CPU, tel que 5 nm, etc.). À cette époque, la mécanique classique devient invalide et commence à entrer dans le domaine de la mécanique quantique. Le défi du processus devient de plus en plus grand.
A cette époque, le concept de multi-core est proposé.

3.6.2 Fréquence

Insérer la description de l'image ici

La vitesse de calcul du CPU est décrite par la fréquence, qui peut être simplement comprise comme le nombre d'instructions pouvant être exécutées en une seconde (pas rigoureusement). Par exemple, la vitesse ci-dessus peut être comprise comme les calculs du CPU environ 3,4 milliards de fois par seconde. .
La fréquence du processeur change dynamiquement en fonction de la charge de travail. À mesure que la fréquence augmente, elle consomme plus d'énergie et génère plus de chaleur. Afin de protéger le processeur des brûlures dues à une surchauffe, il réduira automatiquement la fréquence.

3.7 Processus d'exécution des instructions du CPU (Instruction)

Point 3

3.7.1 Liste des instructions

Commençons par présenter les instructions dont nous avons besoin.
La soi-disant instruction, c'est-à-dire la commande qui guide le CPU pour effectuer le travail, se compose principalement d'un code d'opération + d'un opérande.
L'opcode est utilisé pour indiquer quelle action doit être effectuée, et l'opérande est les données sur lesquelles opérer cette instruction, qui peut être une adresse mémoire ou un numéro de registre, etc.
L'instruction elle-même est également un nombre stocké dans une certaine zone de mémoire sous forme binaire.
Les programmes que nous écrivons dans les langages de programmation doivent éventuellement être traduits en « instructions binaires exécutées sur le CPU ». Les instructions sont l'unité de base des tâches exécutées par le CPU.
Les instructions sont également du langage machine (binaire) et le langage assembleur et le langage assembleur ont une correspondance biunivoque.
Différents processeurs prennent en charge différentes instructions au niveau micro, telles que les instructions x86 et les instructions arm, ce qui entraîne des problèmes de compatibilité.
Insérer la description de l'image ici
Les instructions qu'un processeur peut exécuter peuvent être considérées comme ayant été stipulées lors de la conception initiale du processeur. L'image ci-dessus répertorie quelques instructions simplifiées.
L'instruction 8 bits peut être divisée en deux parties.
Les 4 premiers bits sont le code d'opération (opcode) indiquant ce que fait l'instruction.
Les 4 derniers bits sont des opérandes (similaires aux paramètres)
Le nom du registre AB dans le tableau ci-dessus est fictif. Le nom du registre CPU réel est sous la forme : eax, ebx, esp, ebp...)

3.7.2 Processus de base d'exécution des instructions

Il y a un registre spécial dans la CPU, le "compteur de programme" (il sera automatiquement défini par le système après le chargement de l'exe dans la mémoire), qui enregistre en même temps l'emplacement mémoire à partir duquel l'instruction sera exécutée ensuite. Au fur et à mesure que l'instruction est exécutée, la valeur du "compteur de programme" sera également mise à jour en conséquence. Par défaut, il s'agit d'un processus d'auto-incrémentation de +1 (exécution des instructions en séquence si une instruction de saut est rencontrée). as (if, while, for, appel de fonction...), il sera défini sur une autre valeur.
Insérer la description de l'image ici
Insérer la description de l'image ici
Insérer la description de l'image ici
Insérer la description de l'image ici
Nous divisons l'exécution des instructions en trois étapes :
1) Récupération des instructions, le CPU lit le contenu des instructions de la mémoire dans le CPU (il existe des registres spéciaux pour enregistrer les instructions lues)
2) Analyser l'instruction et identifier sa fonction, les fonctions et opérandes correspondants
3) Exécuter les instructions
L'exécution de chaque instruction doit passer par les trois étapes ci-dessus, et l'exécution d'une tâche nécessite l'exécution de plusieurs instructions ci-dessus. Par exemple, un processus d'ajout peut nécessiter trois instructions ci-dessus, ce qui semble très gênant, mais en raison du calcul du CPU, c'est le cas. très rapide (les opérations ci-dessus peuvent être effectuées plus d'un milliard de fois en une seconde), et cela ne prend pas beaucoup de temps pour un ordinateur.

4. Langage du programme

4.1 Programme

Le soi-disant programme est un ensemble d'instructions et les données qui doivent être traitées par cet ensemble d'instructions. Au sens étroit, un programme nous apparaît généralement comme un ensemble de fichiers.
Programme = instruction + données à traiter par l'instruction.
Insérer la description de l'image ici

4.2 Programmation précoce

Insérer la description de l'image ici
Insérer la description de l'image ici
C’est une petite histoire intéressante qui a circulé plus tôt, mais bien sûr elle n’est pas vraie.Mais pour les premiers ordinateurs, la programmation était vraiment nécessaire
Programmé avec 0 et 1 (Σ(っ°Д °;)っ)
L'image ci-dessous montre l'ordinateur Altair 8800, l'un des premiers micro-ordinateurs. L'utilisateur doit contrôler le commutateur et saisir le programme dans l'ordinateur petit à petit.
Insérer la description de l'image ici
Si tous les utilisateurs d’ordinateurs sont obligés d’utiliser la programmation binaire, tout le monde deviendra fou. C’est un seuil trop élevé. C’est ainsi que les langages de programmation sont nés.

4.3 Développement de langages de programmation

Afin d'améliorer l'efficacité de la programmation, le concept de langage assembleur a été créé pour la première fois. En fait, le langage assembleur et le langage machine (c'est-à-dire les instructions) sont directement en correspondance biunivoque. C'est juste que par rapport aux nombres 0 et 1, certains symboles ont été inventés pour aider les humains à les mémoriser et à les comprendre. est ce que nous avons ci-dessus. Ce que vous voyez est similaire à LOAD_A, LOAD_B, etc. Une fois la programmation terminée, les programmeurs doivent utiliser un assembleur pour traduire le langage assembleur en langage machine.
Bien que l'assemblage réduise le coût de la mémoire du programmeur, il nécessite néanmoins que le programme maîtrise toutes les connaissances du matériel informatique. Avec le nombre croissant de fabricants d'ordinateurs, les programmes écrits en même temps ne conviennent souvent qu'à un seul type d'ordinateur. C'est loin d'être suffisant, c'est pourquoi des langages plus avancés sont nés. Des langages de haut niveau protègent les détails du matériel et permettent aux programmeurs de réfléchir à leur activité à un niveau supérieur. Ici, nous prenons le langage C comme exemple. Une fois que le programmeur a fini d'écrire le programme, il doit utiliser un compilateur et un éditeur de liens pour traduire le programme en langage assembleur, puis utiliser l'assembleur pour le transformer en langage machine final.
Avec l'aide de l'idée d'encapsulation, il nous devient de plus en plus facile d'apprendre la programmation. Cependant, il y a des avantages et des inconvénients : le degré élevé d'abstraction amène de nombreux programmeurs à considérer l'ordinateur comme une boîte noire et sont totalement incapables de comprendre comment fonctionnent leurs propres programmes. J'espère qu'aucun d'entre nous ne deviendra de tels programmeurs.
Le langage Java que nous utilisons est un peu plus avancé que le langage C, mais il n'y a pas beaucoup de différence dans les principes abstraits de base, nous n'y reviendrons donc pas pour l'instant.
Insérer la description de l'image ici
Remarque : Une instruction dans un langage de haut niveau correspond souvent à de nombreuses instructions à compléter.

5. Système d'exploitation

Point 4
Le système d'exploitation est un nom collectif désignant un ensemble de logiciels qui gèrent les ressources informatiques. Actuellement, les systèmes d'exploitation courants incluent : la série Windows, la série Unix, la série Linux, la série OSX, la série Android, la série iOS, Hongmeng, etc.
Les programmes exécutés sur différents systèmes sont différents (les programmes ne sont pas compatibles en raison de KPI différents)

5.1 Positionnement du système d'exploitation

Insérer la description de l'image ici
Un système d'exploitation a deux fonctions de base :
1) Empêcher le matériel d'être abusé par des applications spatio-temporelles ; fournir des KPI à l'application et laisser l'application l'appeler pour remplir différentes fonctions.
2) Fournir aux applications des mécanismes simples et cohérents pour contrôler des périphériques matériels de bas niveau complexes et souvent très disparates.

Un système d'exploitation fait principalement les deux choses suivantes :
1) Gérer différents périphériques matériels Les ordinateurs peuvent accéder à de nombreux appareils, tels que des scanners de code, des équipements médicaux, des appareils à ultrasons B...
2) Fournir un environnement d'exploitation stable pour le logiciel. Les systèmes d'exploitation modernes doivent exécuter plusieurs programmes en même temps. On espère que ces programmes ne pourront pas interférer les uns avec les autres. Si un bug se produit dans un programme, cela n'affectera pas les autres programmes. .

6. Processus/tâche

Lorsque chaque application s'exécute sur un système d'exploitation moderne, le système d'exploitation fournira une abstraction, comme si seul ce programme s'exécutait sur le système et que toutes les ressources matérielles étaient utilisées par ce programme. Cette illusion est obtenue en faisant abstraction du concept de processus, sans doute l’un des concepts les plus importants et les plus réussis de l’informatique.
Un processus est une abstraction d'un programme en cours d'exécution par le système d'exploitation. En d'autres termes, le processus peut être considéré comme un processus en cours d'exécution du programme en même temps, au sein du système d'exploitation, le processus est l'unité de base d'allocation des ressources ; par le système d'exploitation.

6.1 La notion de processus

Point 5
Les processus sont des applications qui sont en cours d'exécution sur nos ordinateurs. (Quand on parle d'une application, il y a deux états. Lorsqu'elle n'est pas en cours d'exécution, il s'agit d'un fichier exe posé sur le disque dur ; lorsqu'il est en cours d'exécution, l'exe sera chargé en mémoire et le CPU exécute les instructions qu'il contient.
Insérer la description de l'image ici
Le processus est l’unité de base d’allocation des ressources par le système d’exploitation.

6.2 Gestion des processus

Point 6
Puisqu'il existe de nombreux processus sur le système, ils doivent être gérés
1) La description exprime divers attributs du processus à travers des structures/classes (les systèmes traditionnels sont implémentés via C/C++)
2) L'organisation relie les multiples structures (descriptions) ci-dessus à travers la structure de données, et effectue en outre divers ajouts, suppressions, modifications et vérifications...
Par exemple, le système d'exploitation Linux utilise une structure appelée « PCB » pour décrire les informations sur le processus (PCB signifie Process Control Block). En termes simples, les multiples PCB mentionnés ci-dessus sont enchaînés via une liste chaînée pour créer un processus (double). -cliquez sur l'exe, exécutez le programme) équivaut à créer une structure PCB. Détruire le processus signifie supprimer le PCB de la liste de connexions et libérer la structure PCB. Afficher la liste des processus signifie parcourir la liste de connexions et afficher les informations correspondantes dans l'ordre. .
Le PCB est une structure très complexe qui contient de nombreux attributs. Apprenons quelques informations clés ci-dessous.
1.Identifiant du processus PID
Dans le même temps, le PID est unique parmi plusieurs processus sur une machine et ne sera pas répété. De nombreuses opérations internes du système trouvent le processus correspondant via le PID.
Insérer la description de l'image ici
2. Pointeur de mémoire (un ensemble)
Décrit la zone dans laquelle les instructions et les données dépendant du processus sont stockées
Lorsque le système d'exploitation exécute l'exe, il lira les instructions et les données contenues dans l'exe et les chargera dans la mémoire (adresse mémoire).
De côté, cela montre que l'exécution du processus nécessite certaines ressources mémoire.
3. Table de description de fichier (table de séquence/tableau)
Décrit les fichiers ouverts par le processus, correspondant aux données sur le disque dur
Lorsqu'un fichier est ouvert au cours du processus, un élément sera ajouté au tableau de séquence pour une lecture facile.
Les éléments suivants déterminent conjointement la planification du processus, qui est étroitement liée à notre développement quotidien.
Point 7
La clé de la planification des processus du système d'exploitationMultiplexage en temps partagé
Les systèmes d'exploitation actuels sont tous des « systèmes multitâches » capables d'exécuter plusieurs processus en même temps. Les systèmes d'exploitation précédents étaient appelés « systèmes monotâches » et ne pouvaient exécuter qu'un seul processus à la fois.
Compréhension du multiplexage en temps partagé : à un certain moment, le CPU exécute le processus 1, s'exécute pendant un certain temps, le CPU exécute le processus 2 et exécute le processus 3 après un certain temps... Parce que la vitesse de calcul et la vitesse de commutation du CPU sont très rapides, ce n'est pas perceptible à l'œil nu. Debout D'un point de vue humain, cela équivaut à une exécution simultanée, « exécution simultanée ».
Exécution parallèle : désormais, avec les processeurs multicœurs, chaque cœur et entre les cœurs peuvent également exécuter différents processus en même temps à un niveau microscopique.
La concurrence ou la concurrence est uniformément planifiée par le noyau du système d'exploitation et ne peut pas être perçue par les programmeurs/utilisateurs ordinaires. Par conséquent, le parallélisme et la concurrence sont généralement appelés collectivement « concurrence », et les techniques de programmation correspondantes sont également appelées « programmation simultanée ».
4. Statut du processus
État prêt : le processus peut être programmé sur le processeur pour exécuter des instructions à tout moment.
État bloqué : le processus ne peut pas être programmé pour exécuter des instructions sur le processeur. La raison pour laquelle il est bloqué est qu'il doit effectuer d'autres opérations, telles que des opérations d'E/S (lecture et écriture de disques durs ou lecture et écriture de cartes réseau, telles que entrée d'analyse). Lorsque l'entrée de l'utilisateur est requise, le processus entre dans l'état de blocage)
Les deux états ci-dessus sont les deux principaux états du processus. Il existe également d’autres états, je n’entrerai donc pas dans les détails...
5. Priorité du processus
La priorité est littéralement l’ordre des processus.
6. Contexte du processus
Multiplexage en temps partagé. Après qu'un processus soit exécuté pendant un certain temps, il sera transféré du CPU. Après un certain temps, il sera reprogrammé vers le CPU. Il continuera à s'exécuter avec les résultats de la dernière exécution. les résultats intermédiaires de l'exécution précédente (diverses valeurs dans le registre du processeur) sont enregistrés pour la prochaine utilisation.
7. Informations comptables du processus
Avec le soutien des priorités, les ressources consommées par différents processus peuvent devenir de plus en plus différentes...
Les attributs ci-dessus sont utilisés pour prendre en charge l'exécution simultanée du processus de planification.

7. Allocation de mémoire⸺Gestion de la mémoire (Memory Manage)

Le système d'exploitation alloue les ressources mémoire à l'aide d'un modèle spatial : différents processus utilisent différentes zones de mémoire sans interférer les uns avec les autres.

8. Communication inter-processus

Comme mentionné ci-dessus, le processus est la plus petite unité d'allocation de ressources par le système d'exploitation, ce qui signifie que chaque processus ne peut pas ressentir l'existence de l'autre. C'est l'intention initiale du système d'exploitation d'abstraire le concept de processus qui en résulte. le processus Ils sont « isolés » les uns des autres.
Cependant, les applications modernes ne peuvent souvent pas répondre de manière indépendante à une exigence commerciale complexe. Elles nécessitent toujours que les processus et les processus coopèrent pour atteindre l'objectif de l'application. De cette manière, un « échange d'informations » entre les processus est nécessaire. Le besoin de communication inter-processus est apparu à un moment historique.
Il n'existe actuellement qu'une seule méthode principale de communication inter-processus en Java, via le réseau (socket)
Le réseau est un mécanisme IPC relativement spécial. En plus de prendre en charge la communication entre deux processus sur le même hôte, il prend également en charge la communication entre les processus sur différents hôtes au sein du même réseau.