Frage zu dynamic linking

11/02/2010 - 13:09 von Markus Wichmann | Report spam
Hi all,

nachdem ich nun mehrere Hundert Zeilen Quelltext gelesen habe, aber
immer noch nicht schlauer bin, würde ich gern eine Sache wissen:

1. Wie ist das mit benötigten Libs, sollen die nicht eigentlich nur
_einmal_ geladen werden, um anschließend von allen Prozessen, die die
jeweilige Lib brauchen, gemeinsam genutzt zu werden? Das war doch der
Grundgedanke von Dynamic Linking, oder? Ich habe nàmlich keinen
entsprechenden Code in der dietlibc gefunden. Und die glibc war mir
reichlich überkompliziert.

2. Wenn 1., dann stellt sich die Frage, wie die verschiedenen Instanzen
des dynamischen Linkers miteinander kommunizieren sollen. Jedenfalls
benutzt keine der Implementierungen, die ich mir angesehen habe Shared
Memory oder Semaphores. Oder auch nur MAP_SHARED.

3. Wiederum nur, wenn 1. Fàllt irgendjemandem ein Sicherheitsrisiko ein,
das entstehen könnte, wenn der dynamic linker einfach die komplette
linked list mit den lib handles per shm veröffentlicht und die libs mit
MAP_SHARED mappt? Berechtigungsprobleme sehe ich nicht, wenn das ganze
halbwegs clever implementiert ist (sodass deadlocks gar nicht entstehen
können und libs nur entladen werden, wenn der Referenzzàhler 0 erreicht.
Einziges Problem könnten jetzt noch Namenskonflikte (z.T. gewollt)
darstellen. Öhm... naja, da müsste ich mir noch was ausdenken.

Tschö,
Markus
Progress (n.): Process through which USENET evolved from smart people in
front of dumb terminals to dumb people in front of smart
terminals.

news://freenews.netfront.net/ - complaints: news@netfront.net
 

Lesen sie die antworten

#1 Stefan Reuther
11/02/2010 - 18:59 | Warnen spam
Markus Wichmann wrote:
1. Wie ist das mit benötigten Libs, sollen die nicht eigentlich nur
_einmal_ geladen werden, um anschließend von allen Prozessen, die die
jeweilige Lib brauchen, gemeinsam genutzt zu werden? Das war doch der
Grundgedanke von Dynamic Linking, oder? Ich habe nàmlich keinen
entsprechenden Code in der dietlibc gefunden. Und die glibc war mir
reichlich überkompliziert.



Das macht der Kernel, der feststellt, dass hier schon wieder eine Seite
einer Datei gemappt wurde, die bereits woanders gemappt ist.


Stefan

Ähnliche fragen