/**
 * Stores the data given by the virtual address, using the virutal -> physical
 * translation system of the CPU.
 *
 * @param va The virtual address to write.
 * @param data The data to write to the address.
 */
void mem_store(vaddr_t va, word_t data) {
   vpn_t vpn;
   pfn_t pfn, offset;

   vpn = VADDR_PAGENUM(va);
   pfn = tlb_lookup(vpn, 1);
   offset = VADDR_OFFSET(va);

   printf("STORE %5.5u <- %3.3u (VPN %5.5u PFN %5.5u OFFSET %5.5u)\n",
          va, data, vpn, pfn, offset);

   count_writes++;

   memory[pfn * page_size + offset] = data;
}
Пример #2
0
/**
 * Stores the data given by the virtual address, using the virutal -> physical
 * translation system of the CPU.
 *
 * @param va The virtual address to write.
 * @param data The data to write to the address.
 */
void mem_store(vaddr_t va, word_t data) {
   vpn_t vpn;
   pfn_t pfn, offset;

   vpn = VADDR_PAGENUM(va);
   pfn = tlb_lookup(vpn, 1);
   offset = VADDR_OFFSET(va);

   printf("STORING %3.3u as data in virtual address %5.5u.\nVirtual Address information: (VPN: %5.5u PFN: %5.5u OFFSET: %5.5u)\n", 
          data, va, vpn, pfn, offset);

   count_writes++;

   memory[pfn * page_size + offset] = data;
}
Пример #3
0
/*******************************************************************************
 * Loads the data given by the virtual address, using the virutal -> physical
 * translation system of the CPU.
 *
 * @param va The virtual address to read.
 * @return The data at the given address.
 */
word_t mem_load(vaddr_t va) {
   vpn_t vpn;
   pfn_t pfn, offset;
   word_t data;

   vpn = VADDR_PAGENUM(va);
   pfn = tlb_lookup(vpn, 0);
   offset = VADDR_OFFSET(va);
   data = memory[pfn * page_size + offset];

   printf("LOADING %3.3hu as data from virtual address %5.5hu.\nVirtual Address Information: (VPN: %5.5hu PFN: %5.5hu OFFSET: %5.5hu)\n", 
          data, va, vpn, pfn, offset);

   count_reads++;

   return data;
}
/*******************************************************************************
 * Loads the data given by the virtual address, using the virutal -> physical
 * translation system of the CPU.
 *
 * @param va The virtual address to read.
 * @return The data at the given address.
 */
word_t mem_load(vaddr_t va) {
   vpn_t vpn;
   pfn_t pfn, offset;
   word_t data;

   vpn = VADDR_PAGENUM(va);
   pfn = tlb_lookup(vpn, 0);
   offset = VADDR_OFFSET(va);

   data = memory[pfn * page_size + offset];

   printf("LOAD  %5.5hu -> %3.3u (VPN %5.5hu PFN %5.5hu OFFSET %5.5hu)\n",
          va, (unsigned int)data, vpn, pfn, offset);

   count_reads++;

   return data;
}