| """
|
| virtual_gpu_driver/src/memory/memory.py
|
| Unified memory, memory mapping, paging, and buffer management for the virtual GPU system.
|
| Backed by SQLiteMemoryManager.
|
| """
|
|
|
| from .duckdb_memory_manager import DuckDBMemoryManager
|
|
|
| class UnifiedMemoryManager:
|
| def __init__(self, db_path, page_size=4096):
|
| self.duckdb = DuckDBMemoryManager(db_path)
|
| self.page_size = page_size
|
| self.mappings = {}
|
| self.next_addr = 0x10000000
|
|
|
| def alloc(self, size, flags=None):
|
| db_key = self.sqlite.allocate(size)
|
| vaddr = self.next_addr
|
| self.mappings[vaddr] = (db_key, size, flags)
|
| self.next_addr += ((size + self.page_size - 1) // self.page_size) * self.page_size
|
| return vaddr
|
|
|
| def free(self, vaddr):
|
| db_key, size, _ = self.mappings.pop(vaddr)
|
| self.sqlite.free(db_key)
|
|
|
| def map(self, vaddr, size):
|
|
|
| return self.mappings.get(vaddr)
|
|
|
| def read(self, vaddr, offset, length):
|
| db_key, size, _ = self.mappings[vaddr]
|
| return self.sqlite.read(db_key, offset, length)
|
|
|
| def write(self, vaddr, offset, data):
|
| db_key, size, _ = self.mappings[vaddr]
|
| self.sqlite.write(db_key, offset, data)
|
|
|
| def page_fault(self, vaddr):
|
|
|
| if vaddr not in self.mappings:
|
| raise RuntimeError(f"Page fault at {hex(vaddr)}")
|
|
|
| def stats(self):
|
| return self.sqlite.stats()
|
|
|