|
|
| 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> |