2017-06-02 3 views
0

J'essaie de développer le simulateur de cache en utilisant l'algorithme fifo. Je comprends comment fonctionne l'algorithme fifo, mais j'ai du mal à comprendre comment l'implémenter. Je suis fourni avec le modèle pour développer le cache. Je m'interroge sur la bonne façon de mettre en œuvre l'algorithme.Bonne façon de développer un simulateur de cache en utilisant l'algorithme fifo sur C++

#include <stdlib.h> 

extern int opt_assoc, opt_block, opt_capacity, opt_repl, opt_verbose; 

typedef struct { 
    int set;      // set ID: 0 ~ (#sets - 1) 
    int blk;      // block ID: 0 ~ (#blocks - 1) 
    bool miss;     // whether this access is a miss 
    bool evict;     // whether eviction happens 
    bool is_victim_dirty;   // if evicted, whether the evicted block is dirty 
} cache_state_t; 

cache_state_t cache(unsigned int addr, char type) 
{ 
    // type: either 'l' or 's' 

    cs.miss = true; 
    static bool first_time = true; 
    if (first_time) { 
     first_time = false; 
    } 

    cache_state_t cs; 

    return cs; 
} 
+1

''? 'typedef struct {'? Vous devriez étiqueter votre question comme "en C99", pas "en C++". – mloskot

+0

Je suis confus par ce modèle. À moins que quelque chose ne me manque, 'cache()' semble déclarer 'cs' sur la pile et le retourner, auquel cas il sera libéré dès que la fonction sera fermée. Est-ce que je me trompe? –

+0

@PatrickRoberts exactement! – Huan

Répondre

0

Votre code est incorrect et incomplet, je pense que vous êtes juste de commencer à programmer en C. Utiliser un langage de programmation C ANSI (le livre) pour apprendre à mettre en œuvre une liste doublement chaînée ou une file d'attente circulaire, et alors allez de là. Pour donner plus d'indices, cache_state_t sera un nœud dans une liste doublement chaînée ou une file d'attente circulaire, une fois que vous aurez rempli le cache à la prochaine requête si cela veut dire enlever le nœud principal du cache et mettre le nouveau nœud de cache dans la queue.

Le remplacement de la mémoire cache FIFO est normalement donné dans les affectations de classe, très rarement ces stratégies sont implémentées commercialement, LRU est l'horizon des solutions commerciales de gestion de cache.

Idéalement, cela devrait être un commentaire, mais je n'ai pas de privilèges de commentaire.

+0

Comme je le disais c'est juste un modèle, donc c'est pas surprenant que ce soit incomplet. Ma préoccupation est la mise en œuvre de l'algorithme. Im assez familier avec C, je veux juste trouver un moyen d'implémenter le cache. – Huan

+0

Ne vous sentez pas offensé, mais quel genre de modèle déclarerait la variable plus tard et attribuer la valeur avant. Je suis désolé mais pour un code pseudo trop votre exemple ne s'additionne pas. Mais nous sommes tous là pour aider. Le DS que vous devez utiliser est une file d'attente circulaire où la taille de la file d'attente correspond à la taille de votre cache. –