Diff for /site/data/goals/Attic/iomodel.cgi between versions 1.4 and 1.5

version 1.4, 2004/03/01 03:39:08 version 1.5, 2004/03/06 14:39:08
Line 3 Line 3
 # $DragonFly$  # $DragonFly$
   
 $TITLE(DragonFly - I/O Device Operations)  $TITLE(DragonFly - I/O Device Operations)
 <H1>New I/O Device Model</H1>  
 <P>  <h1>New I/O Device Model</h1>
   <p>
 I/O is considerably easier to fix then VFS owing to the fact that  I/O is considerably easier to fix then VFS owing to the fact that
 most devices operate asynchronously already, despite having a semi-synchronous  most devices operate asynchronously already, despite having a semi-synchronous
 API.  The I/O model being contemplated consists of three major pieces of work:  API.  The I/O model being contemplated consists of three major pieces of work:</p>
 <P>  
 (1) I/O Data will be represented by ranges of VM Objects instead of ranges of  <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  system or user addresses.  This allows I/O devices to operate entirely
 independently of the originating user process.  independently of the originating user process.</li>
 <P>  
 (2) Device I/O will be handled through a port/messaging system (see 'messaging')  <li>Device I/O will be handled through a port/messaging system (see 'messaging')
 on the left.  on the left.</li>
 <P>  
 (3) Device I/O will typically be serialized through one or more threads.  <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  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).  performance devices might be managed by multiple threads (up to one per cpu).
 Multithreaded devices would not necessarily compete for resources.  For  Multithreaded devices would not necessarily compete for resources.  For
 example, the TCP stack could be multithreaded with work split up by target  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)  port number mod N, and thus run on multiple threads (and thus multiple cpus)
 without contention.  without contention.</li>
 <P>  </ol>
   
   <p>
 As part of this work I/O messages will utilize a flat 64 bit byte-offset  As part of this work I/O messages will utilize a flat 64 bit byte-offset
 rather than block numbers.  rather than block numbers.</p>
 <P>  <p>
 Note that device messages can be acted upon synchronously by the device.  Note that device messages can be acted upon synchronously by the device.
 Do not make the mistake of assuming that messages are unconditionally  Do not make the mistake of assuming that messages are unconditionally
 serialized to the device thread because they aren't.  See the messaging  serialized to the device thread because they aren't.  See the messaging
 section on the left for more information.  section on the left for more information.</p>
 <P>  <p>
 It should also be noted that the device interface is being designed with  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  the flexibility to allow devices to operate as user processes rather then
 as kernel-only threads.  Though we probably will not achieve this capability  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  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   innumerable advantages to being able to transparently pull things like 
 virtual block devices and even whole filesystems into userspace.  virtual block devices and even whole filesystems into userspace.</p>

Removed from v.1.4  
changed lines
  Added in v.1.5