This is a first whack at defining a medium-level abstraction of an address space in Rust.
The idea is that other kernel operations use this API to create and
initialize an address space, that user-space operations can end up
calling (via a syscall bridge) operations like add_map
and flush
to do things to their address space and data, and that the unified VM
/ File Buffer Cache will use the DataSource interface & (some still unnamed)
cache coordinator to cache data from DataSources.
First we need to make sure this API is complete. For one thing, it's
missing Flags in the add_map
call -- "what are your intentions?"
with this mapping, READ
, WRITE
, EXECUTE
, COPY_ON_WRITE
,
PRIVATE
, (vs.) SHARED
, etc.
Next, we need some tests that make sure the add_map
function
actually adds a mapping, that the mappings don't ever overlap, that
mappings can be removed, and virtual space reclaimed, etc.
At some point we'll want to migrate this into reedos
, so we'll want
to switch to #no_std
, use a kernel memory allocator, etc.