NEWM / virtual_ssd /virtual_ssd_web /src /virtual_driver.py
Factor Studios
Upload 167 files
684cc60 verified
"""
Virtual Driver Module - Translates write commands into block operations
"""
import threading
from typing import Optional
class VirtualDriver:
"""
Simulates a device driver that translates high-level write commands
into block-level operations for the SSD controller.
"""
def __init__(self, vvd, block_size: int = 4096):
self.vvd = vvd
self.block_size = block_size
self.lock = threading.RLock()
print(f"VirtualDriver initialized with block size {block_size} bytes")
def send_write(self, logical_block: int, data: bytes) -> bool:
"""
Send a write command to the SSD controller.
Ensures data is properly sized for the block.
"""
with self.lock:
if len(data) > self.block_size:
print(f"Warning: Data size {len(data)} exceeds block size {self.block_size}. Truncating.")
data = data[:self.block_size]
elif len(data) < self.block_size:
# Pad with zeros to fill the block
data = data + b'\x00' * (self.block_size - len(data))
return self.vvd.write_page(logical_block, data)
def send_read(self, logical_block: int) -> Optional[bytes]:
"""
Send a read command to the SSD controller.
"""
with self.lock:
return self.vvd.read_page(logical_block)
def send_trim(self, logical_block: int):
"""
Send a TRIM command to the SSD controller.
"""
with self.lock:
self.vvd.erase_block(logical_block)
def get_driver_stats(self) -> dict:
"""
Get driver statistics (mostly pass-through to SSD controller).
"""
return {
"flash_stats": self.vvd.pvd_flash.get_flash_stats(),
"ftl_stats": self.vvd.pvd_controller.get_ftl_stats(),
"file_system_stats": self.vvd.pvd_file_system.get_usage_stats()
}
def shutdown(self):
"""
Shutdown the driver.
"""
print("VirtualDriver shutdown complete")
def __del__(self):
try:
self.shutdown()
except:
pass