SimpleKernel  0.0.1
Memory Class Reference

#include <load_elf.h>

Collaboration diagram for Memory:
Collaboration graph

Public Member Functions

 Memory ()
 
 ~Memory ()=default
 
void print_info ()
 
不使用的构造函数
 Memory (const Memory &)=delete
 
 Memory (Memory &&)=delete
 
auto operator= (const Memory &) -> Memory &=delete
 
auto operator= (Memory &&) -> Memory &=delete
 

Private Member Functions

void flush_desc ()
 

Private Attributes

内存映射信息
uint64_t desc_count = 0
 
EFI_MEMORY_DESCRIPTOR * memory_map = nullptr
 
uint64_t map_key = 0
 
uint64_t desc_size = 0
 
uint32_t desc_version = 0
 

Detailed Description

内存相关

Definition at line 87 of file load_elf.h.

Constructor & Destructor Documentation

◆ Memory() [1/3]

Memory::Memory ( )

构造函数

Definition at line 30 of file memory.cpp.

30 { flush_desc(); }
void flush_desc()
Definition: memory.cpp:22
Here is the call graph for this function:

◆ ~Memory()

Memory::~Memory ( )
default

析构函数

◆ Memory() [2/3]

Memory::Memory ( const Memory )
delete

◆ Memory() [3/3]

Memory::Memory ( Memory &&  )
delete

Member Function Documentation

◆ flush_desc()

void Memory::flush_desc ( )
private

更新内存映射信息

Definition at line 22 of file memory.cpp.

22  {
23  memory_map = LibMemoryMap(&desc_count, &map_key, &desc_size, &desc_version);
24  if (memory_map == nullptr) {
25  debug << L"LibMemoryMap failed: memory_map == nullptr" << ostream::endl;
26  throw std::runtime_error("memory_map == nullptr");
27  }
28 }
uint64_t desc_count
Definition: load_elf.h:115
EFI_MEMORY_DESCRIPTOR * memory_map
Definition: load_elf.h:116
uint32_t desc_version
Definition: load_elf.h:119
uint64_t desc_size
Definition: load_elf.h:118
uint64_t map_key
Definition: load_elf.h:117
static auto endl(ostream &_ostream) -> ostream &
Definition: ostream.cpp:42
static ostream debug
全局输出流
Definition: ostream.hpp:194
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator=() [1/2]

auto Memory::operator= ( const Memory ) -> Memory &=delete
delete

◆ operator=() [2/2]

auto Memory::operator= ( Memory &&  ) -> Memory &=delete
delete

◆ print_info()

void Memory::print_info ( )

输出内存映射信息

Definition at line 32 of file memory.cpp.

32  {
33  flush_desc();
34  debug << L"Type\t\t\t\tPages\tPhysicalStart\tVirtualStart\tAttribute"
35  << ostream::endl;
36  for (uint64_t i = 0; i < desc_count; i++) {
37  auto *MMap = reinterpret_cast<EFI_MEMORY_DESCRIPTOR *>(
38  (reinterpret_cast<uint8_t *>(memory_map)) + i * desc_size);
39 
40  switch (MMap->Type) {
41  case EfiReservedMemoryType: {
42  debug << L"iReservedMemoryType\t\t";
43  break;
44  }
45  case EfiLoaderCode: {
46  debug << L"EfiLoaderCode\t\t\t";
47  break;
48  }
49  case EfiLoaderData: {
50  debug << L"EfiLoaderData\t\t\t";
51  break;
52  }
53  case EfiBootServicesCode: {
54  debug << L"EfiBootServicesCode\t\t";
55  break;
56  }
57  case EfiBootServicesData: {
58  debug << L"EfiBootServicesData\t\t";
59  break;
60  }
61  case EfiRuntimeServicesCode: {
62  debug << L"EfiRuntimeServicesCode\t\t";
63  break;
64  }
65  case EfiRuntimeServicesData: {
66  debug << L"EfiRuntimeServicesData\t\t";
67  break;
68  }
69  case EfiConventionalMemory: {
70  debug << L"EfiConventionalMemory\t\t";
71  break;
72  }
73  case EfiUnusableMemory: {
74  debug << L"EfiUnusableMemory\t\t";
75  break;
76  }
77  case EfiACPIReclaimMemory: {
78  debug << L"EfiACPIReclaimMemory\t\t";
79  break;
80  }
81  case EfiACPIMemoryNVS: {
82  debug << L"EfiACPIMemoryNVS\t\t";
83  break;
84  }
85  case EfiMemoryMappedIO: {
86  debug << L"EfiMemoryMappedIO\t\t";
87  break;
88  }
89  case EfiMemoryMappedIOPortSpace: {
90  debug << L"EfiMemoryMappedIOPortSpace\t\t";
91  break;
92  }
93  case EfiPalCode: {
94  debug << L"EfiPalCode\t\t";
95  break;
96  }
97  case EfiMaxMemoryType: {
98  debug << L"EfiMaxMemoryType\t\t";
99  break;
100  }
101  default: {
102  debug << L"Unknown " << ostream::hex_x << MMap->Type << L"\t\t";
103  break;
104  }
105  }
106 
107  debug << MMap->NumberOfPages << L"\t" << ostream::hex_X
108  << MMap->PhysicalStart << L"\t" << ostream::hex_X
109  << MMap->VirtualStart << L"\t" << ostream::hex_X << MMap->Attribute
110  << ostream::endl;
111  }
112  debug << L"map_key: " << ostream::hex_X << map_key << ostream::endl;
113 }
static auto hex_x(ostream &_ostream) -> ostream &
Definition: ostream.cpp:32
static auto hex_X(ostream &_ostream) -> ostream &
Definition: ostream.cpp:37
Here is the call graph for this function:

Member Data Documentation

◆ desc_count

uint64_t Memory::desc_count = 0
private

Definition at line 115 of file load_elf.h.

◆ desc_size

uint64_t Memory::desc_size = 0
private

Definition at line 118 of file load_elf.h.

◆ desc_version

uint32_t Memory::desc_version = 0
private

Definition at line 119 of file load_elf.h.

◆ map_key

uint64_t Memory::map_key = 0
private

Definition at line 117 of file load_elf.h.

◆ memory_map

EFI_MEMORY_DESCRIPTOR* Memory::memory_map = nullptr
private

Definition at line 116 of file load_elf.h.


The documentation for this class was generated from the following files: