( saxus | 2013. 01. 05., szo – 20:38 )

"Tehát ha nekem van 2Giga a gépben és kell 1.8G egy programnak, akkor a win7 szónélkül odaadja neki és megéldegél a maradék 0.2G-n ?"

Ha swapból is, de valahogy meg fogja oldani.

" Egy VBoxban futtattam 2 VM-et, és az egyiknek akartam adni plusz RAMot. A módosítás után elindult, majd elkezdte nyúzni szerencsétlen merevlemezt, majd elszállt a VBox."

És ez biztos, hogy csak a Windows hibája?

"Ezzel szétcseszve mind2 VM image-ét, tönkretéve 3 napi melót."

A vbox imagek "szétcseszése" biztos, hogy nem a vbox hibája?

Egyébként nagyon trükkösen nem írtál mennyiségeket :)

"sejtettem amúgy, hogy nem lesz ez így jó, mert nem véletlen van minimum RAM a Win7 specifikációban"

Remélem azt is sejted, hogy az nem kizárólag az OS öncélú futtatásához van, hanem ahhoz, hogy te azon valamilyen produktív munkát is tudj végezni. Aztán persze a végső szót messze nem az OS fogja kimondani, hanem a rajta futtatott programok _összessége_.

"Mit is tesz meg az OS, hogy a program megkapja a kívánt RAM mennyiséget?"

Kezdjük ott, mi a kívánt RAM mennyiség? Amennyit a malloc megkap paraméterül, vagy amit el is kezd használni belőle? (A két érték között szignifikáns különbség is lehet).

Ugyanis attól, hogy egy program igényel magának mondjuk 100 mega ramot, attól még egyáltalán nem fogja azt megkapni, hanem az OS csak szépen feljegyzi, hogy X programnak van 100M ramja. Majd utána 4 Kb-s darabonként megkapja, ha valóban használja is.

De nézzünk egy példát. Tfh. van egy átlag gépünk 2 Gb rammal. Abból a kernel a mindenféle saját dolgaihoz (programkód, driverek, memoriamenedzsment, security descriptorok, meg úgy minden, amihez memória kell) használ mondjuk 500 mega ramot, amiből 250 lapozható (=mehet ki a swapba). Ezen felül használ még mondjuk 500 mega ramot mindenféle GUI-t adó cumóhoz. (Ezek technikailag nem különbözik bármely másik egyéb felhasználói programtól.) Tfh. ebből 100M szintén nem lapozható valamiért. A maradék 1 Gb memória meg elment file cacheba, mert boot alatt sokat tekertük a disket és ha már úgy is be kellett olvasni, akkor tartsuk már benn, hátha még kell. Tehát ott tartunk, hogy van 1G memóriánk kvázi szabadon (file cacheként hasznosítva) és 1G ramunk használva, amiből 350M mindenképp a memóriában marad ha törik ha szakad. (Oké, valószínűleg néhány 10-20M valóban szabadon fog maradni pl. Windowson, hogy ha kell valaminek gyorsan odaadni, akkor maradjon tiszta memórialap - Windows mindenképp lepucolja security okok miatt a memórialapokat, mielőtt odaadná valamely programnak.)

Tfh. jön egy memóriaigényes program, amely kér magának 2G ramot, majd abból elkezd használni 500M-t is. Meg mondjuk behúz magának 100M-nyi binárist is, amiből 50M eleve olyan .dll, amit más is használ és be volt töltve már a memóriába. Ilyenkor az az 50M nem fog újra betöltődni. Tehát a file cacheből (ami ugye szabadnak látszik) lecsíp a rendszer 100-50+500M ramot, tehát marad 450M file cache, többi ment a foglalt közé.

TFH. a program még 500M-t kér. Ilyenkor már érdekesebbé válik a helyzet, mert függ attól, hogy milyen stratégiát választ az OS. Csinálhatja azt is, hogy mind a 450M-nyi file cachet odadobja meg még 50M-t kiswapel a lemezre. (Valószínűleg inkább 60-70M lesz az és 10-20-at meg fog tartani tényleg szabadon.) Persze, az is lehet, hogy a program egy 100 megányi adatmennyiségből folyamatosan és sokat dolgozik, ilyenkor könnyen előfordulhat, hogy inkább 150M-et takarít ki swapba és megtart 100M-et file cachenak, hogy gyorsítsa az IO műveleteket. Persze, ha egy program csak CPU illetve RAM igényes, akkor valószínűleg nem fog akkora file cachet fenntartani magának az OS. (Meg itt beleszólhat még a kézivezérlés, azaz az OS finomhangolása is, ha tudjuk, hogy mire optimalizáljunk).

No persze, ilyenkor, ha még indítunk valamit, ami memóriaigényes, kezdődik az igazi darálás, főleg, ha sokat váltunk a két program között. Ilyenkor az OS nemigazán tud mit tenni, minthogy egymás után ki-be pakolná a lemezre a futó programokat. De ez már egy olyan eset, ami bármely oprendszert a halálba taszít teljesítmény szempontjából, ugyanis nincs semmiből semelyik OS nem tud ramot teremteni.

Persze, itt fenn most egyszerűsítettem, mert egy programot vettem figyelembe. Csak ugye a valóság az, hogy egyszerre 100-as nagyságrendben futnak a programok. Tovább bonyolítja a helyzetet az is, hogy az egyes programok dönthetnek saját maguk is, hogy mit csinálnak. Nem kevés programban látni beállításokat, ahol a %-osan van megadva, hogy a gépből mennyi erőforrást használhat. Nyilvánvalóan az különféle gépeken különböző mennyiséget jelent.

Vagy van még egy másik speciálisabb eset, amikor egy szoftverben maguk oldják meg az erőforrások kezelését. Például ilyen az MS SQL Server. Ahol én láttam futni, ott mindig konstans 3% volt szabadon a memóriából, minden mást lefoglalt magának az SQL Server. (Gondolom állítható.)

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™