home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / os / vms / 17659 < prev    next >
Encoding:
Internet Message Format  |  1992-11-09  |  2.5 KB

  1. Path: sparky!uunet!usc!newshub.sdsu.edu!ucselx!crash!cmkrnl!jeh
  2. From: jeh@cmkrnl.com
  3. Newsgroups: comp.os.vms
  4. Subject: Re: known VAXCRTL bugs
  5. Message-ID: <1992Nov8.131311.845@cmkrnl.com>
  6. Date: 8 Nov 92 13:13:11 PST
  7. References: <1d1p5pINNkd@gap.caltech.edu> <38@colorne.UUCP>
  8. Distribution: world
  9. Organization: Kernel Mode Consulting, San Diego, CA
  10. Lines: 43
  11.  
  12. In article <38@colorne.UUCP>, dfilip@colorne.UUCP writes:
  13. > [...]
  14. > I would not, for example, try to use buffered I/O in an AST
  15. > routine (it just dosn't seem like the right thing to do) [...]
  16.  
  17. Using $QIO calls to do buffered I/Os (as defined by the device driver) works 
  18. fine.  It is a time-honored technique:  The AST is called upon completion of
  19. the I/O, and the AST procedure starts the next I/O.  
  20.  
  21. In fact there are several hundred sites worldwide who are running DECUS uucp,
  22. the protocol engine for which absolutely depends on doing buffered I/Os from
  23. ASTs.  Come to think of it, this message will reach you via at least one hop
  24. that uses this code...
  25.  
  26. What makes you think it wouldn't work?  
  27.  
  28. It is true that some language's I/O RTLs aren't AST-reentrant.  VAX FORTRAN
  29. used to have this problem (don't know if it still does).  If you tried using
  30. formatted I/O from both non-AST and AST code, you ran the chance of a
  31. "recursive I/O error", which was the Fortran RTL's way of complaining that 
  32. one of its routines had been re-entered. 
  33.  
  34. > allocating a
  35. > chunk of memory seems like something that should be able to be handled
  36. > in an asynchronous fashion.
  37.  
  38. Whether it can or not depends on how the heap of free space is organized.  
  39.  
  40. Borrowing two examples from VMS internals, the fragmentable nonpaged pool
  41. requires several steps to allocate or free a block, and the routines that
  42. manipulate this therefore have to take out the POOL spinlock.  Otoh, the
  43. pre-allocated lists (SRPs, IRPs, LRPs) are organized as relative queues, and
  44. an element can be added to or removed from these lists via a single instruction
  45. (INSQTI or REMQHI), which is atomic even on an SMP machine.  
  46.  
  47. Of course you can make any non-AST-reentrant code safe to use in an AST 
  48. environment simply by surrounding it with $SETAST(0) ... $SETAST(1).  
  49.  
  50.     --- Jamie Hanrahan, Kernel Mode Consulting, San Diego CA
  51. uucp 'g' protocol guru and release coordinator, VMSnet (DECUS uucp) W.G., and 
  52. Chair, VMS Programming and Internals Working Group, U.S. DECUS VAX Systems SIG 
  53. Internet:  jeh@cmkrnl.com, hanrahan@eisner.decus.org, or jeh@crash.cts.com
  54. Uucp:  ...{crash,eisner,uunet}!cmkrnl!jeh
  55.