Пример #1
0
/*! Transférer un élément à la fin */
void Cache_List_Move_To_End(struct Cache_List *list, struct Cache_Block_Header *pbh)
{
	assert(list);
	
	Cache_List_Remove(list, pbh);
	Cache_List_Append(list, pbh);	
}
Пример #2
0
//! Algorithme de remplacement de bloc.
// Appel si le cache ne possède plus de block libre
struct Cache_Block_Header *Strategy_Replace_Block(struct Cache *pcache)
{
    struct Cache_List * blocks = (struct Cache_List *) pcache->pstrategy;
    struct Cache_Block_Header * block = Get_Free_Block(pcache);

    if(block!=NULL)
    {
        Cache_List_Append( blocks, block);
        return block;
    }
    block = Cache_List_Remove_First(blocks);
    //on le déplace en bout de ligne
    Cache_List_Append(blocks, block);
    //return le plus vieux bloc (premier element de la liste pstrategy)
    return block;
}
Пример #3
0
struct Cache_Block_Header *Strategy_Replace_Block(struct Cache *pcache) 
{
    struct Cache_Block_Header *buffer;
    struct Cache_List *c_list = C_LIST(pcache);

    /* S'il existe un cache invalide, on va utiliser celui la */
    if ((buffer = Get_Free_Block(pcache)) != NULL) {
    	// Comme on va l'utiliser, on le met en fin de liste
        Cache_List_Append(c_list, buffer);
    } else {
	    // On prend le premier de la liste que l'on va retourner
	    buffer = Cache_List_Remove_First(c_list);

	    // Comme on va l'utiliser, on le met en fin de liste
	    Cache_List_Append(c_list, buffer);
	}
    return buffer;    
}
Пример #4
0
/*! 
 * FIFO : On prend le premier bloc invalide. S'il n'y en a plus, on prend un bloc au hasard.
 */
struct Cache_Block_Header *Strategy_Replace_Block(struct Cache *pcache) 
{
    struct Cache_Block_Header *pbh;

    /* On cherche d'abord un bloc invalide */
    if ((pbh = Get_Free_Block(pcache)) != NULL){
        Cache_List_Append(list, pbh);
        return pbh;
    } 

    if(Cache_List_Is_Empty(list)){
        perror("pas possible");
        exit(1);
    }

    pbh = Cache_List_Remove_First(list);
    Cache_List_Append(list, pbh);

    return pbh;

}
Пример #5
0
/*!
 * //! Algorithme de remplacement de bloc.
 * @author Ulysse Riccio
 */
struct Cache_Block_Header *Strategy_Replace_Block(struct Cache *pcache)
{
    struct Cache_Block_Header *pbh;
    struct Cache_List *lru_list = (struct Cache_List *) ( (pcache)->pstrategy );

    /* On cherche d'abord un bloc invalide */
    if ((pbh = Get_Free_Block(pcache)) != NULL)
    {
        /*! Insertion d'un élément à la fin */
        // Les blocs invalides a mettre dans la queue
        Cache_List_Append(lru_list, pbh);
        return pbh;
    }

    /*! Retrait du premier élément */
    // Sinon on prend le premier bloc de la liste LRU et on le déplace à la fin
    pbh = Cache_List_Remove_First(lru_list);
    /*! Insertion d'un élément à la fin */
    Cache_List_Append(lru_list, pbh);

    return pbh;
}