Meadow Requirements - modrpc/info GitHub Wiki

Table of Contents

Namespace

  • A Meadow namespace should provide a namespace (i.e. name-? table) of devices and services.
  • The naming of devices should be independent of the transport address which can change over time.
  • A namespace coincides with the security-enforced domain.
  • A namespace is maintained by a special device called NAMESERVER. Any device which runs name service is a NAMESERVER. Every device must have at least one NAMESERVER.

Linking Namespaces

  • Namespace can be linked to form a larger namespace.
  • After two namespaces, say A and B, are linked, a device in one namespace can access a device in another namespace.
    • Devices in namespace A can access any device in namespace B by using a prefix "B:".
    • ANALOGY: UNIX hierarchical file system
  • Two linked namespace can be unliked whenever it's not necessary to be linked.

Device Services

  • A device should be able to export three services to the outside services.
    • property service
    • event generation
    • RPC
  • A device should provide a way to modify its own behavior.
    • Internally, this is a reactor but users don't need to know reactors.
    • To users, it's just adding callback to an event.
    • add_callback(event, (*fun)());
  • Service must be deployable statically or dynamically.

Meadow Services

  • Name service
    • Any device that provides name service is a NAMESERVER.
    • Name service is just a set of RPC functions used to maintain namespace.
    • NAMESERVER maintains (device, addr) and (linked-namespace-nameserver, addr)

Processes

  • A process is defined as an execution of event-reaction sequence.
  • The lifetime of a process begins with a firing of a root event and ends until all the reactors fired by the event instance finishes their execution.
  • Should a process be a singleton (like Verilog process) or a forked thread?
  • A process call chain is defined as the sequence of function calls and/or event-reactions, starting with an event instance which wakes up a process. The first event must be either a timer event or an external event injected from outside (e.g. user's touchscreen input).
  • A method for killing all related processes in a process call chain must be provided.
⚠️ **GitHub.com Fallback** ⚠️