What im trying to do is implement the cache using C. I have to find out the hit and miss rate of the cache. my code is pretty long so i'll just show u the parts i've implemented and the parts i need help with. If u have any inqueries PLZ feel free to ask. Thank you in advance for any help provided.
This is the part i have implemented. The code basically implements the Full associative, set associative and direct mapped cache.

cache - array of SETS

Code:
int i;
if(MAX_SET==1)        // Fully Associative Cache 
{
     i = 0;
     while (i <=BLOCKS_PER_SET)   // Dividing the SET into 
                                                       //Blocks of size "BYTES_PER_BLOCK" 
     {
         cache[i].block = (struct BLOCK *)malloc(BYTES_PER_BLOCK)    // Not Sure about "  cache[i].block "  
         i ++;
      }
      cache --;
}
else
{
    while (cache )   //THINK OF CONDITION: while the array of SETS is not FULL
    {
        if (MAX_SET == BLOCKS_PER_SET) //Direct Mapped Cache
        {
             while (MAX_SET != 0)
             {
                i = 0;
	while (i <=BLOCKS_PER_SET) // Dividing the SET into BLOCKS 
                                                               //of size "BYETS_PER_BLOCK"
	{
	    cache[i].block = (struct BLOCK *)malloc 
                    BYTES_PER_BLOCK)    //CHECK the "cache[i].block"
	     i ++;
	}
	MAX_SET --;
             }
         }
         else // Set Associative Cache
         {
             while (MAX_SET != 0)
             {
	 i = 0;
	while (i <=BLOCKS_PER_SET) // Dividing the SET into BLOCKS of 
                                                               //size "BYTES_PER_BLOCK"
	{
	    cache[i].block = (struct BLOCK *)malloc(BLOCKS_PER_SET)    		    i ++;
	}
	MAX_SET --;
              }
           }
           cache --;
        }
}int i;
if(MAX_SET==1)        // Fully Associative Cache 
{
     i = 0;
     while (i <=BLOCKS_PER_SET)   // Dividing the SET into 
                                                       //Blocks of size "BYTES_PER_BLOCK" 
     {
         cache[i].block = (struct BLOCK *)malloc(BYTES_PER_BLOCK)    // Not Sure about "  cache[i].block "  
         i ++;
      }
      cache --;
}
else
{
    while (cache )   //THINK OF CONDITION: while the array of SETS is not FULL
    {
        if (MAX_SET == BLOCKS_PER_SET) //Direct Mapped Cache
        {
             while (MAX_SET != 0)
             {
                i = 0;
	while (i <=BLOCKS_PER_SET) // Dividing the SET into BLOCKS 
                                                               //of size "BYETS_PER_BLOCK"
	{
	    cache[i].block = (struct BLOCK *)malloc 
                    BYTES_PER_BLOCK)    //CHECK the "cache[i].block"
	     i ++;
	}
	MAX_SET --;
             }
         }
         else // Set Associative Cache
         {
             while (MAX_SET != 0)
             {
	 i = 0;
	while (i <=BLOCKS_PER_SET) // Dividing the SET into BLOCKS of 
                                                               //size "BYTES_PER_BLOCK"
	{
	    cache[i].block = (struct BLOCK *)malloc(BLOCKS_PER_SET)    		    i ++;
	}
	MAX_SET --;
              }
           }
           cache --;
        }
}
Since my program is incomplete, im not able to test it, SO i was wondering if In the part i implemented
Code:
 cache[i].block = (struct BLOCK *)malloc(BLOCKS_PER_SET)
is correct (Syntax wise).

This is the part i need help with. I have the algorithim down but im not sure how to implement. Again, any help is most appreciated:


Code:
 BOOL simulate(unsigned int address)
{
	/* Algorithm:
                 * - Find the index for current address
	 * - For that set, search all valid blocks for matching tags
	 * - If a match is found, you have a hit:
  	 *   + update timestamp of block and LRU of set
	 *   + return true
	 * - If there is no match, you have a miss:
	 *   + Search for an invalid block and use it to store new block
	 *   + If there are no invalid blocks, replace the LRU block
	 *   + update timestamp of block and LRU of set
	 *   + return false
	 */
	/******* Fully Associative Cache*******/
	
	/********* Direct Mapped Cache*********/
	/******** SET Associative Cache********/
}
Again, thank you in advance for any help provided