Zdravim
Ja mam pocit ze ponechat nepouzivane stranky v pameti neni na skodu. Vzdyt i kdyz lezi dlougho nepouzite, precijenom je nekdo jednou potrebovat bude. Ja bych je tam nechal az do doby nez dojde pamet nebu bude potreba pro jine stranky nebo pro cache.
Takhle to delaji Windowsy, co nepotrebuji daji do swapu a programky pak uzivatelum ukazuji kolik maji volne pameti. To jsou prave ti kteri pak nadavaji ze linux tak moc zere pamet.
Zdenek
Výhodné je to jak kdy ... pokud například na domácím počítači máte web server nebo databázový server, který někdo používá pouze jednou za pár dnů, pak je určitě výhodné jeho stránky odswapovat a paměť používat jako cache pro něco jiného. Proto je tam ten parametr swappiness, aby se dalo nastavit, jak se to má chovat.
Co se týče Windows --- ve Windows XP Home jsem viděl nějaký checkbox, kterým se dalo nastavit, jestli se má preferovat použití paměti jako cache (a swapování) nebo ne --- asi to bude dělat něco podobného jako swappiness na Linuxu (ale nezkoušel jsem to --- Windows dlouhodobě nepoužívám).
S tym (ne)odswapovavanim sa mi to tiez zda OK, windowsy po nabehnuti maju v swape okolo 65M(teda u mna :-) ) a volnej pamate asi 70M a po chviiiiiili necinnosti maju v swape skoro vsetko. Otazne je, ako sa to prejavi na vykone, ked nahle treba vela pamate. Ak nie je odswapovana, tak naras to vsetko uvolnit degraduje dost vykon.
Ale mna zaujima ina vec. Vie mi niekto vysvetlit polopatisticky, co je to second chance, na co je...? Viem akurat, ze je to pouzite vo windowsoch.
Dobry, dik za predosle reakcie
Kedze toto je serial, ktory sa zaobera kernelovymi vecami, tak sa to pytam tu, lebo je tu dost velka sanca, ze mi niekto odpovie...
Ako sa v linuxe dynamicky linkuje? Co robi pri linkovani kernel a co robi ld.so? Je to tak, ze kernel natiahne spustitelny subor a prip. kniznice (na ake miesto?) a potom sa linker stara o "linkovanie"?
A ked sa aplikacia spusta druhy raz, musi sa to znova linkovat? Nebolo by lepsie, len nahrat spust. subor na spravne miesto, tak aby to sedelo s uz predtym zlinkovanou (tou istou) aplikaciou a namapovat to?
Bol by som rad, keby mi to niekto vysvetlil, dost mi to neda spavat a na to, aby som sa vrtal v kerneli nemam ani cas a ani tak dobre neviem C.
Kvůli jednoduchosti kernel nemá žádnou podporu linkování. Linkování dělá kompletně program /lib/ld-linux.so.2. Kernel pouze namapuje ld-linux.so do paměti. Program a knihovny se linkují pomocí syscallu mmap. Dynamické knihovny musí být přeloženy jako speciální position-independent code (flags -fPIC u gcc), což způsobí, že kód bude fungovat bez ohledu na adresu, na které se nachází v paměti. Program být s tímto příznakem přeložen nemusí, protože je vždy na stejné adrese. Dynamické knihovny sice fungují i bez -fPIC, ale pak žerou paměť pro každý proces, který si je nalinkuje, a pomalu se zavádějí.
ld-linux.so do paměti namapuje program i knihovny a do speciálních míst za program i knihovny umisťuje tabulky odkazů na funkce a (v případě knihoven) proměnné.
Linkování může urychlit program prelink, který napsal Jakub Jelínek. Ten umožní, aby správce systému knihovny a programy "předlinkoval" --- vyrobí se hotové tabulky odkazů na funkce a proměnné ke každému programu a dynamické knihovně, při spouštění se nemusí vyhledávat symboly, a provede se pouze mmap těchto tabulek.