/** * 分析内存读取命令 */ 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; }
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; }