Gesimuleerd RAM-geheugen
Crowl.ramworker.js simuleert RAM-geheugen in een browser via een web worker.
Doel
De code stelt je in staat om een gesimuleerd geheugenblok in een webomgeving te beheren, wat nuttig kan zijn voor:
- Het ontwikkelen van onderwijssoftware die studenten laat zien hoe geheugenbeheer werkt.
- Testen van geheugengerelateerde algoritmen in een gecontroleerde omgeving.
- Simuleren van geheugenoperaties voor ontwikkeling zonder directe toegang tot systeemhardware.
- Wegschrijven van tussentijdes data in online games
- ...
Voordelen en mogelijkheden
- Isolatie en veiligheid: Draait in een web worker, dus het beïnvloedt de hoofdthread van de browser niet, wat de gebruikerservaring soepel houdt.
- Flexibiliteit: Kan worden aangepast aan verschillende geheugengroottes en -configuraties.
- Educatief: Biedt een visueel en interactief begrip van hoe gegevens worden opgeslagen en beheerd in het geheugen.
Functies van de simulatie
-
initializeMemory(size)
: Initialiseert het geheugen van de opgegeven grootte. -
writeStringToMemory(address, text)
: Schrijft een string op een specifiek geheugenadres. -
readStringFromMemory(address)
: Leest een string vanaf een specifiek geheugenadres. -
clearMemoryAtAddress(address)
: Wist het geheugen op een specifiek adres. -
getMemorySize()
: Geeft de totale grootte van het gesimuleerde geheugen terug. -
findStrings()
: Vindt alle strings in het geheugen, inclusief hun adressen en lengtes. -
clearStringAtAddress(address)
: Wist een string beginnend bij een specifiek adres. -
getLastWrittenAddress()
: Geeft het laatste adres terug waar gegevens zijn geschreven.
Voorbeeldcode voor gebruik
- Initialiseren van de Worker: We maken een instance van de web worker aan met het correcte script, "crowl.ramworker.js".
- Communiceren met de Worker: Om interactie te hebben met de worker, verstuur je berichten met postMessage en luister je naar binnenkomende berichten met een onmessage event handler.
// Maak een nieuwe instance van de Worker
const SimRam = new Worker("crowl.ramworker.js");
// Luister naar berichten vanuit de Worker
SimRam.onmessage = function(e) {
console.log("Bericht ontvangen van SimRam:", e.data);
let gelezenString = e.data.text;
console.log("Gelezen string:", gelezenString);
};
// Initialiseer geheugen van 1MB
SimRam.postMessage({ action: 'initialize', size: 1024 * 1024 });
// Schrijf een string in het geheugen
SimRam.postMessage({ action: 'writeString', address: 100, text: 'Hallo, wereld!' });
// Lees de string terug
SimRam.postMessage({ action: 'readString', address: 100 });
// Clear Memory at Address
SimRam.postMessage({ action: 'clearMemory', address: 100 });
// Get Memory Size
SimRam.postMessage({ action: 'getMemorySize' });
// Find Strings
SimRam.postMessage({ action: 'findStrings' });
// Clear String at Address
SimRam.postMessage({ action: 'clearString', address: 100 });
// Get Last Written Address
SimRam.postMessage({ action: 'getLastWrittenAddress' });