On Thu, Apr 18, 2002 at 08:44:16AM -0400, Smith, Brian N. wrote:
> >John Hasler wrote
> >I wrote:
> >> Executables, being read-only, are mapped directly from disk and never
> >> use any swap at all.  Only data gets mapped to swap.
> 
> >Karsten writes:
> >> Is this a GNU/Linux thing or a more general Unix/POSIX thing?
> 
> >Neither.  It's a virtual-memory thing.  It's the obvious thing to do as
> >soon as you have vm.
> 
> >> Recent development or long-time feature.
> 
> >VMS had it from day one, I believe, and Berkeley introduced it into Unix
> >when they ported it to the VAX.
> 
> I am a little puzzled by the comment "executables do not use swap" and I
> have to admit computer design is not my forte. However let me dive in :-)

Neither am I. Diving in too..

>   I was under the impression the swap process did not care what the memory
> was doing, in fact the user process or data did not know it was in ram or on
> disk, but ran in the virtual memory.  If there was a request from part of
> the program running in this virtual memory (hence obviously in ram space
> talking to the processor) and the instruction pointed to an area in virtual
> memory that was not in ram space the MMU would generate an exception to
> kernal space and the swap would occur.  The trick is to guess what parts of
> the virtual memory should be kept in ram space. (Hence all the design in the
> kernal world)   As well there are some means to request that parts of your
> program remain in RAM space (this used to be a function of the sticky bit I
> think)  but I am not a programmer so I really cannot comment too much on
> this.

It looks like you're both right:

executables *do* swap - there is no need for the loader to load in a
complete executeable before starting to execute it. When new bits of the
executable are needed, they will be paged in (or is it swapped? I
managed to confuse myself again...)

But when the memory manager decides to re-use a bit of memory currently
holding bits of program, then there's *no need* to write it to the swap
partition(s). It can't be dirty, and it can be re-read as required from
the executable file.

So: executables do get swapped, but they don't use swap *space*.

On some unix's (e.g. HP if memory serves - it's been swapped out a long
time), a side-effect of this is not being able to remove executable
files that are currently running - you get "text file busy". The fact
that currently running executables can be removed under Linux, I believe
is due to the cooperation of the file system, which just "hides" removed
files until all references to them are gone. But I may well be wrong on
this, see sig.

-- 
 ______________________________________________________________
/\                                                             \
\_| *DISCLAIMER* I do not know exactly what I'm talking about. |
  | Large grains of salt recommended to aid in digestion.      |
  |   _________________________________________________________|_
   \_/___________________________________________________________/

Attachment: pgpgMVYYFr4UC.pgp
Description: PGP signature

Reply via email to