Jak funguje demand paged loading spolecne s dynamickym linkovanim ?

Frantisek Dufka dufkaf na merit.cz
Úterý Březen 23 16:25:10 CET 1999


Dobry den,

tak nejak si neumim predstavit subj.
U staticky linkovanych exacu je to jasny - kod i data jsou v exaci zarovnane na
velikost stranky a naswapujou se do pameti pri page faultu primo z exace stejne
jako by to bylo ze swapu.

Jak do toho ale sedi dynamicke linkovani ? Kdy se vyresi symbolicke odkazy ?
Nacte se exac do pameti cely (takze zadne 'on demand') nebo se to resi nejak za
behu ? Jak je to cele efektivni (rychle) oproti statickemu likovani ? (nemyslim
rozdil v normalnim a -fPIC kodu, ale primo rezii dynamickeho linkovani)

Me tak z hlavy napadlo, ze bych vsecky nevyresene dynamicke odkazy nechal
ukazovat na adresu treba 0 a pak osetroval vyjimku a v ni vyresil ten dynamicky
odkaz. Nevim nakolik by to bylo efektivni (a taky by to asi musel delat primo
kernel), takze to asi neni uplne ono. Jak se to dela skutecne ?

Jiste,ze mohu zacit studovat zdrojaky ld-linux.so, neumel by to nekdo z vas
vysvetlit nejak jednoduse, nebo me alespon nekam nasmerovat?

Mimochodem na mem debianu 2.1 staticky linkovany tichy hello world
int main(){return 0} ma asi 90KB neni to trosku moc ? (neberte to jako pokus o
flame war:) Tzn jak psat kratke staticky linkovane programky (treba pro
jednodisketovou distribuci nebo nejakou hodne malou krabicku s hodne malou
pameti) ktere pouzivaji jenom volani kernelu? Kde je onen include soubor s
definici systemovych volani pro neco jako: 
#include <tojeon.h>
void main(){
  write(1,"Hello world.\n",strlen("Hello world.\n"));
  _exit(0);
}
co by melo po zkompilovani treba 100 bajtu ?
Jo a jeste jedna vec s tim trosku souvisejici, je mozne v linuxu, tak jak je
napsany aby sel napsat driver pro ramdisk (a treba i filesystem k tomu) tak aby
spustitelny kod bezel primo z ramdisku? Tzn. netvorila se druha kopie v pameti?
Nebo to snad tak dokonce funguje se soucasnym ramdiskem, ext2 fs a dynamicky
linkovanym programem na libc 6 :) ?

Ne ze by to bylo tak dulezite nebo uzitecne, puvodni otazka (cili dynamicke
linkovani) me zajima daleko vic. Diky za pripadnou odpoved.

Frantisek Dufka



Další informace o konferenci Linux