File:  [DragonFly] / site / data / goals / Attic / iomodel.cgi
Revision 1.5: download - view: text, annotated - select for diffs
Sat Mar 6 14:39:08 2004 UTC (10 years, 1 month ago) by hmp
Branches: MAIN
CVS tags: HEAD
Major Website Overhaul, Part 2 and 3: with regard to standards, target
code generation and general safety, I have also done other general
cleanups.

  * Make the website fully XHTML Transitional compliant.

  * Mop up and remove all invalid HTML tag combinations, and fix
    content structure.

  * Make use of tables for the Docs page, for presenting the
    documentation.  While I am at it, rearrange them by date.

  * Fix $TITLE() for a couple of pages.

  * Internal page headings, i.e. subheadings should use <h2>.

  * Turn *ALL* tags into lowercase, because UPPERCASE tags are
    not compliant on standards (XHTML to be precise).

  * Fix paragraphs, spelling errors, invalid lists and the
    whole nine yards.

  * Correct document layout for text-only and `for print'
    web clients.

  * While I am at it, make the various functions use const
    pointers.

Tested on:        Firebird (firefox, whatever...), Links, IE5+6, Opera
Reviewed by:      #dragonflybsd IRC channel on EFnet (joerg, eirikn)
Discussed with:   Justin Sherril

#!/usr/local/www/cgi-bin/tablecg
#
# $DragonFly: site/data/goals/iomodel.cgi,v 1.5 2004/03/06 14:39:08 hmp Exp $

$TITLE(DragonFly - I/O Device Operations)

<h1>New I/O Device Model</h1>
<p>
I/O is considerably easier to fix then VFS owing to the fact that
most devices operate asynchronously already, despite having a semi-synchronous
API.  The I/O model being contemplated consists of three major pieces of work:</p>

<ol>
<li>I/O Data will be represented by ranges of VM Objects instead of ranges of
system or user addresses.  This allows I/O devices to operate entirely
independently of the originating user process.</li>

<li>Device I/O will be handled through a port/messaging system (see 'messaging')
on the left.</li>

<li>Device I/O will typically be serialized through one or more threads.
Each device will typically be managed by its own thread but certain high
performance devices might be managed by multiple threads (up to one per cpu).
Multithreaded devices would not necessarily compete for resources.  For
example, the TCP stack could be multithreaded with work split up by target
port number mod N, and thus run on multiple threads (and thus multiple cpus)
without contention.</li>
</ol>

<p>
As part of this work I/O messages will utilize a flat 64 bit byte-offset
rather than block numbers.</p>
<p>
Note that device messages can be acted upon synchronously by the device.
Do not make the mistake of assuming that messages are unconditionally
serialized to the device thread because they aren't.  See the messaging
section on the left for more information.</p>
<p>
It should also be noted that the device interface is being designed with
the flexibility to allow devices to operate as user processes rather then
as kernel-only threads.  Though we probably will not achieve this capability
for some time, the intention is to eventually be able to do it.  There are
innumerable advantages to being able to transparently pull things like 
virtual block devices and even whole filesystems into userspace.</p>