Fred808's picture
Upload 256 files
7a0c684 verified
"""
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 = {} # virtual_addr -> (db_key, size, flags)
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):
# For simulation, mapping is just a lookup
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):
# Simulate page fault handling
if vaddr not in self.mappings:
raise RuntimeError(f"Page fault at {hex(vaddr)}")
def stats(self):
return self.sqlite.stats()