Bibliotecă comună

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 23 martie 2021; verificările necesită 17 modificări .

O bibliotecă partajată sau o bibliotecă partajată este un fișier  care este menit să fie partajat între . Modulele utilizate de un program sunt încărcate din obiecte partajate separate în memorie, mai degrabă decât să fie copiate de linker atunci când copiază un singur executabil pentru un program.

Bibliotecile partajate pot fi legate static, ceea ce înseamnă că referințele la modulele bibliotecii sunt rezolvate și memoria este alocată modulelor atunci când este creat executabilul. Dar de multe ori legarea bibliotecilor partajate este amânată până când acestea sunt încărcate.

Unele sisteme mai vechi, de exemplu Burroughs MCP , Multics , au, de asemenea, un singur format pentru fișierele executabile, indiferent dacă sunt sau nu generice. Ei au fișiere de bibliotecă partajate în același format ca fișierele executabile. Acest lucru are două avantaje principale: în primul rând, fiecare dintre ele necesită un singur bootloader, nu două (a avea un bootloader separat aduce o complexitate suplimentară). În al doilea rând, permite, de asemenea, să fie utilizate executabile ca biblioteci partajate, atâta timp cât au un tabel de simboluri . Formatele tipice combinate executabile și bibliotecă partajată sunt ELF și Mach-O (ambele pe Unix) și PE (Windows).

În unele medii mai vechi, cum ar fi Windows pe 16 biți sau MPE pentru HP 3000 , numai datele bazate pe stivă (locale) erau permise codul de bibliotecă partajată sau au fost impuse alte restricții semnificative asupra codului de bibliotecă partajată.

Memoria partajată

Codul bibliotecii poate fi partajat în memorie cu procese , precum și pe disc. Dacă se utilizează memoria virtuală, procesele vor rula într-o pagină fizică de RAM care este mapată la diferite spații de adrese de proces. Aceasta are beneficiile sale. De exemplu, într-un sistem OpenStep , aplicațiile au adesea doar câteva sute de kiloocteți și se încarcă rapid; cea mai mare parte a codului lor se afla în biblioteci care erau deja încărcate de sistemul de operare pentru alte scopuri.

Programele pot partaja RAM folosind cod independent , ca în Unix , rezultând o arhitectură complexă, dar flexibilă. Acest lucru asigură că, prin diverse trucuri, cum ar fi premapping spațiu de adrese și rezervări de pagini pentru fiecare bibliotecă partajată, are o șansă mai mare de a fi partajată. A treia opțiune este stocarea la un singur nivel folosită de IBM System/38 și de succesorii săi.

În unele cazuri, versiuni diferite de biblioteci partajate pot cauza probleme, mai ales când bibliotecile cu versiuni diferite au același nume de fișier și sunt utilizate de aplicații diferite instalate pe sistem, fiecare necesitând o versiune diferită. Un astfel de script este cunoscut sub numele de DLL hell , numit după DLL-urile Windows și OS/2 . Cele mai multe sisteme de operare moderne post-2001 au metode de curățare pentru a face față unor astfel de situații sau folosesc biblioteci „private” specifice aplicației.

Vezi și

Note