File size: 1,570 Bytes
7a0c684 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
"""
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()
|