コード例 #1
0
ファイル: csim.c プロジェクト: liopei19nn/15213_LIP
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);
		}
	}
	
}
コード例 #2
0
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;
}