Organisation de la mémoire dans les systèmes informatiques monoprocesseurs. Mémoire des systèmes informatiques. Organisation de la mémoire des systèmes informatiques

Les systèmes informatiques multitraitements posent le problème de l'accès simultané à la mémoire par plusieurs processeurs. Selon l'organisation de la mémoire d'un système multiprocesseur, il existe :

1. Systèmes informatiques à mémoire partagée – Multiprocesseurs :

je. PvP (CrayT90)

ii. SMP (Intel SHV, SunFire, Dec8400, etc.)

je. COMA (KSR-1, DDM)

ii. CC-NUMA (Stanford Dash, Données générales, etc.)

iii. NCC-NUMA (Crag T3E)

2. Systèmes informatiques à mémoire distribuée – Multi-ordinateurs :

ii. MPP – systèmes faiblement couplés (Intel TFLOPS)

La différence entre la mémoire partagée et distribuée réside dans la structure de la mémoire virtuelle, c'est-à-dire dans l'apparence de cette mémoire par rapport aux processeurs. En d’autres termes, ce qui distingue la mémoire partagée de la mémoire distribuée est la manière dont le sous-système mémoire interprète l’adresse de cellule reçue du microprocesseur (adresse globale ou adresse locale).

Physiquement, presque toute la mémoire est divisée en composants autonomes accessibles de manière indépendante.

Considérons des modèles d'architectures de mémoire BC qui seront vrais pour les classes de flux de données multiples MIMD et SIMD :

UMA- VS avec mémoire partagée, où n'importe quel processeur accède à la mémoire de manière uniforme et prend le même temps. Systèmes avec accès uniforme à la mémoire :

MP – mémoire partagée

Pi – processeur

Autobus commun

Particularités : à un instant donné, un seul des processeurs peut communiquer sur le bus. Les performances diminuent à mesure que le nombre de processeurs augmente. Le plus souvent, le système contient de 4 à 8 processeurs, performances maximales = 2. Le système ne peut pas être classé comme tolérant aux pannes, car la panne d'un module de mémoire ou d'un processeur peut entraîner la panne de l'ensemble du système.

Dans cette classe d'architectures, on trouve des systèmes multiprocesseurs avec une mémoire constituée de plusieurs modules. Le bus est remplacé par un commutateur qui achemine les requêtes du processeur vers l'un des nombreux modules de mémoire. De plus, tous les modules de mémoire appartiennent à un seul espace d'adressage. L’avantage est que vous pouvez traiter plusieurs demandes.

NUMA– accès mémoire hétérogène. Il y a plusieurs cours ici. Un seul espace d'adressage est utilisé, mais chaque processeur dispose d'une mémoire locale (généralement un cache). L'accès au LP est beaucoup plus rapide que l'accès à la mémoire distante via un réseau ou un commutateur.


COMA – uniquement avec cache. La mémoire locale de chaque processeur est construite sous la forme d'un grand cache. Les caches de tous les processeurs constituent ensemble la mémoire système globale. Les données ne sont pas liées statiquement à un module de mémoire spécifique et n'ont pas d'adresse unique. Les données sont transférées vers le cache du processeur qui les a demandées en dernier.



Le principal inconvénient : une gestion très complexe, l'OS n'intervient pas dans le processus de gestion (toutes les tâches sont assignées au matériel).

CC-NUMA est un modèle d'accès cohérent au cache à une mémoire hétérogène. Ce n'est pas un cache qui est utilisé, mais une mémoire physique régulièrement distribuée. Aucun logiciel n'est requis pour enregistrer de nombreuses données mises à jour. Le niveau matériel gère cela.

NCC-NUMA - le modèle suppose l'utilisation d'un seul espace d'adressage, mais ne garantit pas la cohérence des données globales au niveau matériel. La gestion est confiée au logiciel, cela est considéré comme un inconvénient, mais le modèle est le plus prometteur en termes d'augmentation de la productivité.

Multi-ordinateurs - les blocs à partir desquels le système est construit sont représentés par un processeur et une mémoire.

NORMA – architecture sans accès direct à la mémoire distante.


P – processeur

M – mémoire locale

K0 et K1 – contrôleur d'entrée/sortie

Les blocs sont des éléments de traitement. Des systèmes sont assemblés à partir d'eux.

Chaque processeur d'un tel système ne peut accéder à la mémoire distante qu'en échangeant des messages avec les processeurs propriétaires de la mémoire adressable. Tous les PE les uns par rapport aux autres sont considérés comme des périphériques d'entrée-sortie.

Pour envoyer des messages à un autre élément de traitement, le processeur génère un bloc de données dans sa mémoire locale et informe son contrôleur local de la nécessité de transférer des informations vers un périphérique externe. Sur le réseau d'interconnexion, ce message est envoyé au contrôleur récepteur, qui trouve un emplacement dans sa mémoire locale et informe son processeur de son arrivée, ainsi que le processeur source de la réception du message.



Avantages : lors de l'accès aux données, il n'y a pas de concurrence pour le bus ou le switch. Puisqu’il n’y a pas de bus commun, il n’y a aucune restriction sur le nombre de processeurs. Dans une bien moindre mesure, il existe un problème de fiabilité du cache. Chaque processeur a le droit de modifier son cache et de ne pas coordonner ses actions avec les autres.

Inconvénients : Chaque élément de traitement dispose d'un système d'interruption. Cela entraîne la complexité de l'échange d'informations (temps pour envoyer et générer des messages, temps pour générer des demandes d'interruption et les traiter).

Tableau 9.1.
Hiérarchie du sous-système de mémoire PC Type de mémoire 1985
2000 Temps d'échantillonnage Volume typique 2000 Temps d'échantillonnage Volume typique
1 Prix/octet Mémoire super-opérative (registres) 0,2 5 ns $ 3 - 100 16/32 bits 0,01 1 ns $ 0,1 10
2 32/64/128 bits Mémoire tampon haute vitesse (cache) 20 100 ns ~ $ 10 8 Ko - 64 Ko 0,5 - 2 ns $ 0,1 - 0,5
3 32 Ko 1 Mo Mémoire opérationnelle (principale) ~0,5 ms $ 0,02 1 1 Mo - 256 Mo 2 secondes 20 secondes $ 0,01 0,1
4 128 Mo - 4 Go Stockage externe (mémoire de masse) 10 - 100 ms $ 0,002 - 0,04 1 Mo - 1 Go 5 à 20 ms $ 0,001 - 0,01

1 Go - 0,5 To

Les registres du processeur constituent son contexte et stockent les données utilisées par les instructions du processeur en cours d'exécution. Les registres du processeur sont généralement accessibles par leurs désignations mnémoniques dans les commandes du processeur. Cache

utilisé pour correspondre à la vitesse du processeur et de la mémoire principale. Les systèmes informatiques utilisent un cache multi-niveaux : cache de niveau I (L1), cache de niveau II (L2), etc. Les systèmes de bureau utilisent généralement un cache à deux niveaux, tandis que les systèmes de serveur utilisent généralement un cache à trois niveaux. Le cache stocke des instructions ou des données susceptibles d'être reçues par le processeur pour être traitées dans un avenir proche. Le fonctionnement du cache est transparent pour le logiciel, le cache n'est donc généralement pas accessible par logiciel. BÉLIER

stocke, en règle générale, des modules de programme fonctionnellement complets (noyau du système d'exploitation, programmes en cours d'exécution et leurs bibliothèques, pilotes de périphériques utilisés, etc.) et leurs données directement impliquées dans le fonctionnement des programmes, et est également utilisé pour enregistrer les résultats des calculs ou d'autres données de traitement avant de les envoyer vers un stockage externe, des périphériques de sortie de données ou des interfaces de communication. Chaque cellule attribué une adresse unique. Les méthodes organisationnelles d'allocation de mémoire offrent aux programmeurs la possibilité d'utiliser efficacement l'ensemble du système informatique. De tels procédés comprennent un modèle de mémoire continue (« plat ») et un modèle de mémoire segmenté. Lors de l'utilisation d'un modèle de mémoire plat, le programme fonctionne avec un seul espace d'adressage continu, un espace d'adressage linéaire dans lequel les cellules de mémoire sont numérotées de manière séquentielle et continue de 0 à 2n-1, où n est la profondeur de bits du processeur à l'adresse. Lors de l'utilisation d'un modèle segmenté pour un programme, la mémoire est représentée par un groupe de blocs d'adresses indépendants appelés segments. Pour adresser un octet de mémoire, un programme doit utiliser une adresse logique, composée d'un sélecteur de segment et d'un décalage. Un sélecteur de segment sélectionne un segment spécifique et un décalage pointe vers une cellule spécifique dans l'espace d'adressage du segment sélectionné.

Organisation du sous-système mémoire dans un PC

Les périphériques de stockage (stockage) du sous-système de mémoire du PC peuvent être classés dans la hiérarchie suivante (Tableau 9.1) :

Tableau 9.1. Hiérarchie du sous-système de mémoire PC
Type de mémoire 1985 2000
Temps d'échantillonnage Volume typique Prix/octet Temps d'échantillonnage Volume typique Prix/octet
Mémoire super-opérative (registres) 0,2 5 ns 16/32 bits $ 3 - 100 0,01 1 ns 32/64/128 bits $ 0,1 10
Mémoire tampon haute vitesse (cache) 20 100 ns 8 Ko - 64 Ko ~ $ 10 0,5 - 2 ns 32 Ko 1 Mo $ 0,1 - 0,5
Mémoire opérationnelle (principale) ~0,5 ms 1 Mo - 256 Mo $ 0,02 1 2 secondes 20 secondes 128 Mo - 4 Go $ 0,01 0,1
Stockage externe (mémoire de masse) 10 - 100 ms 1 Mo - 1 Go $ 0,002 - 0,04 5 à 20 ms 1 Go - 0,5 To $ 0,001 - 0,01

Les registres du processeur constituent son contexte et stockent les données utilisées par les instructions du processeur en cours d'exécution. Les registres du processeur sont généralement accessibles par leurs désignations mnémoniques dans les commandes du processeur.

Le cache est utilisé pour faire correspondre la vitesse du processeur et de la mémoire principale. Les systèmes informatiques utilisent des caches multi-niveaux : cache de niveau I (L1), cache de niveau II (L2), etc. Les systèmes de bureau utilisent généralement un cache à deux niveaux, tandis que les systèmes de serveur utilisent généralement un cache à trois niveaux. Le cache stocke des instructions ou des données susceptibles d'être reçues par le processeur pour être traitées dans un avenir proche. Le fonctionnement du cache est transparent pour le logiciel, le cache n'est donc généralement pas accessible par logiciel.

La RAM stocke, en règle générale, des modules de programme fonctionnellement complets (noyau du système d'exploitation, programmes en cours d'exécution et leurs bibliothèques, pilotes de périphériques utilisés, etc.) et leurs données directement impliquées dans le fonctionnement des programmes, et est également utilisée pour enregistrer les résultats de calcul ou autres traitement des données avant de les envoyer vers un stockage externe, des périphériques de sortie de données ou des interfaces de communication.

Chaque cellule RAM se voit attribuer une adresse unique. Les méthodes organisationnelles d'allocation de mémoire offrent aux programmeurs la possibilité d'utiliser efficacement l'ensemble du système informatique. De tels procédés comprennent un modèle de mémoire continue (« plat ») et un modèle de mémoire segmenté. Lors de l'utilisation d'un modèle de mémoire plat, le programme fonctionne avec un seul espace d'adressage continu, un espace d'adressage linéaire dans lequel les cellules de mémoire sont numérotées de manière séquentielle et continue de 0 à 2n-1, où n est la profondeur de bits du processeur à l'adresse. Lors de l'utilisation d'un modèle segmenté pour un programme, la mémoire est représentée par un groupe de blocs d'adresses indépendants appelés segments. Pour adresser un octet de mémoire, un programme doit utiliser une adresse logique composée d'un sélecteur de segment et d'un décalage. Un sélecteur de segment sélectionne un segment spécifique et un décalage pointe vers une cellule spécifique dans l'espace d'adressage du segment sélectionné.



Les méthodes organisationnelles d'allocation de mémoire permettent d'organiser un système informatique dans lequel l'espace d'adressage de travail du programme dépasse la taille de la RAM réellement disponible dans le système, tandis que le manque de RAM est comblé par une mémoire externe plus lente ou moins chère (disque dur , mémoire flash, etc.). ) Ce concept est appelé mémoire virtuelle. Dans ce cas, l'espace d'adressage linéaire peut être mappé sur l'espace d'adressage physique soit directement (une adresse linéaire est une adresse physique), soit à l'aide du mécanisme de pagination. Dans le second cas, l'espace d'adressage linéaire est divisé en pages de taille égale qui constituent la mémoire virtuelle. La traduction de page garantit que les pages de mémoire virtuelle requises sont mappées dans l'espace d'adressage physique.

En plus de mettre en œuvre un système de mémoire virtuelle, les mémoires externes sont utilisées pour le stockage à long terme de programmes et de données sous forme de fichiers.

Mémoire cache

La mémoire cache est un périphérique de stockage à grande vitesse situé sur la même puce que le processeur ou externe au processeur. Le cache sert de tampon à grande vitesse entre le processeur et la mémoire principale relativement lente. L'idée de la mémoire cache est basée sur la prédiction de l'accès le plus probable du processeur à la RAM. Cette approche repose sur le principe de localité temporelle et spatiale du programme.



Si le processeur a accédé à un objet RAM, il existe une forte probabilité que le processeur accède à nouveau à cet objet bientôt. Un exemple de cette situation serait le code ou les données en boucles. Ce concept est décrit par le principe de localité temporelle, qui stipule que les objets RAM fréquemment utilisés doivent être « plus proches » du CPU (dans le cache).

Pour coordonner le contenu de la mémoire cache et de la RAM, trois méthodes d'écriture sont utilisées :

  • Write through - La RAM est mise à jour simultanément avec la mémoire cache.
  • Écriture tamponnée : les informations sont retardées dans le tampon de cache avant d'être écrites dans la RAM et sont écrites dans la RAM pendant les cycles lorsque le processeur n'y accède pas.
  • Réécriture - le bit de changement dans le champ de balise est utilisé et la ligne n'est écrite dans la RAM que si le bit de changement est 1.

En règle générale, toutes les méthodes d'écriture, à l'exception du pass-through, vous permettent de reporter et de regrouper les opérations d'écriture dans la RAM pour augmenter les performances.

Il existe deux types de blocs de données dans la structure de la mémoire cache :

  • mémoire d'affichage des données (les données elles-mêmes, dupliquées à partir de la RAM) ;
  • mémoire de balises (signes indiquant l'emplacement des données mises en cache dans la RAM).

L'espace mémoire de mappage de données dans le cache est divisé en lignes - blocs de longueur fixe (par exemple, 32, 64 ou 128 octets). Chaque ligne de cache peut contenir un bloc d'octets alignés contigus de la RAM. Le bloc RAM mappé sur une ligne de cache donnée est déterminé par la balise de ligne et l'algorithme de mappage. Sur la base des algorithmes de mappage de la RAM vers le cache, il existe trois types de mémoire cache :

  • cache entièrement associatif ;
  • cache de mappage direct ;
  • cache associatif multiple.

Un cache entièrement associatif se caractérise par le fait que le contrôleur de cache peut placer n'importe quel bloc de RAM dans n'importe quelle ligne de cache (Figure 9.1). Dans ce cas, l'adresse physique est divisée en deux parties : le décalage dans le bloc (ligne de cache) et le numéro de bloc. Lorsqu'un bloc est mis en cache, le numéro de bloc est stocké dans la balise de ligne correspondante. Lorsque le processeur accède au cache pour un bloc nécessaire, un échec de cache ne sera détecté qu'après avoir comparé les balises de toutes les lignes avec le numéro de bloc.

L'un des principaux avantages de cette méthode d'affichage est une bonne utilisation de la RAM, car Il n'y a aucune restriction quant au bloc qui peut être mappé à une ligne de cache donnée. Les inconvénients incluent la mise en œuvre matérielle complexe de cette méthode, qui nécessite une grande quantité de circuits (principalement des comparateurs), ce qui entraîne une augmentation du temps d'accès à un tel cache et une augmentation de son coût.

Agrandir l'image
Riz. 9.1. Cache 8x8 entièrement associatif pour adresse 10 bits

Une autre façon de mapper la RAM vers le cache consiste à utiliser un cache mappé directement (ou un cache associatif à entrée unique). Dans ce cas, l'adresse mémoire (numéro de bloc) détermine de manière unique la ligne de cache dans laquelle le bloc donné sera placé. L'adresse physique se décompose en trois parties : le décalage dans le bloc (ligne de cache), le numéro de ligne de cache et la balise. Tel ou tel bloc sera toujours placé dans une ligne de cache strictement définie, en remplaçant si nécessaire un autre bloc qui y est stocké. Lorsque le processeur accède au cache pour un bloc nécessaire, il lui suffit de vérifier la balise d'une ligne pour déterminer s'il s'agit d'un succès ou d'un échec de cache.

Les avantages évidents de cet algorithme sont sa simplicité et son faible coût de mise en œuvre. Les inconvénients incluent la faible efficacité d'un tel cache en raison des rechargements fréquents probables des lignes. Par exemple, lors de l'accès à chaque 64ème cellule mémoire du système de la Fig. 9.2, le contrôleur de cache sera obligé de surcharger constamment la même ligne de cache, sans utiliser du tout les autres.

Agrandir l'image
Riz. 9.2. Cache mappé directement 8x8 pour une adresse 10 bits

Malgré les inconvénients évidents, cette technologie a été utilisée avec succès, par exemple, dans le Motorola MC68020 MP, pour organiser le cache d'instructions de premier niveau (Fig. 9.3). Ce microprocesseur implémente un cache de mappage direct de 64 lignes de 4 octets. L'étiquette de ligne, en plus des 24 bits qui spécifient l'adresse du bloc mis en cache, contient un bit de signification qui détermine la validité de la ligne (si le bit de signification est 0, la ligne est considérée comme invalide et ne provoquera pas d'accès au cache. ). Les accès aux données ne sont pas mis en cache.

Agrandir l'image
Riz. 9.3. Schéma d'organisation de la mémoire cache dans le Motorola MC68020 MP

Un compromis entre les deux premiers algorithmes est un cache associatif multiple ou un cache partiellement associatif (Figure 9.4). Avec cette méthode d'organisation de la mémoire cache, les lignes sont regroupées en groupes, qui peuvent comprendre 2, 4, : lignes. En fonction du nombre de lignes dans ces groupes, on distingue 2 entrées, 4 entrées, etc. cache associatif. Lors de l'accès à la mémoire, l'adresse physique est divisée en trois parties : le décalage dans le bloc (ligne de cache), le numéro de groupe (ensemble) et la balise. Un bloc mémoire dont l'adresse correspond à un groupe particulier peut être placé dans n'importe quelle ligne de ce groupe, et la valeur correspondante est placée dans la balise de ligne. Il est évident qu'au sein du groupe sélectionné le principe d'associativité est respecté. En revanche, un bloc particulier ne peut appartenir qu'à un groupe strictement défini, ce qui fait écho au principe d'organisation d'un cache de mappage direct. Pour que le processeur puisse identifier un échec de cache, il devra vérifier les balises d'un seul groupe (2/4/8/: lignes).

Agrandir l'image
Riz. 9.4. Cache associatif à double entrée 8x8 pour une adresse 10 bits

Cet algorithme de mappage combine les avantages d'un cache entièrement associatif (bonne utilisation de la mémoire, vitesse élevée) et d'un cache à accès direct (simplicité et faible coût), n'étant que légèrement inférieur dans ces caractéristiques aux algorithmes d'origine. C'est pourquoi le cache associatif multiple est le plus utilisé (Tableau 9.2).

Tableau 9.2. Caractéristiques du sous-système de mémoire cache du CPU IA-32
Intel486 Pentium Pentium MMX P6 Pentium4
Cache d'instructions L1
Taper 4 pouces. assoc. 2 pouces. assoc. 4 pouces. assoc. 4 pouces. assoc. 8 pouces. assoc.
Taille de la chaîne, octets -
Volume total, Ko 8/16 8/16 12 km/min
Cache de données L1
Taper Partagé avec le cache d'instructions 2 pouces. assoc. 4 pouces. assoc. 2/4 po. assoc. 4 pouces. assoc.
Taille de la chaîne, octets
Volume total, Ko 8/16
Cache L2
Taper Externe externe 4 pouces. assoc. 4 pouces. assoc. 8 pouces. assoc.
Taille de la chaîne, octets
Volume total, Ko 256/512 128-2048 256/512

Remarques : L'Intel-486 utilise une seule instruction L1 et un seul cache de données. Dans le Pentium Pro L1, le cache de données est de 8 Ko associatif à 2 entrées, dans les autres modèles P6, il est de 16 Ko associatif à 4 entrées. Le Pentium 4 utilise un cache de micro-opérations L1 (cache de trace) au lieu d'un cache d'instructions L1.

Pour organiser la mémoire cache, vous pouvez utiliser l'architecture Princeton (cache mixte pour les instructions et les données, par exemple en Intel-486). Cette solution évidente (et inévitable pour les systèmes von Neumann avec mémoire cache externe au CPU) n'est pas toujours la plus efficace. La division du cache en un cache d'instructions et un cache de données (cache d'architecture Harvard) améliore l'efficacité du cache pour les raisons suivantes :

  • De nombreux processeurs modernes ont une architecture pipeline dans laquelle les blocs pipeline fonctionnent en parallèle. Ainsi, la récupération des instructions et l'accès aux données d'instructions se produisent à différentes étapes du pipeline, et l'utilisation d'un cache séparé permet d'effectuer ces opérations en parallèle.
  • Le cache d'instructions peut être implémenté en lecture seule et ne nécessite donc la mise en œuvre d'aucun algorithme de réécriture, ce qui rend ce cache plus simple, moins cher et plus rapide.

C'est pourquoi tous les derniers modèles IA-32, à commencer par le Pentium, utilisent l'architecture Harvard pour organiser le cache de premier niveau.

Un critère de fonctionnement efficace du cache peut être considéré comme une réduction du temps moyen d'accès à la mémoire par rapport à un système sans mémoire cache. Dans ce cas, le temps d’accès moyen peut être estimé comme suit :

T av = (T touché x R touché) + (T manqué x (1 R touché))

où T hit est le temps d'accès au cache en cas de succès (inclut le temps nécessaire pour identifier un échec ou un succès), T miss est le temps nécessaire pour charger un bloc de la mémoire principale dans une ligne de cache en cas d'échec du cache et livraison ultérieure des données demandées au processeur , R fréquence de hit - hit.

Évidemment, plus la valeur R hit est proche de 1, plus la valeur T moy est proche de T hit. Le taux de réussite est principalement déterminé par l'architecture du cache et sa taille. L'effet de la présence et de l'absence de mémoire cache et de sa taille sur la croissance des performances du processeur est présenté dans le tableau. 9.3.

Organisation de la mémoire du MPS. Segmentation de la mémoire. Calcul d'adresse. Mémoire cache interne.

La mémoire d'un système à microprocesseur remplit la fonction de stockage temporaire ou permanent de données et de commandes. La quantité de mémoire détermine la complexité admissible des algorithmes exécutés par le système, ainsi que, dans une certaine mesure, la vitesse du système dans son ensemble. Les modules de mémoire sont implémentés sur des puces mémoire (RAM ou ROM). De plus en plus, les systèmes à microprocesseurs utilisent la mémoire flash, qui est une mémoire non volatile capable de réécrire son contenu plusieurs fois.

Pour connecter le module de mémoire au bus système, des blocs d'interface sont utilisés, qui comprennent un décodeur d'adresse (sélecteur), un circuit de traitement des signaux de commande du bus et des tampons de données (Figure 7.4.1).

Graphique 7.4.1. Schéma de connexion du module de mémoire.

L'espace mémoire d'un système à microprocesseur est généralement alloué à plusieurs zones spéciales qui remplissent des fonctions spéciales. Ceux-ci incluent :

– mémoire du programme de démarrage, exécuté sur ROM ou mémoire flash ;

– la mémoire pour une pile ou une pile (Stack) est une partie de la RAM destinée au stockage temporaire des données ;

– table de vecteurs d'interruption contenant les adresses de début des programmes de traitement d'interruption ;

– mémoire des appareils connectés au bus système.

En règle générale, toutes les autres parties de l'espace mémoire ont un objectif universel. Ils peuvent contenir à la fois des données et des programmes (bien entendu dans le cas d'une architecture monobus).

Souvent, l'espace mémoire est divisé en segments avec une adresse de début de segment programmable et une taille de segment définie. Par exemple, dans le processeur Intel 8086, la segmentation de la mémoire est organisée comme suit.

L'ensemble de la mémoire système n'est pas représenté comme un espace continu, mais sous la forme de plusieurs morceaux - des segments d'une taille donnée (64 Ko chacun), dont la position dans l'espace mémoire peut être modifiée par programme.

Pour stocker les codes d'adresse mémoire, ce ne sont pas des registres individuels qui sont utilisés, mais des paires de registres :

Le registre de segment spécifie l'adresse de début du segment (c'est-à-dire la position du segment en mémoire) ;

Le registre pointeur (registre offset) détermine la position de l'adresse de travail dans le segment.

Dans ce cas, l'adresse mémoire physique de 20 bits exposée au bus d'adresse externe est formée comme le montre la figure 7.4.2, c'est-à-dire en ajoutant le décalage et l'adresse de segment avec un décalage de 4 bits.

Graphique 7.4.2. Formation d'une adresse mémoire physique à partir d'une adresse de segment et d'un décalage.

L'emplacement de cette adresse en mémoire est indiqué sur la figure 7.4.3.

Graphique 7.4.3. Emplacement de l'adresse physique en mémoire

Un segment ne peut commencer qu'à une limite de mémoire de 16 octets (puisque l'adresse de début du segment est essentiellement composée de quatre bits zéro de poids faible, comme le montre la figure 7.4.2), c'est-à-dire à une adresse qui est un multiple de 16. les limites de segments valides sont appelées limites de paragraphe.

A noter que l'introduction de la segmentation est principalement due au fait que les registres internes du processeur sont de 16 bits, et l'adresse mémoire physique est de 20 bits (une adresse de 16 bits permet d'utiliser seulement 64 Ko de mémoire, ce qui n'est clairement pas suffisant).

La mémoire cache est située entre la mémoire principale (RAM) et le processeur central pour réduire le temps passé à accéder au CPU à la RAM.

L'idée de la mémoire cache est basée sur la prédiction des accès CPU les plus probables à l'OP. Les données et les instructions les plus probables sont copiées dans la mémoire cache rapide et rythmée par le CPU avant d'être directement utilisées par le CPU, de sorte que les données et les instructions actuellement utilisées soient accessibles rapidement, sans avoir à accéder à l'OP. Cette approche repose sur le principe de localité du programme ou, comme on dit aussi, sur le caractère imbriqué des appels, ce qui signifie que les adresses des appels successifs vers l'OP forment, en règle générale, un groupe compact. Lors de l'accès à l'OP, ce ne sont pas des données individuelles qui sont copiées dans la mémoire cache, mais des blocs d'informations, y compris les données qui seront très probablement utilisées par la CPU dans les étapes de travail ultérieures. À cet égard, les instructions suivantes sont sélectionnées par la CPU non pas à partir de l'OP, mais à partir de la mémoire cache rapide. Lorsque le CPU a besoin de lire ou d'écrire des données dans la RAM, il vérifie d'abord leur présence dans la mémoire cache. L'efficacité d'un système de cache dépend de la taille du bloc et de l'algorithme du programme.


Depuis la création de l'ordinateur von Neumann, le principal mémoire dans un système informatique est organisé de manière linéaire (unidimensionnelle) espace d'adressage, composé d'une séquence de mots et d'octets ultérieurs. L'externe est organisé de la même manière. mémoire. Bien que cette organisation reflète le matériel utilisé, elle ne correspond pas à la manière dont les programmes sont généralement écrits. La plupart des programmes sont organisés en modules, dont certains sont immuables (lecture seule, exécution seule), tandis que d'autres contiennent des données modifiables.

Si système opérateur Et matériel peut travailler efficacement avec des programmes utilisateur et des données représentées par des modules, cela offre un certain nombre d'avantages.


  1. Les modules peuvent être créés et compilés indépendamment les uns des autres, toutes les références d'un module à l'autre étant résolues par le système pendant l'exécution du programme.

  2. Différents modules peuvent obtenir différents degrés de protection (lecture seule, exécution seule) au prix d'une surcharge très modeste.

  3. Il est possible d'utiliser un mécanisme qui assure le partage de modules entre différents processus (dans le cas d'une collaboration de processus pour travailler sur une même tâche).
Mémoire – le plus importantressource système informatique qui nécessite une gestion efficace. Même si ces jours-ci mémoire l'ordinateur domestique moyen est des milliers de fois plus grand mémoire ordinateurs centraux des années 1970, la taille des programmes a augmenté plus rapidement que celle des ordinateurs centraux des années 1970. mémoire. Il suffit de dire que seulement système opérateur occupe des centaines de Mo (par exemple, Fenêtres 2000 – jusqu’à 30 millions de lignes), sans parler des programmes d’application et des bases de données qui peuvent occuper des dizaines et des centaines de Go dans les systèmes informatiques.

Une paraphrase de la loi de Parkinson stipule : « Les programmes s'étendent pour remplir la quantité de mémoire disponible pour les prendre en charge. » (cela a été dit à propos du système d'exploitation). Idéalement, les programmeurs aimeraient avoir une taille et une vitesse illimitées mémoire, qui serait non volatile, c'est-à-dire conservait son contenu lorsque l’alimentation était coupée et serait également peu coûteux. Cependant, en réalité, un tel souvenir n’existe pas encore. Dans le même temps, à n'importe quel stade du développement de la technologie de production des dispositifs de mémoire, les relations assez stables suivantes s'appliquent :


  • plus le temps d'accès est court, plus le bit est cher ;

  • plus la capacité est élevée, plus le coût par bit est faible ;

  • Plus la capacité est élevée, plus le temps d’accès est long.
Pour trouver sortie Sur la base de la situation actuelle, il est nécessaire de ne pas s'appuyer sur des composants ou une technologie individuels, mais de construire une hiérarchie de périphériques de stockage, illustrée à la Fig. 6.1. Lorsque vous vous déplacez de gauche à droite, les événements suivants se produisent :

  • le coût par bit est réduit ;

  • la capacité augmente;

  • le temps d'accès augmente ;

  • La fréquence d'accès du processeur à la mémoire diminue.

Riz. 6.1. Hiérarchie de la mémoire

Supposer Processeur a accéderà la mémoire de deux niveaux. Le premier niveau contient E 1 mots, et il est caractérisé par un temps d'accès T 1 = 1 ns. A ce niveau Processeur peut contacter directement. Cependant, si vous avez besoin d'obtenir mot, situé au deuxième niveau, il doit alors être préalablement transféré au premier niveau. Dans ce cas, non seulement les exigences mot, UN bloc de données contenant ceci mot. Puisque les adresses adressées Processeur, ont tendance à se regrouper en groupes (cycles, sous-programmes), Processeur accède à un petit ensemble répétitif de commandes. Ainsi, le processeur fonctionnera assez longtemps avec le bloc de mémoire nouvellement reçu.

Notons par T 2 = 10 ns le temps d'accès au deuxième niveau mémoire, et par P - attitude du nombre d'occurrences du mot souhaité dans la mémoire rapide au nombre de tous les accès. Soit dans notre exemple P = 0,95 (c'est-à-dire que 95 % des appels sont rapides) mémoire, ce qui est tout à fait réaliste), alors la moyenne temps d'accès peut être écrit en mémoire comme ceci :

Tav = 0,95*1ns + 0,05* (1ns+10ns)=1,55ns

Ce principe peut s’appliquer à bien plus qu’une simple mémoire à double niveau. C'est effectivement ce qui se passe. La quantité de RAM affecte considérablement la nature du processus informatique, car elle limite le nombre de programmes exécutés simultanément, c'est-à-dire niveau de multiprogrammation. En supposant que le processus passe une partie p de son temps à attendre son achèvement opérations entrées-sorties, alors le degré de charge Z de l'unité centrale (CPU) sera idéalement exprimé par la dépendance

Z = 1 - p n, où n est le nombre de processus.

Sur la fig. La figure 6.2 montre la dépendance Z=p(n) pour différents temps d'attente d'achèvement opérations E/S (20%, 50% et 80%) et nombre de processus n. Le grand nombre de tâches requises pour une utilisation élevée du processeur nécessite une grande quantité de RAM. Dans des conditions où la mémoire disponible n'est pas suffisante pour assurer un niveau acceptable de multiprogrammation, une méthode a été proposée pour organiser un processus informatique dans lequel les images de certains processus sont temporairement téléchargées en tout ou en partie vers disque.

Évidemment, il est logique de décharger temporairement les processus inactifs qui attendent certaines ressources, y compris la prochaine tranche de temps CPU. Au moment où ça passe file d'attente exécution du processus déchargé, son image est renvoyée du disque au opérationnel mémoire. S'il s'avère qu'il n'y a pas assez d'espace libre dans la RAM, alors disque un autre processus est déchargé.

Une telle substitution ( virtualisation) La RAM avec mémoire disque vous permet d'augmenter le niveau de multiprogrammation, car la quantité de RAM ne limite désormais plus strictement le nombre de processus s'exécutant simultanément. Dans ce cas, la quantité totale de RAM occupée par les images de processus peut dépasser considérablement la quantité de RAM disponible.

Dans ce cas, le programmeur d'application dispose d'un espace opérationnel virtuel. mémoire, dont la taille est beaucoup plus grande que la vraie mémoire système et n'est limité que par les capacités d'adressage du procédé utilisé (dans les PC basés sur Pentium 2 32 = 4 Go). En général, le virtuel (apparent) est appelé ressource, qui possède des propriétés (dans ce cas un grand volume d'OP) qu'il n'a pas en réalité.

Virtualisation La RAM est implémentée automatiquement par une combinaison de matériel et de logiciels du système informatique (circuits du processeur et système d'exploitation) sans la participation d'un programmeur et n'affecte pas la logique de l'application.

Virtualisation la mémoire est possible sur la base de deux approches possibles :


  • échange – les images de processus sont téléchargées sur le disque et renvoyées dans leur intégralité dans la RAM ;

  • mémoire virtuelle ( mémoire virtuelle) – des parties d’images (segments, pages, blocs, etc.) de processus sont déplacées entre la RAM et le disque.
Inconvénients de l'échange :

  • redondance des données transférées et donc ralentissement du système et utilisation inefficace de la mémoire ;

  • impossibilité de charger un processus dont l'espace virtuel dépasse la mémoire libre disponible.
Avantages de l'échange Par par rapport à la mémoire virtuelle - plus petite coût temps de convertir les adresses en codes de programme, car cela est fait une fois lors du chargement du disque vers mémoire(cependant, cet avantage peut être insignifiant, puisque seule une partie du code est exécutée lors du prochain chargement et qu'il n'est peut-être pas nécessaire de transformer complètement le code).

Mémoire virtuelle n'a pas ces inconvénients, mais son problème clé est la conversion des adresses virtuelles en adresses physiques (la raison pour laquelle il s'agit d'un problème sera claire plus tard, mais pour l'instant nous pouvons noter l'important coût temps pour ce processus, à moins que des mesures particulières ne soient prises).

Concept de mémoire virtuelle

Dans un ordinateur avec mémoire virtuelle, l'espace d'adressage (AS) d'un processus (image de processus) est stocké dans la mémoire externe de l'ordinateur pendant l'exécution et chargé dans la mémoire réelle par parties, dynamiquement selon les besoins, dans n'importe quel espace libre du ROP. . Cependant, le programme n'en sait rien et est écrit et exécuté comme s'il était entièrement dans le ROP.

La mémoire virtuelle est une simulation de RAM dans la mémoire externe.

Le mécanisme de mappage des adresses virtuelles et réelles établit une correspondance entre elles et est appelé traduction d'adresse dynamique(APD ).

L’ordinateur agit ici déjà comme un périphérique logique, et non comme une machine physique dotée de caractéristiques uniques. DPA est pris en charge au niveau du matériel et du micrologiciel. Intel MP, à commencer par le processeur 386, prend en charge la mémoire virtuelle.

Cette procédure est effectuée pour les ordinateurs EC - rangée 2 et supérieure, pour les ordinateurs SM - 1700, pour IBM PC - I386 et supérieur.

Lors de la gestion de la mémoire virtuelle, les adresses virtuelles adjacentes ne sont pas nécessairement des adresses réelles adjacentes (contiguïté artificielle). Le programmeur est libéré de la nécessité de considérer le placement de ses procédures et données dans le ROP. Il a la possibilité d'écrire des programmes de la manière la plus naturelle, en travaillant uniquement sur les détails de l'algorithme et de la structure du programme, en ignorant les spécificités de la structure matérielle.

Le mécanisme DPA implique de maintenir des tableaux indiquant quelles cellules VP se trouvent actuellement dans le ROP et où exactement. Étant donné que l'affichage individuel des éléments d'information (mot par mot ou octet par octet) n'a pas de sens (puisque les tables de mappage d'adresses nécessiteraient plus de ROP que de processus), le mappage d'adresses est effectué au niveau des blocs OP.

Figure 1. Traduction d'adresse dynamique

Problème: quelle partie des processus conserver dans le PO, à certains moments, en supprimant certaines sections du PO et en en plaçant d'autres.

Autre question à aborder : Comment faire la taille du bloc?

L'augmentation de la taille des blocs entraîne une diminution de la taille de la table de mappage des blocs, mais augmente le temps d'échange et, à l'inverse, la réduction de la taille des blocs entraîne une augmentation des tables et une diminution du temps d'échange avec la mémoire externe.

Les blocs peuvent être de taille fixe (pages) ou de taille variable (segments). À cet égard, il y a quatre façons d'organiser la mémoire virtuelle :

1.Organisation dynamique des pages.

2. Organisation des segments.

3. Organisation combinée segment-page.

4.Organisation des pages à deux niveaux.

Les adresses virtuelles dans les systèmes de pages et de segments sont à deux composants et représentent une paire ordonnée (p,d), Où p- le numéro du bloc (page ou segment) dans lequel se trouve l'élément, et d- décalage par rapport à l'adresse de départ de ce bloc. Conversion d'adresse virtuelleV=(p,d) à l'adresse mémoire réeller s'effectue de la manière suivante. Lorsque le processus suivant est activé, l'adresse de la table de mappage de blocs de ce processus est chargée dans un registre de processeur spécial. Selon le numéro de bloc pà partir de la table de mappage de blocs, une ligne est lue dans laquelle une correspondance est établie entre les nombres de pages virtuelles et physiques pour les pages chargées dans la RAM, ou une note est notée que la page virtuelle est échangée sur le disque. De plus, la table des pages contient des informations de contrôle, comme un indicateur de modification de page, un indicateur non paginable (le déchargement de certaines pages peut être interdit), un indicateur d'accès à la page (utilisé pour compter le nombre d'accès pendant une certaine période de temps ) et d'autres données générées et utilisées par la mémoire virtuelle du moteur. La taille du décalage est ajoutée à l'adresse physique de lecture du bloc sélectionné d et l'adresse réelle requise est calculée.

Graphique 2. Conversion d'une adresse virtuelle en une adresse mémoire réelle

Voyons quelle est la stratégie de gestion de la mémoire virtuelle ? Semblable à la gestion ROP, il existe trois catégories de stratégies pour le contrôle des VIs, dans le but de réduire les attentes de page et de placer uniquement les blocs utilisés dans le ROP.

Stratégie de poussée , qui détermine quand une page ou un segment doit être réécrit de la mémoire externe vers l'OP.

UN) pousser sur demande- le système attend un lien vers la page/le segment de la part du processus en cours (abandon dû à l'absence de page) ;

arguments pour :


  • le cheminement de l'exécution du programme ne peut être prédit avec certitude ;

  • garantir que seules les pages nécessaires se trouvent dans l'OP ;

  • les frais généraux liés à la détermination des pages requises sont minimes ;
arguments contre :

  • l'échange d'un bloc à la fois augmente le temps d'attente total.
b) poussée préventive suppose que le système peut anticiper la nécessité d’utiliser la page/le segment à l’avenir. Si la probabilité de requêtes est élevée et qu'il existe un OP libre, alors les blocs correspondants sont réécrits dans l'OP.

Avantage : temps d’attente réduit.

Actuellement, les performances des équipements augmentent et des solutions non optimales n'entraînent pas une diminution de l'efficacité des systèmes informatiques.

Stratégie de placement, déterminer où placer la page/le segment entrant. Dans les systèmes de pages, c'est trivial : dans n'importe quel bloc libre (la page a une taille fixe). Dans les systèmes de segments, les mêmes stratégies sont utilisées que pour un PO réel (vers la première zone adaptée, vers la plus adaptée, vers la moins adaptée).

Stratégie de push-out (remplacement) déterminer quelle page/segment supprimer de l'OP pour libérer de l'espace pour la page entrante.

C'est le problème principal" glissement", dans lequel la page éjectée doit être replacée dans le ROP au moment suivant.

Considérons les procédures de détermination des blocs à expulser du PO.

UN) ouvrir une page au hasard- non utilisé dans les systèmes réels ;

b) éjecter la première page qui arrive (FIFO- file d'attente). Pour mettre en œuvre cela, il est nécessaire de définir des horodatages de page.

Argument: La page a déjà eu l'occasion de profiter de sa chance.

En fait: Très susceptible de remplacer les pages activement utilisées, car les pages étant présentes pendant une longue période peuvent signifier qu'elles sont constamment utilisées. Par exemple, l'éditeur de texte utilisé.

V) éjectant les pages inutilisées les plus longues.

Pour mettre en œuvre cela, il est nécessaire d’implémenter des horodatages actualisables. Argument heuristique: - le passé récent est un bon guide pour l'avenir.

L’inconvénient est une surcharge importante : la mise à jour constante des horodatages.

G) éjecter les pages les moins utilisées- suppose la présence de compteurs de pages (moins intensivement que les horodatages mis à jour). Intuitivement justifié, mais peut-être non plus rationnel.

d) éjecter les pages récemment inutilisées- l'algorithme le plus courant avec une faible surcharge. Implémenté par deux bits matériels par page :

1. signe de traitement 0 - était

1 - il n'y en avait pas.

2. enregistrer le signe de modification 0 - inchangé.

1 - changé.

Les combinaisons suivantes sont possibles { 00,10,01,11). S'il n'y a eu aucune modification sur la page, celle-ci peut simplement être réécrite plutôt que enregistrée sur le disque.



Des questions ?

Signaler une faute de frappe

Texte qui sera envoyé à nos rédacteurs :