Leçon 1 sur le système d'exploitation : les bases du processeur

Recommandations de livres connexes

Principes de lecture :不求甚解,观其大略

  • Codage : le langage caché derrière les logiciels et le matériel informatique
  • "Comprendre les systèmes informatiques"
  • Structures de données et algorithmes
    • "structure de données et algorithme java" "algorithme"
    • "Introduction aux algorithmes" "L'art de la programmation informatique"
  • Système d'exploitation : analyse du code source du noyau Linux Conception et mise en œuvre du noyau Linux Système d'exploitation sur 30 jours
  • Réseau : il est recommandé de lire la version originale du volume 1 de l'« Explication détaillée TCP/IP » de Mechanic.
  • Principe de compilation : le mode d'implémentation du langage de programmation du livre dragon mécanique
  • Base de données : Derby source SQLite

Principes de base du processeur

Le processus de production du CPU

Essence : un tas de sable + un tas de cuivre + un tas de colle + ajout de métal spécifique + procédé spécial

Désoxydation du sable-> quartz-> silice-> purification-> lingot de silicium-> coupe-> plaquette-> application de résine photosensible-> lithographie-> gravure-> élimination de la résine photosensible-> placage-> polissage-> couche de cuivre -> test -> Tranche -> Paquet

Le processus de production du processeur Intel (description vidéo)

Comment le processeur est fabriqué (description textuelle)

A l'intérieur du processeur : silicium -> ajout d'éléments spéciaux -> semi-conducteur P semi-conducteur N -> jonction PN -> diode -> transistor à effet de champ -> interrupteur logique

Circuits logiques de base : Porte ET Porte OU Porte NON Porte NI (OU exclusif) Adder Accumulator Latch…

Réaliser le calcul manuel (lire l'instruction de mémoire à chaque fois, (haute puissance faible puissance))

Livres recommandés : Chapitre 17 de Coding

Pour le fonctionnement du processeur, c'est par haute fréquence, basse fréquence -> converti en logique, c'est un nombre binaire : 0, 1 -> indiquez à l'ordinateur quelle broche doit être activée et désactivée

Saisie manuelle : ordinateur à bande papier

Mnémonique : 01000010->mov sub...

Langage de haut niveau -> Compilateur -> Langage machine

Le principe du CPU

Le problème le plus fondamental que les ordinateurs doivent résoudre : comment représenter les nombres

comment fonctionnent les transistors

Comment fonctionne un transistor

Processus d'exécution du langage d'assemblage

L'essence de l'assemblage : le mnémonique du langage machine, en fait, c'est du langage machine : mov sub add représente des données binaires

Processus : allumer l'ordinateur -> CPU lit le programme en mémoire (entrée de signal électrique) -> le générateur d'horloge oscille continuellement marche/arrêt -> pousse le CPU à exécuter pas à pas (le nombre d'étapes exécutées dépend du cycle d'horloge requis par l'instruction) -> calcul terminé -> réécriture (signal électrique) -> écriture sur la sortie de la carte graphique (sout ou graphique)

Ordinateur quantique (il suffit de comprendre)

qubit

insérez la description de l'image ici
insérez la description de l'image ici

La composition de l'ordinateur

CPU和内存,是计算机的核心
insérez la description de l'image ici

Composition de base du CPU

PC -> Program Counter compteur de programme (enregistre l'adresse d'instruction actuelle)

Registres -> Registre : stocke temporairement les données nécessaires aux calculs CPU

ALU -> Unité arithmétique et logique

CU -> Unité de contrôle Contrôle du signal d'interruption de l'unité de contrôle

MMU -> Unité de gestion de la mémoire Unité de gestion de la mémoire - implémentation matérielle + système d'exploitation

Hyperthreading : Une ALU correspond à plusieurs PC|Registre
dits quatre cœurs et huit threads comme indiqué sur la figure :
insérez la description de l'image ici

hiérarchie de la mémoire

insérez la description de l'image ici
Pourquoi avoir une cache ?
Parce que la vitesse du CPU aux différents registres et à la mémoire principale n'est pas la même
insérez la description de l'image ici

structure physique du cache

insérez la description de l'image ici
按块读取
Le principe le plus élémentaire de la mise en cache : le principe de localité du programme, qui peut améliorer l'efficacité et
donner pleinement accès à la capacité des broches du processeur du bus à lire plus de données à la fois

cache

insérez la description de l'image ici
Afin d'assurer la cohérence des données : dans l'unité de comportement du cache, quatre
protocoles de cohérence de l'état de la ligne de cache sont définis
insérez la description de l'image ici

taille de la ligne de cache

Ligne de cache : actuellement, le cache L3 est le plus adapté à l'industrie. Plus
la ligne de cache est grande, plus l'efficacité de l'espace local est élevée, mais plus le temps de lecture est lent
. Plus la ligne de
cache Valeur, actuellement principalement utilisée : 64 octets

100 millions d'efficacité d'exécution d'affectation de la même ligne de cache volatile assure la visibilité entre les threads

package com.mashibing.juc.c_028_FalseSharing;public class T03_CacheLinePadding {
    
    public static volatile long[] arr = new long[2];public static void main(String[] args) throws Exception {
    
    
        Thread t1 = new Thread(()->{
    
    
            for (long i = 0; i < 10000_0000L; i++) {
    
    
                arr[0] = i;
            }
        });Thread t2 = new Thread(()->{
    
    
            for (long i = 0; i < 10000_0000L; i++) {
    
    
                arr[1] = i;
            }
        });final long start = System.nanoTime();
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        System.out.println((System.nanoTime() - start)/100_0000);
    }
}

100 millions d'efficacité d'exécution d'affectation de différentes lignes de cache

package com.mashibing.juc.c_028_FalseSharing;public class T04_CacheLinePadding {
    
    public static volatile long[] arr = new long[16];public static void main(String[] args) throws Exception {
    
    
        Thread t1 = new Thread(()->{
    
    
            for (long i = 0; i < 10000_0000L; i++) {
    
    
                arr[0] = i;
            }
        });Thread t2 = new Thread(()->{
    
    
            for (long i = 0; i < 10000_0000L; i++) {
    
    
                arr[8] = i;
            }
        });final long start = System.nanoTime();
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        System.out.println((System.nanoTime() - start)/100_0000);
    }
}

Les résultats montrent clairement que l'exécution est plus rapide avec différentes lignes de cache

Par conséquent, un modèle de programmation est né - l'alignement de la ligne de cache Alignement de la
ligne de cache : pour certains numéros particulièrement sensibles, il y aura un accès à haute contention de threads. Pour s'assurer qu'un faux partage ne se produit pas, une programmation d'alignement de ligne de cache peut être utilisée.

Par exemple, 7 données longues sont remplies avant et après le disrupteur pour garantir des lignes de cache indépendantes :
insérez la description de l'image ici
dans JDK7, beaucoup utilisent un remplissage long pour améliorer l'efficacité

JDK8, ajout de l'annotation @Contended (expérimentale) : JVM -XX : -RestrictContended

package com.mashibing.juc.c_028_FalseSharing;

import sun.misc.Contended;

/**
 * T05_Contended
 * Description
 *
 * @date 2020/5/26 - 23:38
 */

public class T05_Contended {
    
    
    @Contended
    volatile long x;
    @Contended
    volatile long y;

    public static void main(String[] args) throws InterruptedException {
    
    
        T05_Contended t = new T05_Contended();
        Thread t1 = new Thread(()->{
    
    
           for (long i=0;i<1_0000_0000L;i++){
    
    
               t.x=i;
           }
        });

        Thread t2 = new Thread(()->{
    
    
            for (long i=0;i<1_0000_0000L;i++){
    
    
                t.y=i;
            }
        });

        final long start = System.nanoTime();
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        System.out.println((System.nanoTime() - start)/100_0000);
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/upset_poor/article/details/123175867
conseillé
Classement