Exemplo n.º 1
0
/**
 * 分析内存读取命令
 */
int parse_traces(simu_cache *cache, char *line_buf, int s, int E, int b, int flag)
{
	int i;
	char opt;
	int addr;
	int selset, tag;
	sscanf(line_buf, " %c %x", &opt, &addr);
	selset = getSetBits(addr, s, b);
	tag = getTagBits(addr, s, b);
	for (i = 0; i < cache->line_num; i++) {
		if (1 == cache->sets[selset].lines[i].valid && 
				tag == cache->sets[selset].lines[i].tag) {
			/* Hit immediately */
			if ('M' == opt) {
				++hits;
				++hits;
			} else {
				++hits;
			}
			updateAccessTime(cache, selset, i);
			return HIT;
		}
	}

	/* Not Hit */
	++misses;
	for (i = 0; i < cache->line_num; i++) {
		if (0 == cache->sets[selset].lines[i].valid) { 				
			/* there is a empty line, No eviction */
			cache->sets[selset].lines[i].valid = 1;
			cache->sets[selset].lines[i].tag = tag;
			updateAccessTime(cache, selset, i);
			if ('M' == opt) {
				++hits;
				return MISS_AND_HIT;
			} else {
				return MISS;	
			}
		}
	}

	/* Need eviction */
	++evictions;
	for (i = 0; i < cache->line_num; i++) {
		if (1 == cache->sets[selset].lines[i].access_time) {
			cache->sets[selset].lines[i].valid = 1;
			cache->sets[selset].lines[i].tag = tag;
			updateAccessTime(cache, selset, i);
			if ('M' == opt) {
				++hits;
				return MISS_EVICTION_AND_HIT;
			} else {
				return MISS_AND_EVICTION;
			}
		}

	}

	return 0;
}
errorCode insertNewElement(limSizeCache * lsc, unsigned int slot, void * key, void * data){
  copyData(lsc, slot, data);
  //setCnt(lsc, slot, 1);
  updateAccessTime(lsc, slot);
  ACCNT_USED(lsc, slot) = 1;
  ACCNT_KEY(lsc, slot) = key;
  ACCNT_BH(lsc, slot) = NULL;
  ACCNT_EVICT(lsc, slot) = 0;

  return STATUS_OK;
}
Exemplo n.º 3
0
void MetadataManager::setDouble(String uri, const char* name, double value)
{
	XOJ_CHECK_TYPE(MetadataManager);

	if (uri.isEmpty())
	{
		return;
	}
	loadConfigFile();

	g_key_file_set_double(this->config, uri.c_str(), name, value);

	updateAccessTime(uri);
}
/* Function that will be used by the cacheLookupFailedInsert() 
   It inserts an element, but does no data copying
   The access counter is updated
 */
errorCode insertNewElementNoDataCopy(limSizeCache * lsc, unsigned int slot, void * key, void ** address){
  updateAccessTime(lsc, slot);
  ACCNT_USED(lsc, slot) = 1;

  ACCNT_KEY(lsc, slot) = key;
  ACCNT_EVICT(lsc, slot) = 0;
  ACCNT_BH(lsc, slot) = NULL;

  if (ACCNT_DATA(lsc, slot) == NULL){
    /* we need to allocate data space */
   FCT_FAIL(pageAlloc(CACHE_BLOCK_SIZE, &(ACCNT_DATA(lsc, slot))), "insertNewElementNoDataCopy: CAn not allocate memory for data");
    
  }
  
  *address = ACCNT_DATA(lsc, slot);
  
  return STATUS_OK;
}