コード例 #1
0
ファイル: ArchMemory.cpp プロジェクト: fkirc/sweb
uint32 ArchMemory::getValueForCR3()
{
  // last 5 bits must be zero!
  assert(((uint32)page_dir_pointer_table_ & 0x1F) == 0);
  size_t ppn = 0;
  if (get_PPN_Of_VPN_In_KernelMapping(((size_t)page_dir_pointer_table_) / PAGE_SIZE,&ppn) > 0)
    return ppn * PAGE_SIZE + ((size_t)page_dir_pointer_table_ % PAGE_SIZE);
  assert(false);
  return 0;
}
コード例 #2
0
ファイル: ArchMemory.cpp プロジェクト: crazy-weasel/sweb
uint64 ArchMemory::get_PAddr_Of_VAddr_In_KernelMapping(uint64 virtual_addr)
{
  uint64 physical_addr;
  uint32 page_size = get_PPN_Of_VPN_In_KernelMapping(virtual_addr / PAGE_SIZE, &physical_addr);
  return physical_addr * page_size + (virtual_addr % PAGE_SIZE);
}