void operate_load(Cache *cache, int set, int tag) { int hit_flag = 0; for(int line_num = 0; line_num < E; line_num ++){ Cache_Line current_line = cache -> set_array[set].line_array[line_num]; if ((current_line.valid == 1) && (current_line.line_tag == tag)) { hit_flag = 1; num_hit ++; refresh_age(cache, set, line_num); break; } } //when there is no hit in cache if(hit_flag != 1){ num_miss ++; //when the cache is not full if(is_cache_full(cache,set) != 1) { for(int line_num = 0; line_num < E; line_num ++) { if(cache -> set_array[set].line_array[line_num].valid == 0){ cache -> set_array[set].line_array[line_num].line_tag = tag; cache -> set_array[set].line_array[line_num].valid = 1; refresh_age(cache, set, line_num); break; } } } //when the cache is full else{ num_eviction ++; int minimum_age = cache -> set_array[set].line_array[0].age_of_line; int minimum_line = 0; for (int line_num = 1; line_num < E; line_num++ ) { if ((cache -> set_array[set].line_array[line_num].age_of_line) < minimum_age ) { minimum_age = cache -> set_array[set].line_array[line_num].age_of_line; minimum_line = line_num; } } cache -> set_array[set].line_array[minimum_line].line_tag = tag; refresh_age(cache, set, minimum_line); } } }
int fifo::insert(string url, string response) { cout<<endl<<"Insertion happening"; int response_size = response.length(); if (response_size > max_size){ return 0; } while(is_cache_full(response_size)){ remove_node(); } Queue_node *node = new Queue_node(); node->url = url; node->data = response; node->size = response_size; fifo_queue.push(node); url_to_node[url] = node; // cout<<(url_to_node[url])->url)<<endl; // cout<<(url_to_node[url])->data)<<endl; current_size += response_size; cout<<"Response size is "<<response_size; cout<<"Current size is "<<current_size; return 1; }