More text
This commit is contained in:
parent
21f192318b
commit
872f5b175e
|
@ -6,19 +6,65 @@
|
||||||
|
|
||||||
Marketplace integrates ideas from both distributed systems and
|
Marketplace integrates ideas from both distributed systems and
|
||||||
virtualized operating system designs to obtain an architecture of
|
virtualized operating system designs to obtain an architecture of
|
||||||
nested @emph{virtual machines}. Each nested layer is equipped with its
|
nested @emph{virtual machines} (VMs). Each nested layer is equipped
|
||||||
own publish/subscribe network that also propagates @emph{presence}
|
with its own publish/subscribe network that also propagates
|
||||||
information about the (dis)appearance of services.
|
@emph{presence} information about the (dis)appearance of services.
|
||||||
|
|
||||||
The result suggests a @emph{marketplace} metaphor, where communicating
|
Throughout this manual, diagrams such as the following will illustrate
|
||||||
programs exist in a noisy, crowded, even chaotic context, rather than
|
various process structures:
|
||||||
in a quiet place systematically going through their inboxes.
|
|
||||||
|
@vm-figure[(vm (vm-label "Ground Virtual Machine")
|
||||||
|
(network-label "Ground-level Network Language")
|
||||||
|
(process "A Process")
|
||||||
|
(process "Another Process")
|
||||||
|
(parameterize ((process-height (* 2/3 (process-height)))
|
||||||
|
(vm-height (* 2 (vm-height))))
|
||||||
|
(vm (vc-append (vm-label "Nested VMs are")
|
||||||
|
(vm-label "processes too"))
|
||||||
|
(network-label "App-specific language")
|
||||||
|
(process "Process")
|
||||||
|
(process "Process")
|
||||||
|
(process "Process")))
|
||||||
|
(parameterize ((process-height (* 5/4 (process-height))))
|
||||||
|
(process "Yet another process"))
|
||||||
|
(parameterize ((process-height (* 2/3 (process-height))))
|
||||||
|
(vm (vm-label "Another Nested VM")
|
||||||
|
(network-label "Another language")
|
||||||
|
(process "Process")
|
||||||
|
(process "Process"))))]
|
||||||
|
|
||||||
|
Rectangular boxes represent VMs. The processes running within each VM
|
||||||
|
are placed atop its box. The narrow rectangular strip at the top of
|
||||||
|
each VM's box represents the network connecting all the VM's processes
|
||||||
|
to each other; it will frequently contain a short description of the
|
||||||
|
protocols used for communication across the represented network.
|
||||||
|
|
||||||
|
A central feature of Marketplace is that VMs are nothing more than
|
||||||
|
regular processes, making them recursively nestable. Each VM supports
|
||||||
|
a collection of processes all its own, and its internal IPC medium
|
||||||
|
carries a VM-specific protocol that is often different from the
|
||||||
|
protocol spoken by its containing VM.
|
||||||
|
|
||||||
|
The outermost VM is called the @emph{ground VM}. The protocol spoken
|
||||||
|
by processes running within the ground VM is a simple protocol
|
||||||
|
relating Racket's @tech{synchronizable events} to Marketplace network
|
||||||
|
messages. See @secref{writing-new-drivers} and @secref{Drivers} for
|
||||||
|
information on using Racket events from Marketplace programs.
|
||||||
|
|
||||||
@section{What is a process, what are event handlers?}
|
@section{What is a process, what are event handlers?}
|
||||||
|
|
||||||
@deftech[#:key "process"]{Processes} are ...
|
A Marketplace @deftech{process} is a collection of event handlers,
|
||||||
|
plus a piece of private @deftech{process state}. Every
|
||||||
|
process@note{The exception to this rule is the Ground VM, which plays
|
||||||
|
a special role.} runs within a containing VM.
|
||||||
|
|
||||||
@deftech{Process State} is ...
|
When an event occurs that is relevant to a process, one of its event
|
||||||
|
handlers is called with the process's current state and a description
|
||||||
|
of the event. The handler is expected to return an updated state value
|
||||||
|
and a collection of actions for the containing VM to perform. An event
|
||||||
|
handler, then, has the following approximate type:
|
||||||
|
|
||||||
|
@centered{@italic{State} × @italic{Event} → @italic{State} × (Listof @italic{Action})}
|
||||||
|
|
||||||
@deftech{Events} ...
|
@deftech{Events} ...
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ communicate with other networks, via yet other networks.
|
||||||
|
|
||||||
@local-table-of-contents[]
|
@local-table-of-contents[]
|
||||||
|
|
||||||
@include-section["background.scrbl"]
|
@;@include-section["background.scrbl"]
|
||||||
@include-section["concepts.scrbl"]
|
@include-section["concepts.scrbl"]
|
||||||
@include-section["highlevel.scrbl"]
|
@include-section["highlevel.scrbl"]
|
||||||
@include-section["lowlevel.scrbl"]
|
@include-section["lowlevel.scrbl"]
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
@require[racket/include]
|
@require[racket/include]
|
||||||
@include{prelude.inc}
|
@include{prelude.inc}
|
||||||
|
|
||||||
@title{Writing New Drivers}
|
@title[#:tag "writing-new-drivers"]{Writing New Drivers}
|
||||||
|
|
||||||
*** ground-vm's usage of Racket evt?s
|
*** ground-vm's usage of Racket evt?s
|
||||||
*** pseudo-substruct
|
*** pseudo-substruct
|
||||||
|
|
Loading…
Reference in New Issue