Je crois comprendre que la principale différence entre les deux méthodes est que dans la méthode «écriture immédiate», les données sont écrites dans la mémoire principale via le cache immédiatement, tandis que dans la «réécriture», les données sont écrites dans un «dernier temps».
Nous devons encore attendre la mémoire dans le «dernier temps» alors quel est l'avantage de «l'écriture directe»?
caching
cpu-architecture
cpu-cache
Naftaly
la source
la source
write back
a de meilleures performances?write back
a de meilleures performances, car l'écriture dans la mémoire principale est beaucoup plus lente que l'écriture dans le cache du processeur, et les données peuvent être courtes pendant (cela peut changer plus tôt et il n'est pas nécessaire de mettre l'ancienne version en mémoire). C'est complexe, mais plus sophistiqué, la plupart des mémoires des processeurs modernes utilisent cette politique.Réponses:
L'avantage de l'écriture directe dans la mémoire principale est qu'elle simplifie la conception du système informatique. Avec l'écriture directe, la mémoire principale a toujours une copie à jour de la ligne. Ainsi, lorsqu'une lecture est effectuée, la mémoire principale peut toujours répondre avec les données demandées.
Si la réécriture est utilisée, les données mises à jour se trouvent parfois dans un cache du processeur et parfois dans la mémoire principale. Si les données se trouvent dans un cache de processeur, ce processeur doit alors empêcher la mémoire principale de répondre à la demande de lecture, car la mémoire principale peut avoir une copie périmée des données. C'est plus compliqué que l'écriture directe.
En outre, l'écriture directe peut simplifier le protocole de cohérence du cache car il n'a pas besoin de l' état Modifier . L' état Modifier indique que le cache doit réécrire la ligne de cache avant d'invalider ou d'expulser la ligne. En écriture directe, une ligne de cache peut toujours être invalidée sans réécriture car la mémoire a déjà une copie à jour de la ligne.
Une dernière chose - sur une architecture à écriture différée, un logiciel qui écrit dans des registres d'E / S mappés en mémoire doit prendre des mesures supplémentaires pour s'assurer que les écritures sont immédiatement envoyées hors du cache. Sinon, les écritures ne sont pas visibles à l'extérieur du cœur tant que la ligne n'est pas lue par un autre processeur ou que la ligne n'est pas expulsée.
la source
Regardons cela à l'aide d'un exemple. Supposons que nous ayons un cache mappé direct et que la politique de réécriture soit utilisée. Nous avons donc un bit valide, un bit sale, une balise et un champ de données dans une ligne de cache. Supposons que nous ayons une opération: écrire A (où A est mappé sur la première ligne du cache).
Ce qui se passe, c'est que les données (A) du processeur sont écrites sur la première ligne du cache. Le bit valide et les bits d'étiquette sont définis. Le bit sale est mis à 1.
Un bit sale indique simplement que la ligne de cache a été écrite depuis sa dernière mise en cache!
Supposons maintenant qu'une autre opération soit effectuée: lisez E (où E est également mappé à la première ligne de cache)
Puisque nous avons un cache mappé directement, la première ligne peut simplement être remplacée par le bloc E qui sera apporté de la mémoire. Mais comme le dernier bloc écrit dans la ligne (bloc A) n'est pas encore écrit dans la mémoire (indiqué par le bit sale), le contrôleur de cache émettra d'abord une réécriture dans la mémoire pour transférer le bloc A en mémoire, puis il remplacera la ligne par le bloc E en émettant une opération de lecture dans la mémoire. Le bit sale est maintenant mis à 0.
La politique de réécriture ne garantit donc pas que le bloc sera le même en mémoire et dans sa ligne de cache associée. Cependant, chaque fois que la ligne est sur le point d'être remplacée, une réécriture est effectuée dans un premier temps.
Une politique d'écriture directe est exactement le contraire. Selon cela, la mémoire aura toujours des données à jour. Autrement dit, si le bloc de cache est écrit, la mémoire sera également écrite en conséquence. (pas d'utilisation de bits sales)
la source
peut-être que cet article peut vous aider à créer un lien ici
Écriture directe: l'écriture est effectuée de manière synchrone à la fois dans le cache et dans le magasin de sauvegarde.
Écriture différée (ou écriture différée): l'écriture est effectuée uniquement dans le cache. Un bloc de cache modifié est réécrit dans le magasin, juste avant d'être remplacé.
Écriture immédiate: lorsque les données sont mises à jour, elles sont écrites à la fois dans le cache et dans le stockage principal. Ce mode est facile à utiliser mais est lent dans l'écriture des données car les données doivent être écrites à la fois dans le cache et dans le stockage.
Réécriture: lorsque les données sont mises à jour, elles sont écrites uniquement dans le cache. Les données modifiées sont écrites dans le stockage principal uniquement lorsque les données sont supprimées du cache. Ce mode a une vitesse d'écriture de données rapide, mais les données seront perdues en cas de panne de courant avant que les données mises à jour ne soient écrites sur le stockage.
la source
L'écriture différée et l'écriture directe décrivent les politiques lorsqu'un succès d'écriture se produit, c'est-à-dire lorsque le cache contient les informations demandées. Dans ces exemples, nous supposons qu'un seul processeur écrit dans la mémoire principale avec un cache.
Écriture immédiate: les informations sont écrites dans le cache et la mémoire, et l'écriture se termine lorsque les deux sont terminés. Cela a l'avantage d'être plus simple à mettre en œuvre, et la mémoire principale est toujours cohérente (en synchronisation) avec le cache (pour le cas monoprocesseur - si un autre périphérique modifie la mémoire principale, alors cette politique ne suffit pas), et un échec de lecture n'entraîne jamais d'écriture dans la mémoire principale. L'inconvénient évident est que chaque hit d'écriture doit faire deux écritures, dont l'une accède à la mémoire principale plus lente.
Réécriture: les informations sont écrites dans un bloc du cache. Le bloc de cache modifié n'est écrit en mémoire que lorsqu'il est remplacé (en fait, une écriture différée ). Un bit spécial pour chaque bloc de cache, le bit sale , marque si le bloc de cache a été modifié ou non dans le cache. Si le bit modifié n'est pas défini, le bloc de cache est "propre" et un échec d'écriture n'a pas besoin d'écrire le bloc en mémoire.
L'avantage est que les écritures peuvent se produire à la vitesse du cache, et si l'écriture dans le même bloc, une seule écriture dans la mémoire principale est nécessaire (lorsque le bloc précédent est remplacé). Les inconvénients sont que ce protocole est plus difficile à implémenter, la mémoire principale peut ne pas être cohérente (pas synchronisée) avec le cache et les lectures qui entraînent un remplacement peuvent provoquer des écritures de blocs sales dans la mémoire principale.
Les politiques pour un échec d'écriture sont détaillées dans mon premier lien.
Ces protocoles ne prennent pas en charge les cas avec plusieurs processeurs et plusieurs caches, comme cela est courant dans les processeurs modernes. Pour cela, des mécanismes de cohérence de cache plus compliqués sont nécessaires. Les caches d'écriture directe ont des protocoles plus simples puisqu'une écriture dans le cache est immédiatement reflétée dans la mémoire.
Bonnes ressources:
la source
La réécriture est plus complexe et nécessite un protocole MOESI (Cache Coherence Protocol) compliqué, mais cela en vaut la peine car cela rend le système rapide et efficace.
Le seul avantage de l'écriture directe est qu'elle rend la mise en œuvre extrêmement simple et qu'aucun protocole compliqué de cohérence de cache n'est requis.
la source