Wat is Gedeelde bibliotheek (shared library)?

Bibliotheek die bij dynamisch linken tijdens runtime wordt geladen. .so in Linux, .dll in Windows. Gemaakt met positie-onafhankelijke code, zodat de codepagina's door veel processen kunnen worden gedeeld.

Japanse benaming: 共有ライブラリ

“Gedeelde bibliotheek (shared library)” komt voor in 6 oefenvragen uit 1 onderwerpen, bijv. Linker, loader en uitvoerbare formaten.

Vakgebied: Linker, loader en uitvoerbare formaten

Nu oefenen: vragen over Gedeelde bibliotheek (shared library)

Hoe wordt het fysieke geheugen gebruikt als 100 processen dezelfde gedeelde bibliotheek gebruiken?

  1. APagina's met niet-herschreven code delen één kopie, en pagina's met te schrijven data heeft elk proces zelf
  2. BZowel code als data hebben per proces 100 kopieën
  3. CAlles, inclusief datapagina's, wordt gedeeld en processen kunnen elkaars waarden zien
Antwoord en toelichting tonen

Antwoord: A. Pagina's met niet-herschreven code delen één kopie, en pagina's met te schrijven data heeft elk proces zelf

Het OS koppelt de gedeelde bibliotheek aan de virtuele adresruimte van elk proces en laat pagina's met niet-herschreven code en constanten naar dezelfde fysieke pagina wijzen. Pagina's met te schrijven data, zoals variabelen, worden per proces apart gehouden, bijvoorbeeld door op het moment van schrijven een kopie te maken (copy-on-write). Zo is ook bij 100 processen geheugen voor de bibliotheekcode maar één keer nodig.

Welk voordeel is juist van het zetten van de symboolzichtbaarheid (visibility) op „hidden” voor interne functies, terwijl bij het maken van een gedeelde bibliotheek alleen de van buiten gebruikte functies worden gepubliceerd?

  1. AInterne functies worden versleuteld en kunnen niet worden geanalyseerd
  2. BEr zijn minder symbolen voor de dynamische linker, waardoor het laden sneller gaat, en interne aanroepen hoeven niet via de PLT te lopen
  3. CDe bibliotheek werkt dan op elk OS
Antwoord en toelichting tonen

Antwoord: B. Er zijn minder symbolen voor de dynamische linker, waardoor het laden sneller gaat, en interne aanroepen hoeven niet via de PLT te lopen

Gepubliceerde symbolen van een gedeelde bibliotheek kunnen worden vervangen door een definitie met dezelfde naam in een andere module, dus ook aanroepen van binnenuit moeten via de PLT of GOT lopen. Met hidden zijn ze van buiten niet zichtbaar, vermindert het aantal symbolen dat de dynamische linker onderzoekt en kunnen interne aanroepen rechtstreeks PC-relatief plaatsvinden. Ook naamconflicten met andere bibliotheken worden vermeden en de gepubliceerde ABI blijft klein.

“Gedeelde bibliotheek (shared library)” in de toelichting

Vragen met “Gedeelde bibliotheek (shared library)” (6)

  1. Hoe wordt het fysieke geheugen gebruikt als 100 processen dezelfde gedeelde bibliotheek gebruiken?
  2. Welk voordeel is juist van het zetten van de symboolzichtbaarheid (visibility) op „hidden” voor interne functies, terwijl bij het maken van een gedeelde bibliotheek alleen de van buiten gebruikte functies worden gepubliceerd?
  3. Wat staat er in de .text-sectie van een uitvoerbaar bestand?
  4. Welk voordeel van dynamisch linken (gedeelde bibliotheken) is juist?
  5. Wanneer wordt bij gedeelde bibliotheken op Linux het versienummer van de soname, zoals de „.1” in libfoo.so.1, in het algemeen verhoogd?
  6. Wat is er te weten te komen als op Linux het commando ldd op een uitvoerbaar bestand wordt gebruikt?

Vergelijkingen met deze term

Verwante termen

Dynamische linker Copy-on-write Via PLT (procedure linkage table) GOT (global offset table) ABI (application binary interface) Dynamisch linken ASLR BSS-sectie ELF

Naar de woordenlijst