Skip to content
This repository has been archived by the owner on May 18, 2023. It is now read-only.

project-oak/wasm-shared-buffers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Shared memory buffers in WebAssembly

This repository demonstrates the use of the POSIX virtual memory API to map externally allocated buffers into multiple separate WebAssembly processes.

Three implementations are included: a simple terminal-based one in C and a GTK "game" in both C and Rust. In all three, a host process creates two shared memory buffers then forks two container processes which embed a wasm engine to execute separate wasm modules. The containers map the shared buffers into the wasm linear memory, one with read-only and one with read-write flags.

The C implementations use wasm-micro-runtime and the Rust one uses wasmi.

The terminal implementation performs some basic memory checks and confirms cross-process interaction via the buffers.

The GTK implementations presents a grid field with actors controlled by the wasm modules: a "hunter" that chases some "runners". The hunter is controlled by one wasm instance and the runners by the other. The grid data is held in the read-only shared buffer (initialised by the host) while the actor coordinates are in the read-write one.

The GTK interface has a couple of buttons to show the memory protection at work. One instructs the host process to update the read-only buffer (to which it has write access) and modify the grid. The other instructs the hunter container process to do the same, at which point it will crash.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published