9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: "Fco. J. Ballesteros" <nemo@lsub.org>
To: 9fans@9fans.net
Subject: Re: [9fans] 9p2010
Date: Thu, 23 Apr 2009 19:31:03 +0200	[thread overview]
Message-ID: <e7eb83fb6d7b24a5c0040aeab57a2aba@lsub.org> (raw)
In-Reply-To: <df49a7370904231022g1ce3d3f9sf172b095898b9592@mail.gmail.com>

But if you do that (send sequences from userl-level)
you must interpret your namespace yourself. When I tried to
detect how to bundle calls for plan b, a problem I had was
namec. For me it's still not clear how to detect cleanly
`what to batch', even if you change the source for the
program doing I/O to help there, because of the mount
table.


>  From: rogpeppe@gmail.com
>  To: 9fans@9fans.net
>  Reply-To: 9fans@9fans.net
>  Date: Thu Apr 23 19:26:06 CET 2009
>  Subject: Re: [9fans] 9p2010
>
>  2009/4/23 erik quanstrom <quanstro@quanstro.net>:
>  > it occurred to me yesterday morning that the problem with
>  > a bundle of 9p requests is that 9p then no longer maps directly
>  > to system calls.
>  >
>  > with 9p2000, if you want to do a Tread, it's pretty clear that
>  > one needs to read(2); traditiona syscalls map directly to 9p.
>
>  true, but it is a one-to-many mapping - for instance, a single call to
>  open may generate an arbitrary number of 9p messages.
>
>  > not so when bundles/sequences are introduced.  how does a
>  > user program generate an arbitrary bundle?  can programs
>  > use bundles at all without being rewritten?
>
>  this is an interesting question.
>
>  as a starting point, i'd envisaged simply changing the existing
>  system calls to do sequences.
>
>  in inferno, where it's easy to add system calls, it would be
>  straightforward, i think, to add some additional system-level primitives,
>  (e.g. readfile) that took advantage of sequencing.
>  but that is cheating really - ideally you'd want a user-level
>  interface to this functionality.
>
>  the difficulty with creating the interface is that a 9p call
>  must be separated into two parts - the sending of the
>  parameters and the retrieving of the results.
>
>  for a low level 9p interface, i'd imagined something like
>  the following interface (in pseudo limbo):
>
>  Sequence: adt {
>  	queue: fn(seq: self ref Sequence, m: Tmsg, tag: any);
>  	wait: fn(seq: self ref Sequence): (any, Tmsg, Rmsg);
>  	cont: fn(seq: self ref Sequence);
>  	flush: fn(seq: self ref Sequence);
>  }
>
>  queue adds a new message to the sequence (with an arbitrary
>  tag to attach to the result of the call). wait waits for the next
>  reply to come in and returns the tag, the originating tmsg and the
>  reply. cont continues executing a sequence after it has
>  been aborted due to error (this will resend tmsgs). flush aborts
>  the sequence.
>
>  so this is ok when dealing with 9p or the dev interface directly, but
>  won't work so well
>  with higher level calls. it would be nice for a user-level program to
>  be able to string together an arbitrary sequence of system calls
>  into a sequence, but i'm not sure what a decent interface would look like.
>  (something like the above Sequence adt, but with a system call description
>  instead of Tmsg and a system call result instead of Rmsg, perhaps,
>  although it's not clear what a "system call description" would look like,
>  or how easy it would be to split system calls)
>
>  the control flow is not straightforward (or perhaps it is - it's the kind
>  of thing that might just have a nice elegant solution lurking there somewhere).
>
>  something to think about.



  parent reply	other threads:[~2009-04-23 17:31 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-23 16:26 erik quanstrom
2009-04-23 17:22 ` roger peppe
2009-04-23 17:28   ` erik quanstrom
2009-04-23 17:38     ` David Leimbach
2009-04-23 17:31   ` Fco. J. Ballesteros [this message]
2009-04-23 17:53     ` roger peppe
2009-04-26 21:29       ` Roman V. Shaposhnik
2009-04-27  7:32         ` roger peppe
2009-04-23 17:55   ` Eric Van Hensbergen
2009-04-23 18:35     ` Steve Simon
2009-04-23 17:54 ` Gary Wright

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e7eb83fb6d7b24a5c0040aeab57a2aba@lsub.org \
    --to=nemo@lsub.org \
    --cc=9fans@9fans.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).