981 lines
35 KiB
TeX
981 lines
35 KiB
TeX
\documentclass[a4paper,twoside]{report} % for a report (default)
|
|
|
|
\usepackage{bftn,color} % You need this
|
|
\usepackage{subfig}
|
|
\usepackage{listings}
|
|
\usepackage{verbatim}
|
|
\usepackage{tabularx}
|
|
|
|
|
|
\title{Barrelfish OS Services} % title of report
|
|
\author{Team Barrelfish} % author
|
|
\tnnumber{012} % give the number of the tech report
|
|
\tnkey{Barrelfish Services} % Short title, will appear in footer
|
|
|
|
% \date{Month Year} % Not needed - will be taken from version history
|
|
|
|
%% \newcommand{\note}[1]{}
|
|
\newcommand{\note}[1]{[\textcolor{red}{\textit{#1}}]}
|
|
|
|
\begin{document}
|
|
\maketitle
|
|
|
|
%
|
|
% Include version history first
|
|
%
|
|
\begin{versionhistory}
|
|
\vhEntry{1.0}{20.08.2010}{kuzi}{Initial version}
|
|
\end{versionhistory}
|
|
|
|
% \intro{Abstract} % Insert abstract here
|
|
% \intro{Acknowledgements} % Uncomment (if needed) for acknowledgements
|
|
% \tableofcontents % Uncomment (if needed) for final draft
|
|
% \listoffigures % Uncomment (if needed) for final draft
|
|
% \listoftables % Uncomment (if needed) for final draft
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\chapter{Barrelfish OS Services}\label{chap:services}
|
|
|
|
\section{Introduction}\label{sec:intro}
|
|
|
|
Barrelfish is a multi-server OS, which means that any OS based on
|
|
Barrelfish will consist of a collection of mutually dependent
|
|
services. Each of these services provides some functionality required
|
|
for the OS.
|
|
|
|
In Barrelfish, a service can be implemented as a single-dispatcher
|
|
domain, a multi-dispatcher domain, multiple domains, one or more
|
|
libraries, or some combination of these.
|
|
|
|
In this document we review the services that will make up the base
|
|
building blocks of a Barrelfish OS. After introducing the services,
|
|
we discuss dependencies between the services, and then the current
|
|
implementation status of each service.
|
|
|
|
%% Need to get terminology straight.
|
|
%% terminology:
|
|
%% - process
|
|
%% - thread
|
|
%% - dispatcher
|
|
%% - domain
|
|
%% - entity
|
|
%% - principal
|
|
%% - subject
|
|
%% - object
|
|
|
|
|
|
\section{Services}\label{sec:services}
|
|
|
|
The specific services we've identified are (presented in alphabetical order):
|
|
|
|
\begin{itemize}
|
|
\item Binding
|
|
\item Capability Management
|
|
\item Debugging
|
|
\item Device Driver
|
|
\item Device Management
|
|
\item Environment
|
|
\item Group Communication
|
|
\item Locking
|
|
\item Memory Allocation
|
|
\item Naming
|
|
\item Network Stack
|
|
\item Power Management
|
|
\item Principals
|
|
\item Process Management
|
|
\item Resource Accounting and Management
|
|
\item Routing
|
|
\item Shell
|
|
\item SKB
|
|
\item Storage Management
|
|
\item Terminal
|
|
\item Threading
|
|
\item Tracing
|
|
\item Virtual Machine Monitor
|
|
\item Virtual Memory
|
|
\end{itemize}
|
|
|
|
\subsection{Binding}
|
|
|
|
% Category: Communication
|
|
|
|
The binding service facilitates communication in the system, allowing
|
|
dispatchers to export interfaces through endpoints, and enabling other
|
|
threads of execution to connect to dispatchers through endpoints.
|
|
The binding service also implements the inter-dispatcher communication
|
|
mechanisms allowing threads to send messages over connections.
|
|
|
|
% FIXME: This last bit is strange, however, this definition of the binding
|
|
% service includes the communication facilities. It could also be
|
|
% defined as only providing the functionality of connecting the two
|
|
% sides, but leaving the communication to another service.
|
|
|
|
% who is responsible for sending caps? binding or cap management?
|
|
|
|
\subsection{Capability Management}
|
|
|
|
% Category: Capability Management
|
|
|
|
The capability management service provides the functionality to manage
|
|
capabilities outside the kernel. It provides the ability to allocate
|
|
space for and create new capabilities, as well as to manipulate them
|
|
by moving, copying, and destroying them. It also implements the
|
|
functionality necessary to transfer capabilities between cores, and to
|
|
manage and invoke remote capabilities.
|
|
|
|
|
|
\subsection{Debugging}
|
|
|
|
% Category; Tracing and Debugging
|
|
|
|
The debugging service provides the functionality to access and
|
|
manipulate system memory, and control execution of the system. It may
|
|
provide these services at a minimal level, or provide higher level
|
|
services that allow control of system abstractions such as
|
|
capabilities, dipatchers, domains, and threads (for example by
|
|
attaching to and controlling specific threads).
|
|
|
|
|
|
\subsection{Device Driver}
|
|
|
|
% Category: Devices
|
|
|
|
A device driver service provides access and control over a specific
|
|
device. A device driver manages access to device hardware as well as
|
|
handling interrupts and other device events. The devices managed by
|
|
device drivers inlcude IO devices, as well as internal devices such as
|
|
busses, timers, etc.
|
|
|
|
\subsection{Device Management}
|
|
|
|
% Category: Devices
|
|
|
|
The device management service stores and manages information about
|
|
devices in the system. Its responsibilities include collecting such
|
|
information, making it available to others, and implementing policy
|
|
relating to device initialisation, startup, shutdown, power management, etc.
|
|
|
|
\subsection{Environment}
|
|
|
|
% Category: Process Management
|
|
|
|
The environment service provides an execution environment to threads
|
|
of execution. Examples of this are environment variables.
|
|
|
|
% Andrew says: ``terminal, etc.''
|
|
|
|
\subsection{Group Communication}
|
|
|
|
% Category: Communication
|
|
|
|
The group communication service provides facilities for multicast
|
|
commuincation within groups. It will provide group management, as
|
|
well as management of delivery trees, and the mechanisms for message
|
|
delivery and reception (including impementation of necessary consensus
|
|
protocols).
|
|
|
|
\subsection{Locking}
|
|
|
|
% Category: Synchronisation
|
|
|
|
The locking service provides facilities and primitives for mutual
|
|
exclusion and synchronisation. This includes implementation of locks,
|
|
condition variables, semaphores, etc. It also involves managing
|
|
excution threads to block and wake them as necessary.
|
|
|
|
\subsection{Memory Allocation}
|
|
|
|
% Category: Capability Management
|
|
|
|
The memory allocation service manages physical memory (using
|
|
capabilities). It processes requests for memory, allocating appropriate
|
|
memory, and freeing it when necessary. It tracks which memory is in
|
|
use, and which memory is free and can be reused.
|
|
|
|
% typically this service will only be used by:
|
|
% services that manipulate virtual memory (managing address spaces, etc.)
|
|
% setup shared memory (communication, etc.)
|
|
% do capability management
|
|
|
|
\subsection{Naming}
|
|
|
|
% Category: Communication
|
|
|
|
The naming service provides a name space and a name/value mapping
|
|
database that allows entries to be added or retreived. It is largely
|
|
used in communication for finding registered services. It also
|
|
supports notification of new entries and changed entries, and a
|
|
blocking lookup.
|
|
|
|
\subsection{Network Stack}
|
|
|
|
% Category: Interaction and IO
|
|
|
|
The network stack implements network protocols. It works
|
|
together with a networking device. It may provide further surfaces
|
|
such as packet filtering, packet instpection, etc.
|
|
|
|
\subsection{Power Management}
|
|
|
|
% Category: Resource Management and Accounting
|
|
|
|
The power management services monitors power usage in the system,
|
|
reacts to power-related events, and can manipulate system resources to
|
|
control power usage. It also manages system sleep and wakeup, and
|
|
can manipulate subsystems and hardware according to its policy.
|
|
|
|
\subsection{Principals}
|
|
|
|
% Category: Protection and Security
|
|
|
|
The principals service provides the concept of principals in the
|
|
system (e.g., accounts, users, process ids, etc.). The principals are used for
|
|
access control, that is, access control policies can be defined in
|
|
terms of principals' access to objects. This service can also provide
|
|
authentication functionalities, to authenticate principals'
|
|
identities, as well as management of principles (e.g., account control).
|
|
|
|
\subsection{Process Management}
|
|
|
|
% Category: Process Management
|
|
|
|
The process management service provides functionality to create,
|
|
manipulate, and manage dispatchers and domains. It may provide a
|
|
conventional process abstraction based on the Barrelfish primitives,
|
|
or deal with the primitives themselves. The functionality provided
|
|
includes creating, starting, stopping, and pausing processes, as well
|
|
as mechanisms for loading processs, and migrating processes. Part of
|
|
process creation and management involves setting up and managing
|
|
address spaces.
|
|
|
|
% FIXME: It is unclear whether this service should also be responsible
|
|
% for dispatchers and domains, or whether these (dispatcher and
|
|
% domain) should be in a separate service.
|
|
|
|
|
|
\subsection{Resource Accounting and Management}
|
|
|
|
% Category: Resource Management and Accounting
|
|
|
|
The resource accounting and management service provides mechanisms to
|
|
monitor resource usage, keep accounting, and manipulate resource
|
|
usage. Resources include basic resources such as CPU, memory, and IRQs,
|
|
as well as OS resources such as devices, files, network bandwidth,
|
|
etc. Manipulating resource usage includes scheduling processes,
|
|
scheduling IO operations, throttling network traffic, etc.
|
|
|
|
\subsection{Routing}
|
|
|
|
% Category: Communication
|
|
|
|
The routing service supports communication between entities that are
|
|
not directly connected. The service is responsible for determining
|
|
(intra-machine) routes between the entities, as well as sending the
|
|
messages over the communication network, and reserving sufficient
|
|
resources over the routes to be able to provide performance and
|
|
reliability guarantees.
|
|
|
|
\subsection{Shell}
|
|
|
|
% Category: Shell
|
|
|
|
The shell service provides a command interpreter and task launcher.
|
|
It provides an interface for dynamically starting, stopping, and
|
|
manipulating system tasks. Note that this is not limited to a
|
|
traditional command-line console.
|
|
|
|
\subsection{SKB}
|
|
|
|
% Category: SKB
|
|
|
|
The system knowledge base service provides a database for storing
|
|
information about the system (including available hardware, properties
|
|
of the hardware, configuration, running services, etc.). It also
|
|
provides an interface for querying the database, as well as for
|
|
running complex analysis (e.g., constraint solving) of the data stored
|
|
within.
|
|
|
|
\subsection{Storage Management}
|
|
|
|
% Category: Interaction and IO
|
|
|
|
The storage management service manages the system's storage
|
|
infrastructure and provides abstractions for persistent storage. This
|
|
could be in the form of a file system, a database, or something
|
|
completely different.
|
|
|
|
\subsection{Terminal}
|
|
|
|
% Category: Interaction and IO
|
|
|
|
The terminal service provides a terminal abstraction that provides
|
|
programs with input and output. A terminal typically multiplexes
|
|
output from different programs to a single output destination and
|
|
demultiplexes a single source of input among multiple programs.
|
|
The terminal service implements the terminal abstraction, and provides
|
|
mechanisms for multiplexing multiple terminals.
|
|
|
|
\subsection{Threading}
|
|
|
|
% Category: Process Management
|
|
|
|
The threading service provides a thread model and thread manipulation
|
|
functionality. This allows thread manipulation (creation, destruction,
|
|
suspend, wakeup, etc.), thread scheduling and thread local storage.
|
|
|
|
\subsection{Tracing}
|
|
|
|
% Category: Tracing and Debugging
|
|
|
|
The tracing service collects tracing information and makes it
|
|
available to analysis and display applications. The service allows
|
|
running entities in the system to log traces with it as well as to
|
|
query it about these traces. Such a service can be used for logging
|
|
system events, debugging information, error events, etc. The tracing
|
|
service can also actively monitor the system, and dynamically query
|
|
system entities based on queries. It can also provide notification
|
|
functionality to notify entities when given events occur.
|
|
|
|
\subsection{Virtual Machine Monitor}
|
|
|
|
% Category: Virtualisation
|
|
|
|
The virtualisation service provides a virtual machine monitor that
|
|
enables guest software (typically an OS) to be run on virtual hardware.
|
|
The service manages the loading and unloading of the guest software,
|
|
manages emulation of sensitive and privileged instructions and
|
|
hardware, and manages the virtualised memory.
|
|
|
|
\subsection{Virtual Memory}
|
|
|
|
% Category: Virtual Memory Management
|
|
|
|
The virtual memory management service manages the system's virtual
|
|
memory (by manipulating Barrelfish vnodes and memory caps). It
|
|
provides functionality to map and unmap pages, manage mapping of
|
|
device memory, and the creation and manipulation of address spaces.
|
|
It is also responsible for paging and swapping.
|
|
|
|
|
|
\section{Service Categories}\label{sec:categories}
|
|
|
|
% probably better to subdivide the services that are too broad
|
|
% categories, and just have the fundamental/general categorisation.
|
|
% eg.
|
|
% capabilities: cap management, memory management, vm?
|
|
% devices: driver, management
|
|
% communication: basic, binding, group, routing
|
|
% protection: prinicipals, access control
|
|
% process: process, threading, environment
|
|
% resource managment: resource mgmt and accounting, power mgmt,
|
|
% scheduling
|
|
% tracing and debugging: tracing, debugging
|
|
% these could be used for a layering view...
|
|
|
|
The above services can be grouped into two categories, depending on
|
|
what they are used for in the system. Roughly, we distinguish between
|
|
services that provide key Barrelfish functionality, and services that
|
|
provide more general OS functionality.
|
|
|
|
\subsection{Fundamental Barrelfish Services}
|
|
|
|
\begin{itemize}
|
|
\item Binding
|
|
\item Capability Management
|
|
\item Group Communication
|
|
\item Naming
|
|
% this is an issue because
|
|
% the naming service is a fundamental BF service for communication
|
|
% it is also a general service in an OS
|
|
\item Process Management
|
|
% this is an issue since there is the aspect of
|
|
% dispatchers and domains which is BF specific
|
|
% process accounting, process starting, stopping, etc. which is general
|
|
\item Routing
|
|
\item SKB
|
|
\end{itemize}
|
|
|
|
\subsection{General OS Services}
|
|
|
|
\begin{itemize}
|
|
\item Debugging
|
|
\item Device Driver
|
|
\item Device Management
|
|
\item Environment
|
|
\item Locking
|
|
\item Memory Allocation
|
|
% this is an issue since there is the aspect of
|
|
% dealing with ram caps and bookkeeping which is BF specific
|
|
% policy and accounting is general
|
|
\item Network Stack
|
|
\item Power Management
|
|
\item Principals
|
|
\item Resource Accounting and Management
|
|
\item Shell
|
|
\item Storage Management
|
|
\item Terminal
|
|
\item Threading
|
|
% this is an issue since there is the aspect of
|
|
% thread scheduling, and implementation which is BF specific
|
|
% thread API, accounting, management, scheduling which is general
|
|
\item Tracing
|
|
\item Virtual Machine Monitor
|
|
\item Virtual Memory
|
|
% this has an issue since there is the aspect of managing vnodes,
|
|
% which is BF specific,
|
|
% the aspect of address space layout, creating and tearing down
|
|
% address spaces, which is a mix between BF specific and general,
|
|
% the aspect of paging, which is general
|
|
\end{itemize}
|
|
|
|
|
|
|
|
%% \subsection{Fundamental Barrelfish Services}
|
|
|
|
%% \begin{description}
|
|
%% \item[Capability Management] services that manage capabilities,
|
|
%% including allocation, physical memory management, cpability
|
|
%% transfer, etc.
|
|
%% \item[Virtual Memory Management] services that manage virtual memory
|
|
%% to provide address spaces, protection, etc.
|
|
%% \item[SKB] services related to the system knowledge base, including
|
|
%% gathering, storing, and querying system data.
|
|
%% \item[Communication] services that enable communication within the
|
|
%% system.
|
|
%% \item[Process Management] services related to managing execution in
|
|
%% the system, this includes basic dispatcher and domain
|
|
%% functionality and scheduling, threading within dispatchers, as
|
|
%% well as process accounting, environments, etc.
|
|
%% \end{description}
|
|
|
|
%% \subsection{General OS Services}
|
|
|
|
%% \begin{description}
|
|
%% \item[Synchronisation] services that enable threads to synchronise,
|
|
%% including locking and signalling mechanisms.
|
|
%% \item[Devices] services related to device access, including
|
|
%% interrupt handling, device memory and register access, (PCI) bus
|
|
%% management, device management (starting, stopping, etc.), device
|
|
%% drivers, etc.
|
|
%% \item[Resource Management and Accounting] services that monitor
|
|
%% resource usage, keep accounting, and make changes to the resource
|
|
%% usage.
|
|
%% \item[Protection and Security] services that enable and manage
|
|
%% resource monitoring and usage. This includes monioring and
|
|
%% accounting mechanisms, as well as scheduling, power management,
|
|
%% and paging.
|
|
%% \item[Protection and Security] services that provide mechanisms and
|
|
%% policy for access control.
|
|
%% \item[Interaction and IO] services that manage the systems external
|
|
%% interaction. This is at a higher level than device drivers, and
|
|
%% involves abstractions such as filesystems, network stacks, audio
|
|
%% frameworks, etc.
|
|
%% \item[Shell] services that provide program launching facilities.
|
|
%% \item[Vitualisation] services that enable virtualisation such as
|
|
%% virtual machine monitors.
|
|
%% \item[Tracing and Debugging] services that enable collection of
|
|
%% runtime information as well as runtime debugging. This includes
|
|
%% trace collection and analysis, stubs to access and manipulate
|
|
%% system memory and execution, etc.
|
|
%% \item[Applications] applications and services that are not typically
|
|
%% considered core OS services.
|
|
%% \end{description}
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\chapter{Service Dependencies}\label{chap:dependencies}
|
|
|
|
The above services are system building blocks and do not operate in
|
|
isolation but make use of each other's services.
|
|
This leads to dependencies between the various services.
|
|
|
|
We distinguish between several types of dependencies.
|
|
\begin{itemize}
|
|
\item Fundamental dependencies: dependencies that exist due to
|
|
the service's required functionality (e.g., network stack relies on
|
|
the ethernet device driver).
|
|
\item Implementation dependencies: dependencies that exist due
|
|
to implementation details. This can be further subdivided into:
|
|
\begin{itemize}
|
|
\item dependencies due to being implemented as communicating
|
|
Barrelfish dispatchers (e.g., network stack relies on binding
|
|
because it needs to communicate with the ethernet device
|
|
driver).
|
|
\item dependencies due to specific implementation decisions
|
|
(e.g., network stack using the locking service because it is
|
|
multithreaded).
|
|
\end{itemize}
|
|
\end{itemize}
|
|
|
|
%% there are also dependencies that are due to:
|
|
%% - being implemented on a barrelfish system, but related to fundamental design (e.g., device driver using capability management to get access to device hardware)
|
|
|
|
|
|
|
|
\section{Dependencies}\label{chap:dependencies}
|
|
|
|
All the dependencies between the specific services are shown in
|
|
Figure~\ref{fig:dep2-a}.
|
|
|
|
\begin{figure}[hbt]
|
|
\begin{center}
|
|
\includegraphics[angle=270,scale=0.15]{dep2-a-dot.pdf}
|
|
% \includegraphics[angle=90,width=\columnwidth]{dep2.pdf}
|
|
\end{center}
|
|
\caption{Use dependencies between OS services. Dashed lines indicate
|
|
dependencies we are uncertain about.}\label{fig:dep2-a}
|
|
\end{figure}
|
|
|
|
The subset of fundamental dependencies are shown in
|
|
Figure~\ref{fig:dep2-f}. Likewise the subset of implementation
|
|
dependencies are shown in Figures~\ref{fig:dep2-b} and~\ref{fig:dep2-i}.
|
|
|
|
\begin{figure}[hbt]
|
|
\begin{center}
|
|
\includegraphics[angle=270,scale=0.15]{dep2-f-dot.pdf}
|
|
\end{center}
|
|
\caption{Subset of fundamental use dependencies between OS
|
|
services.}\label{fig:dep2-f}
|
|
\end{figure}
|
|
|
|
|
|
\begin{figure}[hbt]
|
|
\begin{center}
|
|
\includegraphics[angle=270,scale=0.15]{dep2-b-dot.pdf}
|
|
\end{center}
|
|
\caption{Subset of barrelfish-implementation specific use
|
|
dependencies between OS services.}\label{fig:dep2-b}
|
|
\end{figure}
|
|
|
|
|
|
\begin{figure}[hbt]
|
|
\begin{center}
|
|
\includegraphics[angle=270,scale=0.15]{dep2-i-dot.pdf}
|
|
\end{center}
|
|
\caption{Subset of non-barrelfish implementation dependencies between OS
|
|
services}\label{fig:dep2-i}
|
|
\end{figure}
|
|
|
|
Discussion of these dependencies is presented below.
|
|
|
|
\subsection{Binding}
|
|
|
|
All services have a Barrelfish-specific dependency on the binding
|
|
service, since, if they are implemented as Barrelfish dispatchers,
|
|
they will require the binding service to make their interfaces
|
|
available to others, as well as to connect to and communicate with
|
|
other services.
|
|
|
|
The binding service itself requires endpoint capabilities for the communication
|
|
and therefore has a dependency on the capability management service.
|
|
It also needs to know about the cores and hardware support for
|
|
communication available in the system, and therefore has a dependency
|
|
on the SKB, which provides such information.
|
|
|
|
The binding service, besides providing poin-to-point connections, also
|
|
provides access to the group communication service and the routing
|
|
service for more complex communication, and therefore has a dependency
|
|
on both these services. Communication also involves notifying and
|
|
scheduling dispatchers when messages arrive, so the binding service must
|
|
also make use of the process management service.
|
|
|
|
|
|
Finally, the implmentation of the binding service needs to set up
|
|
shared memory areas for the implementation of UMP, so needs to use the
|
|
virtual memory service. Its impementation may also make use of
|
|
locking and synchronisation primitives, leading to a potential
|
|
dependency on the locking service.
|
|
|
|
|
|
\subsection{Capability Management}
|
|
|
|
Managing capabilities requires access to basic memory capabilities,
|
|
which are provided through the memory allocation service, leading to a
|
|
dependency on that service. This service will also depend on the
|
|
virtual memory management service, since it will require control of
|
|
memory for management of metadata.
|
|
|
|
\subsection{Debugging}
|
|
|
|
The debugging service needs access to lower level services in order to
|
|
inspect and modify the system. This includes: capability management
|
|
for access to system capabilities, threading to attach to and control
|
|
threads, process management to attach to and control processes
|
|
(dispatchers and domains), virtual memory service to inspect and
|
|
modify address spaces, memory mappings, etc. The debugging service
|
|
will also use the SKB service to provide further information about the
|
|
system and its resources.
|
|
|
|
\subsection{Device Drivers}
|
|
|
|
Device drivers depend on the capability management service since they
|
|
need to manage and use capabilities to the hardware devices. Drivers
|
|
also use the memory allocation service since they need to manipulate
|
|
memory, for example, to use DMA and access device memory. This also
|
|
requires the use of the virtual memory service.
|
|
|
|
Since drivers must react to system power events (e.g., to turn devices
|
|
on and off when the system suspends) they may also depend on the power
|
|
management service.
|
|
|
|
\subsection{Device Management}
|
|
|
|
The device management service works closely with the SKB since it
|
|
needs to find out (and register) information about devices in the
|
|
system. It may also depend on the power management service to
|
|
determine current power state and possibly inform drivers of changes
|
|
in the state.
|
|
|
|
%% The device manager will likely be implemented as a multithreaded
|
|
%% service and may rely on the locking service for locking and synchronisation.
|
|
|
|
\subsection{Environment}
|
|
|
|
The environment service may use the principals service if provides
|
|
per-principal environments, and the process management service if it
|
|
provides per-process environements.
|
|
|
|
\subsection{Group Communication}
|
|
|
|
The group communication service depends on the binding service to provide a
|
|
frontend interface, as well as to send individual messages.
|
|
The group communication service will also depend on the SKB to find out
|
|
information about the system (e.g., interconnect toplogy) to help
|
|
implement efficient message delivery (e.g., multicast trees).
|
|
|
|
Group communication is typically associated with consensus protocols,
|
|
and may therefore rely on a locking services. Alternatively, the group
|
|
communication service may be used by the locking service to implement
|
|
some synchronisation.
|
|
|
|
The service may require endpoints to implement the underlying
|
|
communication, and will then be dependent on the capability management service.
|
|
The service will typically also make use of the routing service to
|
|
send messages to group members.
|
|
|
|
\subsection{Locking}
|
|
|
|
The locking service interacts closely with the process management and
|
|
threading services since it must be able to suspend and resume
|
|
execution to correspond with blocking and signalling.
|
|
|
|
The locking service may depend on the group communication service to
|
|
implement consensus and other forms of synchronisation.
|
|
|
|
|
|
\subsection{Memory Allocation}
|
|
|
|
The memory allocation service requires capabilities to do memory
|
|
management in Barrelfish, so has a dependency on the capabiity
|
|
management service.
|
|
|
|
It may also depend on the SKB to find out about all the memory
|
|
resources in the system, and it may also act as a client of the
|
|
resource accounting and management service to provide it with
|
|
information about memory usage.
|
|
|
|
\subsection{Naming}
|
|
|
|
All services have a Barrelfish-specific dependency on the name
|
|
service, since, if they are implemented as Barrelfish dispatchers
|
|
then they will either need to register with it, or use it to find
|
|
other services that they depend on.
|
|
|
|
Depending on its implementation the naming service may use the group
|
|
communication service.
|
|
|
|
\subsection{Network Stack}
|
|
|
|
The network stack service requires access to NIC drivers to access the
|
|
network hardware. It may also need to use the SKB to determine what
|
|
network hardware and drivers are available in the system.
|
|
|
|
Depending on implementation details, the network stack may also need
|
|
to use the virtual memory service to implement zero-copy mechanisms, etc.
|
|
|
|
\subsection{Power Management}
|
|
|
|
The power management service requires access to device drivers and the
|
|
device management service to monitor and control the power states of hardware.
|
|
It will also need to use the SKB to determine what devices to manage
|
|
in the system and what power management hardware is available.
|
|
|
|
The service may also need access to the the resource management service
|
|
to help make power management decisions. The power management service
|
|
may also need to manipulate capabilities for power management
|
|
hardware, in which case it will need access to the capability
|
|
management service.
|
|
|
|
Depending on its implementation it may also use the group
|
|
communication and locking services.
|
|
|
|
\subsection{Principals}
|
|
|
|
In Barrelfish the principals service will make use of capabilities to
|
|
implement access control, and will therefore require access to the
|
|
capability management service.
|
|
|
|
\subsection{Process Management}
|
|
|
|
The process management service will need access to the capability
|
|
management and virtual memory services in order to prepare and
|
|
manipulate process address spaces for execution. It will also work
|
|
closely with the threading service, to manage execution, and the
|
|
principals service, to provide processes with the appropriate caps for
|
|
access control.
|
|
|
|
The service may use the group communication service depending on how
|
|
it is implemented.
|
|
|
|
\subsection{Resource Accounting and Management}
|
|
|
|
The resource accounting and management service will use the various
|
|
other management and accounting services (power management, process
|
|
management, bus management, drivers, storage management) to determine
|
|
the state of the system and resource usage in the system. It will
|
|
also use these services to change resource usage according to policy.
|
|
|
|
It will also both read from and write to the SKB.
|
|
|
|
In order to manage resource usage the resource management service may
|
|
need to manipulate caps, in which case it will use the capability
|
|
management service.
|
|
|
|
Depending on implementation it may also use the group communication and
|
|
locking services.
|
|
|
|
\subsection{Routing}
|
|
|
|
The routing service will require endpoint capabilities for communication
|
|
and therefore has a dependency on the capability management service.
|
|
It also needs to know about the cores and hardware support for
|
|
communication available in the system, and therefore has a dependency
|
|
on the SKB, which provides such information.
|
|
|
|
The routing service will both make use of the binding service for its
|
|
point-to-point connections, as well as be accessed through the binding
|
|
service, and thus has a strong dependency to it.
|
|
|
|
The routing service will use the SKB to determine the system topology.
|
|
|
|
It will likely also be implemented using locking and group
|
|
communication.
|
|
|
|
\subsection{Shell}
|
|
|
|
The shell service requires access to process management and threading
|
|
to start and control programs, it also requires access to the
|
|
environment service to provide programs with appropriate execution
|
|
environments, and allow manipulation of those environments. It uses
|
|
the principals service to determine and set up access control for the
|
|
programs it starts. The storage management service is used to fetch
|
|
the code to execute, and the terminal service is used for input and output.
|
|
|
|
\subsection{SKB}
|
|
|
|
The SKB relies on the storage management service to read its startup
|
|
files, and possibly store its knowledge base.
|
|
|
|
\subsection{Storage Management}
|
|
|
|
The storage management service needs access to appropriate storage
|
|
hardware (e.g., disk).
|
|
|
|
It will also use the virtual memory service if it implements zero-copy
|
|
features and needs to manipulate shared memory buffers. It may need to
|
|
use the SKB to determine what devices are available.
|
|
|
|
The service may also require access to the
|
|
principals service for access control, however this depends on the
|
|
chosen design.
|
|
% or the user may authenticate via the principals service and receive
|
|
% the apropriate caps which it then uses to access the storage services.
|
|
|
|
Depending on implementation it may also use the using locking and group
|
|
communication services.
|
|
|
|
\subsection{Terminal}
|
|
|
|
The terminal service will need to use drivers to access the input and
|
|
output hardware.
|
|
|
|
Depending on implementation it may use the virtual memory and
|
|
capability management services to provide access through a
|
|
framebuffer.
|
|
|
|
The implementation will likely use locking, and may require the SKB to
|
|
determine what interaction devices are available.
|
|
|
|
\subsection{Threading}
|
|
|
|
The threading service closely cooperates with the process management
|
|
service.
|
|
% because the pm services provides dispatcher functionality
|
|
It also needs to manage the memory accessible by threads and
|
|
uses the capability management and virtual memory management services
|
|
for this.
|
|
|
|
It may also cooperate closely with the locking service to suspend and
|
|
resume threads as part of the locking mechanism implemententations.
|
|
|
|
\subsection{Tracing}
|
|
|
|
The tracing service is not directly dependent on other services (other
|
|
than binding and naming).
|
|
|
|
Any service may use the tracing service to log trace points. We have
|
|
not represented these dependencies explicitly.
|
|
|
|
\subsection{Virtual Machine Monitor}
|
|
|
|
The virtual machine monitor service uses the capability management,
|
|
memory allocation, virtual memory management, and process management
|
|
services to provide a virtual machine environment to a guest OS. It
|
|
also uses the driver and device menagement services to provide access
|
|
to hardware devices.
|
|
|
|
It may also use the storage managment and network stack services to
|
|
virtualise disk and network traffic. The power management service may
|
|
be used to allow power management of and by the virtual machine.
|
|
The SKB may be used to determine which system resources to provide to
|
|
the virtual machine.
|
|
|
|
Its implementation is likely to use locking.
|
|
|
|
|
|
\subsection{Virtual Memory}
|
|
|
|
The virtual memory service uses the capability management and memory
|
|
allocation services to help manage the virtual memory mappings and
|
|
address spaces. The SKB is used to determine the available memory
|
|
resources in the system.
|
|
|
|
Paging will use an appropriate disk driver, and may require access to
|
|
a storage management service.
|
|
|
|
The implementation of virtual memory management is likely to use
|
|
locking and group communication.
|
|
|
|
|
|
\section{Status}
|
|
|
|
Some of the services discussed above have already been implemented.
|
|
In many cases the implementation has been a simple prototype
|
|
implementation, where the basic functionality has been implemented,
|
|
but without regard to issues such as scalability, and also, without
|
|
attempting to dynamically configure or alter functionality based on
|
|
information about the system gathered at runtime (e.g., from the SKB).
|
|
|
|
In this section we provide an overview of the current status of each
|
|
service. A service's status can be:
|
|
\begin{description}
|
|
\item[N]: Does not exist
|
|
\item[P]: Exists as a prototype
|
|
\item[E]: Fully featured implementation
|
|
\item[D]: Scalable, distributed, implementation
|
|
\end{description}
|
|
|
|
We also provide an overview of the development priority of services.
|
|
The priorities relate to the goal of developing a complete OS and an
|
|
environment and tools for developing complete OSes.
|
|
The priorities are:
|
|
\begin{description}
|
|
\item[High]: This service must exist before more of the system can
|
|
be built, or it is a bottleneck and must be implemented in a
|
|
scalable way. It is a core building block.
|
|
\item[Medium]: Some services rely on this, so it has some priority.
|
|
Availability of the service may also help the usability of the
|
|
system. It is a useful building block.
|
|
\item[Low]: Hardly any services depend on this, so lack of it will
|
|
not stand in the way of developing a system.
|
|
\end{description}
|
|
|
|
|
|
The status of the services is as follows:
|
|
|
|
\begin{tabularx}{\textwidth}{|l|c|c|X|}
|
|
\hline
|
|
Service & Status & Priority & Comment \\
|
|
\hline
|
|
Binding & E & High & implemented by combination of monitor, barrelfish
|
|
library, and flounder stubs. \\
|
|
\hline
|
|
Capability Management & P & High & implemented by combination of monitor and
|
|
barrelfish library. The revoke fnctionality is not implemented. \\
|
|
\hline
|
|
Debugging & N & Low & \\
|
|
\hline
|
|
Device Driver & E & Medium & existing drivers: serial, pci, e1000 \\
|
|
\hline
|
|
Device Management & P & Medium & implemented by pci driver and skb \\
|
|
\hline
|
|
Environment & P & Low & implemented by barrelfish library and spawnd
|
|
dispatcher \\
|
|
\hline
|
|
Group Communication & N & Medium \\
|
|
\hline
|
|
Locking & P & High & ??? how is locking/synchronisation currently done???\\
|
|
\hline
|
|
Memory Allocation & P & High & implemented by memory server domain. No
|
|
ability to free or reuse memory. \\
|
|
\hline
|
|
Naming & E & High & implemented by chips domain. \\
|
|
\hline
|
|
Network Stack & P & Medium & implemented as library. can be used by only 1
|
|
dispatcher at a time. It is based on LWIP. \\
|
|
\hline
|
|
Power Management & N & Low & \\
|
|
\hline
|
|
Principals & N & Medium & \\
|
|
\hline
|
|
Process Management & P & High & implemented by combination of spawnd domain,
|
|
monitor, and barrelfish library. \\
|
|
\hline
|
|
Resource Accounting and Management & N & Low & \\
|
|
\hline
|
|
Routing & N & Medium & \\
|
|
\hline
|
|
Shell & P & Low & implemented by fish domain.\\
|
|
\hline
|
|
SKB & E & Medium & implemented by skb domain. \\
|
|
\hline
|
|
Storage Management & P & Medium & implemented by combination of ramfsd domain,
|
|
and vfs library.\\
|
|
\hline
|
|
Terminal & N & Medium & there is some code to handle this in lib
|
|
barrelfish. \\
|
|
\hline
|
|
Threading & E & High & implemented by barrelfish library. \\
|
|
\hline
|
|
Tracing & E & Medium & implemented by tracing library. \\
|
|
\hline
|
|
Virtual Machine Monitor & P & Medium & implemented by vmmkit domain. \\
|
|
\hline
|
|
Virtual Memory & P & High & implemented by monitor and barrelfish library (???).
|
|
No support for paging, unmap, or fault handling. \\
|
|
\hline
|
|
\end{tabularx}
|
|
|
|
|
|
|
|
|
|
|
|
%% \begin{figure}[hbt]
|
|
%% \begin{center}
|
|
%% \includegraphics[width=0.5\columnwidth]{os-arch.pdf}
|
|
%% \end{center}
|
|
%% \caption{High level overview of the Barrelfish OS architecture}\label{fig:os-arch}
|
|
%% \end{figure}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\bibliographystyle{abbrvnat}
|
|
\bibliography{paper}
|
|
|
|
\end{document}
|