From bbs@floyd.upol.czMon Jan 29 16:26:46 1996 Date: Mon, 29 Jan 1996 16:24:11 +0100 From: BBS Floyd To: hubicka@limax.paru.cas.cz Subject: Princip #2-jadro-memory management (fwd) *** Forwarded file follows *** Posted By: kotelnik (kotelnik) on 'Linux' Title: Princip #2-jadro-memory management Date: Thu Dec 7 16:53:30 1995 Protoze se na tom Paja a Puma shodli pisu neco o jadre. Protoze si myslim nze nez psat rady volani a parametru je lepsi napsat jak to tam chodi a ty volani pak pridou samy. Protoze zevseho nejradsi se hrabu v mm(memory manager) tak pisu neco o nem. Tedy linuxackej mm ma nekolik urovni. Na nenizsi urovni je rutinka co umi naalokovat stranku-get_free_pages ta je v souboru mm/swap,csice ve skutecnosti dela vic nez oznacovani stranky za pouzitou-ma nekolik priorit a pousti swapovani.taky linuxackej mm nepouziva jen 4KV stranky ale i jejich nasobky(o tom se muzete presvecit zmacknutim shift scroll-lock). Na dalsi urovnich je nekolik oddelenych casti-pamet pro procesy,pamet protabulky jadra,buffery(cache) a swapovani. Tak tedy pamet pro procesy. Kaazdy proces ma svoji vlastni tabulku vm area-tedy jeho pamet se sklada z neomezeneho poctu arei. Virtual memory area je struktura co ma problizne tyto polozky: pozice a velikost v uzivatelske pameti flagy soubor ktery je tam namapovan tabulku metod pro pracu z objektem flagy urcuji asi to jestli je stranka zapisovatelna,citelna a spustitelna a nejaky dalsi bejkoviny(zamykani.swapovani) a MAP_ANON tento flag urcuje jestli je anonimni to znamena ze nema zadny soubor. A tady zacina hlavni sila mm. Tedy pokud chcetemit nejaky soubor v pameti proste zavolate mmap a reknete parametry. Ta neudela nic jinyho nez ze prida polozku do tabulky arei. Vlastni nahravani souboru do pameti nastane teprve kdyz procesor nekam slapne,narazi na diru pameti a vyvola vypadek stranky. Potom se prislusna stranka nahraje. Samozdrejme ze pokud je soubor namapovan do sedmi procesu(neni vubec vyjimka-reknu proc) a jeste je v cache je na jedinem miste v pameti. To znamena ohromnou usporu.taky se nahraje jedine ta cast co je treba.usopru vzniklou timto pristupen uvidite kdyz hodite top-rozdil mezi size a rss. Jak sem rikal namapovani do deseti programu zaroven neni zadna vyjimka a to proto ze i kod programu je tam namapovanej-tedy se dotahuje jen to co je treba a deset bashu sdili jeden jedinej kod. Dalsi ohromna vyhoda linuxackyho mm je vtom ze kdyz se proces forkne-rozdeli se na dva nedojde ke zkopiravani vsech jeho dat ale zase jen tabulky arei a stranka se rozdeli na dve teprve kdyz do ni proces zapise. Mapovani pameti muze byt i zapisovatelny tedy kdyz neco zapisete do stranky objevi se to i v cache a vsech ostatnich mapingech a pozdeji zapise na disk...a to uz je bomba :)da se tim moc elegantne delat komunikace..Stejne se tak delaj i zdileny knihovny-proste se soubor mmapne do pameti procesu a proces na ni skace.. mmap muze volat i proces funkci mmap-dela to hodne programu-mc pro prohlizeni nebo dosemu na vytvoreni spustitelne stranky pro dos.. Bezni format pameti co pouziva proces je: proces ma linearni pamet neomezenou zezhora ani zezdola..na zacatku je jeho kod(text) ten je read only..za nim nasleduje bss a halda.potom je ukazatel konce haldy-za nim je v pameti dira a kazdej pokus o pracu vyvola segfault.to se da ovladat volanim brk ale je lepsi to prenechat nejaky knihovne treba mallocu. proti nemo od konce pameti jsou namapovany zdileny knihovny a zasobnik..za koncem zasobniku je zase ukazatel-ukazuje na konec ty pametovy diry.. no a vsechno ostatni je na procesu..kdyz si rekne sem si namapuju videoramku-zavolas mmap a kdyz ses root mas ji tam..proste sranda Dalsi dulezita cast mm je cache..Ta ma v linuxu tu vyhodu ze mneni svoji velikost podle potreby a taky vyuziva stejnou pamet jako procesy takze pristup na disk dost urychli..jinak je dost prasacky udelana a mela by se prepsat sidli v fs/buffer.c swapovani v linuxu je udelany celkem jednoduse-kazda mmarea ma svoji obsluznou swapovaci rutinu ktera se zavola pri nedostatku pameti a neco uvolni..samozdrejme ze kdyz je namapovanej soubor tak se to neswapuje puze vymaze z pameti apotom zase dohraje..proto i dlouhej exac linuxe neprekvapi no to je asi vsechno co napisu..vim ze je to dost povsechni ale vic do detailu se mi nechce...chci jenom abyste pochopili jak takovej lepsi mm ma vypadat...hlavne to zdileni ejnych stranek pro ruzny ucely-cache,kod,atd.. jinak jeste to dohravani z exace za behu je demad page loadning a tomu nekopirovani stranek pri foru se rika klonovani a potom duplikovani :) To nekopirovani je jedna z hlavnich zbrani linuxu v ostatnich unixech to dost zdruzuje protoze kdyz chcete neco spustit musite se nejprve forknout-vsechno se zkoupiruje a potom provect exec-vymenu kodu tedy vsechno se zase smaze..presto ze bsd to vyresilo vforkem tak je to dosud docela velkej problem kdybyste chteli neco podrobnejsiho mailnete Kotelnik ......a ten nejkotlivejsi......