English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
[Caml-list] Suggestion: a possible alternative to shared libraries?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2004-06-14 (15:03)
From: Gerd Stolpmann <info@g...>
Subject: Re: [Caml-list] Suggestion: a possible alternative to shared libraries?
Am Mon, 2004-06-14 um 16.23 schrieb Benjamin Geer:
> The reasoning is as follows: if many small programs use the same large 
> library, each of the small programs will require a lot of memory. 
> Rather than create shared libraries to get around this, the idea is to 
> write the in-memory representation of libraries (ideally on an as-needed 
> basis) into a cache consisting of one or more files that can be mapped 
> read-only into memory; that memory could then be shared by multiple Caml 
> processes that needed to use the same libraries.

Basically, a shared library _is_ an in-memory representation of the code
to be mapped into memory. There is a bit of additional stuff that makes
it complicated, in particular the file format is organized such that
most of the file can be mapped read-only, and only a small fraction is
mapped read-write (e.g. for address relocations).

So you are only re-inventing the wheel, at least if you want to do it
for native code.

I read the announcement differently. As Java is based on bytecode, and
the .class files are transformed after being loaded into memory (to
increase speed, this may or may not include JIT compiling), they are
dumping the memory after this transformation, and emulate a kind of
shared library for their execution model. They cannot use normal shared
libraries because they don't use normal ways of code representation,
that's why it is reasonable to port this wheel to the Java vehicle.

One can discuss whether one should do the same for O'Caml bytecode. In
particular, neither bytecode executables nor loaded CMAs are loaded by
memory mapping. When I am not completely wrong, executables could be
loaded by mapping them read-only (at least in the case when no endianess
transformation is necessary), as they are mainly a memory footprint. For
CMAs, a non-trivial change of the file format would be necessary as the
loader performs relocations, and these relocations should be restricted
to certain memory areas to maximize memory sharing.

> Perhaps Caml's existing MD5 signatures for libraries could be used to 
> distinguish between an older version of a library and a newer one, so 
> each Caml process would only memory-map the version that it was 
> originally linked with, in order to avoid the "DLL hell" problem that 
> Xavier points out.

Much easier: Include the MD5 signature in the name of the shared

However, the hell persists: You don't know which versions are still in

Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany 
gerd@gerd-stolpmann.de          http://www.gerd-stolpmann.de

To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners