Divny clanek p. Zajicka v News on 'Net (long)

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Čtvrtek Srpen 17 11:06:40 CEST 2000


On Mon, 14 Aug 2000, Milan Kerslager wrote:

Kdyz uz se tady kolem toho rozvinula diskuse, tak se take pripojim...

> Model pouzivani knihoven je v M$ OS stejny, jako ve svete Unixu.

(Mluvime o dynamicky linkovanych knihovnach.) Ne zcela. Povedlo se Vam
nekdo pod Wokny udelat neco jako $LD_PRELOAD? Unixovy (rozumej tim treba
dostatecne novou verzi Linuxu, Solarisu apod.) dynamic linker je podstatne
komplikovanejsi (a flexibilnejsi) tvor, nez "dynamic linker" ve Windows
(pisu to v uvozovkach, protoze tam je to nacpane v jadre).

> Knihovny jsou v Unixovych systemech cislovany tremi cisly (napr.
> glibc-2.1.3 v RH 6.2).

Tohle cislovani je vlastne historicka konvence a na vlastni funkci
dynamic linkeru nema prakticky zadny vliv.

> Prostredni je tzv. minor number, binarni kompatibilita neexistuje,
> program je potreba znovu prelinkovat (neni treba jej prelozit).

Jste si jisty? Jestlize nejsou dve verze binarne kompatibilni, tak zadne
prelinkovani nepomuze (mozna leda v nejakem vylozene exotickem pripade).
(Spis je to bylo tak, ze pri zmene prostredniho cisla by mela byt
zachovana kompatibilita, ale potencialne pouze jednim smerem, tj. programy
slinkovane se starsi verzi budou fungovat i s novou verzi (pokud nebude
jejich funkce zaviset  na existenci nejake chyby ve starsi verzi), ale
naopak to neplati.)

> Na major verzi se dela symbolicka linka (napr libc.so.6 -> libc-2.1.3.so),
> ktera oznazuje "default".

Ten symlink je vlastne vsechno, co dynamic linker zajima. Vec se totiz ma
tak, ze kazda (ELFova) dynamicka knihovna ma svoje jmeno ("soname"),
pomoci ktereho je odkazovana z exacu, ktere ji pouzivaji. Priklad soname
je prave "libc.so.6". Dynamic linker pak v zadanych adresarich
($LD_LIBRARY_PATH, -rpath, /usr/lib, /lib) hleda soubor prave tohoto jmena
a je mu ukradene, jestli je to primo soubor, nebo symlink vyrobeny necim
jako je ldconfig.

Pritom by melo platit, ze shoda soname odpovida binarni kompatibilite (coz
bohuzel v pripade glibc 2.x pro ruzna x zustalo teorii, protoze zrejme
nejakou dobu trvalo, nez autori pochopili, ze uzivani verzovanych symbolu
neni jen tak).

> Z toho vyplyva, ze v systemu lze mit vsechny verze knihoven a dokonce
> je lze uchovavat na libovolnych mistech v systemu.

A hlavne lze zpusobit, ze ruzne programy jsou ty ruzne verze schopny
pouzivat.
 
> Ve filozofii spravy pameti tedy neni mezi M$ systemy a Linuxem rozdilu.
> Vse je uzce svazano s HW podporou procesoru, takze nelze vymyslet nic
> "originalniho", krome ruzne urovne kvality SW zpracovani. "Swapuji" tedy
> oba, otazkou zustava, kdo vice (ci mene) plytva systemovymi zdoji.

Originalnich pristupu lze vymyslet i v omezenych mezich toho, co
podporuje hw, mnoho (ovsem vetsina je pak prakticky nepouzitelna).

> Sdilena pamet nevznika jen pri pouzivani knihoven, ale take treba pri
> opetovnem spusteni stejneho programu (typicky napr. shell v Unixech). V
> tomto pripade se vyuzije toho, ze pametovy prostor procesu je rozdelen na
> casti a napr. kod programu, staticke promenne a konstatanty mohou byt ve
> spolecnem prostoru oznacenem jen pro cteni.

Do statickych prommenych se pomerne casto neco zapisuje, a tudiz je malo
pravdepodobne, ze by byly (dlouhodobe) sdileny. Krome toho vznika sdilena
pamet pri volani fork()...coz tedy Wokna vubec neumeji.


--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux