Maison  >  Article  >  Java  >  Quelles sont les connaissances de base du système d'exploitation sous-jacent de Java et de la concurrence ?

Quelles sont les connaissances de base du système d'exploitation sous-jacent de Java et de la concurrence ?

WBOY
WBOYavant
2023-04-29 21:25:06742parcourir

1. Structure matérielle informatique moderne

Quelles sont les connaissances de base du système dexploitation sous-jacent de Java et de la concurrence ?

Partie centrale : CPU, mémoire

#🎜 🎜#1.Structure interne du CPU

Quelles sont les connaissances de base du système dexploitation sous-jacent de Java et de la concurrence ?

  • Unité de contrôle : Commande de l'ensemble Centre de contrôle du processeur

  • Unité arithmétique : Noyau de la calculatrice, effectue des opérations arithmétiques et des opérations logiques. L'unité arithmétique reçoit les instructions de l'unité de contrôle et exécute les actions

  • Unité de stockage : L'endroit où les données sont temporairement stockées dans le CPU, y compris Cache de cache CPU sur puce et Register Group

1.1.Structure du cache CPU#🎜🎜 #
Modern Afin d'améliorer l'efficacité d'exécution et de réduire l'interaction entre le CPU et la mémoire (l'interaction affecte l'efficacité du CPU), le CPU intègre généralement une architecture de cache à plusieurs niveaux sur le CPU La structure de cache commune à trois niveaux#🎜. 🎜#

# 🎜🎜#Cache L1, divisé en cache de données et cache d'instructions, exclusif aux cœurs logiques

  • Cache L2, exclusif à cœurs physiques, partagés par les cœurs logiques

    #🎜🎜 #
  • Cache L3, partagé par tous les cœurs physiques

  • #🎜🎜 #

    Le cache de troisième niveau de cette machine L'architecture est la suivante : Le cache L1 est divisé en deux types, l'unité de stockage d'instructions (instructions de stockage) et l'unité de stockage logique (logique de stockage). Théoriquement, une machine peut avoir plusieurs processeurs, déterminés par les emplacements. Un processeur peut avoir plusieurs cœurs et un cœur peut avoir plusieurs processeurs logiques.

Quelles sont les connaissances de base du système dexploitation sous-jacent de Java et de la concurrence ?

Register

est un composant interne du processeur et a des vitesses de lecture et d'écriture très rapides.

Le CPU lira uniquement les données du registre. Chaque CPU possède un registre unique auquel les autres CPU ne peuvent pas accéder.

L'utilisation de registres peut réduire le nombre de fois où le processeur accède à la mémoire, augmentant ainsi la vitesse de fonctionnement du processeur. Quelles sont les connaissances de base du système dexploitation sous-jacent de Java et de la concurrence ?

Plus le CPU est proche, plus la vitesse de lecture est rapide , selon la loi de Moore, le CPU se développe à un rythme de doublement tous les 18 mois, tandis que la mémoire et la vitesse de développement des disques durs ne peuvent pas suivre. Afin de résoudre le problème de inadéquation entre la vitesse de calcul du processeur et la vitesse d'E/S, le processeur a commencé à avoir une petite quantité de cache Lx Cache intégré (l'espace du processeur est limité et la taille du l'élément de stockage est limité).

Taille de l'espace de stockage mémoire : Mémoire> Cache L2 > Cache L1 > Registre

# 🎜 🎜#
  • Vitesse de lecture de la mémoire : Enregistrement > Cache L1 > Cache L2 > Mémoire # Le cache est composé du plus petit bloc de stockage ---

    Cache Line (CacheLine)
  • La taille de la ligne de cache est généralement de 64 octets. La taille du cache de ma machine L1 est de 512 Ko, composée de 512 * 1024/64 lignes de cache.
  • Processus de lecture des données de la mémoire du CPU :
  • Le CPU ne peut obtenir des données que directement à partir du registre. En supposant que la donnée x = 0 est en mémoire, son processus d'acquisition de valeur est le suivant :

  • Déterminer si le registre existe
Si c'est le cas n'existe pas, traversez Vérifiez le cache L1 pour voir s'il existe. S'il n'existe pas, parcourez le cache L2. S'il n'existe pas dans le cache L2, parcourez le cache L3. Si un processus intermédiaire existe, la ligne Cache sera verrouillée et copiée au niveau supérieur jusqu'à ce qu'elle atteigne le registre.

S'il n'est pas trouvé dans le cache, il sera recherché dans la mémoire. Il notifiera d'abord au contrôleur de mémoire d'occuper la bande passante du bus, notifiera à la mémoire de se verrouiller, lancera une demande de lecture de mémoire, attendez la réponse et copiez les données de réponse dans le cache L3. Remarque : L'ensemble du processus est verrouillé jusqu'à ce que le CPU soit déverrouilléPrincipe de localisation : Lorsque le CPU accède au périphérique de stockage, qu'il accède à des données ou à des instructions, ils ont tendance à s'agréger dans un zone continue.

Il existe deux types de principes de localité :

Localité temporelle (localité temporelle) :

Si un élément d'information est consulté, il est susceptible d'être consulté à nouveau dans un avenir proche. Par exemple, boucles, récursivité, appels répétés de méthodes, etc.

Localité spatiale :
    Si un emplacement mémoire est référencé, alors ses emplacements à proximité le seront également à l'avenir. Par exemple, du code exécuté séquentiellement, deux objets créés en continu, des tableaux, etc.
  • Exemple de localité spatiale :
  • Pour un grand tableau bidimensionnel, accumuler et additionner ligne par ligne sera plus rapide que d'ajouter une colonne par colonne. Lorsque le processeur lit des données dans la mémoire, toutes les données jointes seront lues.
  • 1.2.Niveau de sécurité de fonctionnement du CPU

    Le CPU est divisé en 4 niveaux de fonctionnement :

#🎜🎜 # ring0

état du noyau

    ring1
  • # 🎜🎜#
  • ring2

  • ring3Mode utilisateur

Linux et Windows n'utilisent que deux niveaux : ring0, ring3 Les instructions de programme internes du système d'exploitation s'exécutent généralement en ring. 0 Niveau, les programmes tiers autres que le système d'exploitation s'exécutent au niveau ring3. Si le programme tiers souhaite appeler la fonction interne du système d'exploitation, car le niveau de sécurité de fonctionnement n'est pas suffisant, il doit changer l'état de fonctionnement du processeur. de ring3 à ring0, puis exécutez la fonction système pour créer des threads, le blocage des threads et le réveil sont des opérations lourdes car le processeur doit changer d'état d'exécution.

La création de thread JVM est un processus CPU :

  • Étape 1 : Le processeur passe de ring3 à ring0 pour créer un thread

  • Étape 2 : Une fois la création terminée, le processeur passe de ring0 à ring3

  • Troisième étape : le thread exécute le programme JVM

  • Quatrième étape : une fois l'exécution du thread terminée, il est détruit et rebasculé sur ring0

  • Étape cinq : Le thread est détruit et rebasculé sur ring3

2. Gestion de la mémoire du système d'exploitation

Afin de garantir une isolation sûre et la stabilité du fonctionnement du programme, le système d'exploitation a deux concepts. Prenons comme exemple l'espace mémoire 4G d'un système d'exploitation 32 bits : 用户空间内核空间

Quelles sont les connaissances de base du système dexploitation sous-jacent de Java et de la concurrence ?

Linux réserve plusieurs cadres de page pour le code du noyau et les structures de données, et ces pages ne seront jamais transférées sur le disque (espace mémoire 4 Go, utilisateur The le programme peut utiliser 3 Go). Comme le montre la figure, l'adresse linéaire dans la partie verte peut être référencée par le

code utilisateur et le code noyau (c'est-à-dire l'espace utilisateur). Les adresses linéaires en jaune ne sont accessibles que par le code noyau ( c'est-à-dire l'espace noyau ).

Les processus et les threads ne peuvent s'exécuter qu'en

usermode ou kernelmode. Les programmes utilisateur s'exécutent en mode utilisateur, tandis que les appels système s'exécutent en mode noyau.

Utilisez une pile générale (pile d'espace utilisateur) en mode utilisateur et utilisez une pile de taille fixe (pile d'espace noyau, généralement la taille d'une page mémoire) en mode noyau, c'est-à-dire que chaque processus et thread a en fait deux piles. , fonctionnant respectivement en

mode utilisateur et mode noyau.

Le thread unitaire de base de la planification du processeur est également divisé en :

  • Kernel Threading Model (KLT) : Utilisé par Java, le noyau enregistre l'état et les informations contextuelles du thread, et le blocage des threads ne sera pas effectué. provoquer un blocage du processus. Sur les systèmes multiprocesseurs, plusieurs threads s'exécutent en parallèle sur plusieurs processeurs. La création, la planification et la gestion des threads sont effectuées par le noyau, qui est plus lent que l'ULT et plus rapide que les opérations de processus.

  • Modèle de thread utilisateur (ULT) : Ne repose pas sur le cœur du système d'exploitation. L'application fournit des fonctions pour créer, synchroniser, planifier et gérer des threads afin de contrôler les threads utilisateur. Aucun changement de mode utilisateur/mode noyau n'est requis et la vitesse est rapide. Le noyau ne connaît pas l'ULT. Lorsqu'un thread se bloque, le processus (y compris tous ses threads) se bloque. Les threads ont deux piles, une dans l'espace utilisateur et une dans l'espace noyau. Le blocage, la création et la suppression de threads abandonneront la pile de l'espace utilisateur et la transféreront vers l'espace du noyau, puis la transféreront vers l'espace utilisateur une fois l'exécution terminée.

    3. Processus et threads

Processus : Quelles sont les connaissances de base du système dexploitation sous-jacent de Java et de la concurrence ?

La plus petite unité d'allocation des ressources du système d'exploitation

, par exemple : lors du démarrage d'un programme Java, le système d'exploitation créera un processus Java, qui peut contenir plusieurs threads.

Thread :

La plus petite unité de planification du processeur par le système d'exploitation Les threads ont leurs propres attributs tels que des compteurs, des piles et des variables locales, et peuvent accéder aux variables de mémoire partagée. Le processeur bascule entre ces threads à grande vitesse, permettant aux utilisateurs de sentir que ces threads s'exécutent en même temps (concurrence).

Changement de thread de haut en bas :

Enregistrez l'état intermédiaire du thread précédent en cours d'exécution et exécutez le thread suivant

Série :

Aucun chevauchement dans le temps, la tâche précédente n'est pas terminée, la tâche suivante ne peut qu'attendre

Quelles sont les connaissances de base du système dexploitation sous-jacent de Java et de la concurrence ?

  • Parallèle :

    Le temps se chevauche. Deux tâches sont exécutées en même temps sans interférer l'une avec l'autre

  • Concurrence :

    L'exécution de deux tâches interfère l'une avec l'autre. point, une seule tâche est exécutée. Exécution alternative

    .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer