O intrebare de newbie in mac OS X: exista o posibilitate de alocare de “memorie virtuala” sau de creere a unui “disk de memorie virtuala”, asa cum era la OS9?
Sau, altfel spus, ce se intampla cand sistemul, prin aplicatiile deschise, ajunge la limita? Da crash sau incearca sa minimizeze memoria alocata unor anumite aplicatii?
Managementul memoriei este unix-like, deci mai bun de-atât nu există momentan. Pe scurt, un proces pe 32 de biți are disponibili 4 gb de memorie, iar unul pe 64 biți are 18 eb. Cum nu prea ai atâta RAM în sistem, se folosește spațiul liber de pe partiția de boot pentru memorie virtuală (simulează memoria RAM prin stocarea temporară a datelor pe disc).
În utilizare “curentă”, nu am întâlnit încă aplicații care să atingă limita de 4 gb pe proces. Nu ai treabă, dpdv utilizator, cu memoria virtuală; sistemul se ocupă transparent de redimensionarea memoriei virtuale, alocarea memoriei RAM, mutarea paginilor de memorie șamd. Și crede-mă că o face foarte bine ca un exemplu, la mine spațiul ocupat de swap se încadrează în utilizare normală undeva pe la nivelul de 6-8 ori memoria fizică. Mie mi se pare că OSX își alocă mult mai multă memorie virtuală decât ar fi necesară în primă instanță (am rulat sisteme Linux care aveau limitată memoria virtuală la o dimensiune egală cu memoria fizică instalată în sistem, și nu au avut nici o problemă ani de zile), dar probabil e o măsură de siguranță luată în calcul de cei care au proiectat sistemul de management al memoriei.
Ca să răspund la întrebare: pe măsură ce vei deschide mai multe aplicații simultan, OSX va începe (transparent) să aloce memorie virtuală pe discul sistem, din ce în ce mai multă pe măsură ce deschizi aplicații noi. Aplicațiile pe care ai focus (adică cele cu care lucrezi în momentul respectiv) vor primi mai multă memorie RAM decât cele din fundal, pentru a lucra mai rapid; când trimiți în Dock o aplicație cu care ai lucrat, și aduci alta în prim-plan, aplicația pe care-ai pus-o “on hold” va ceda o parte din memoria RAM aplicației curente, la schimb cu niște memorie virtuală, și invers. Am explicat cam ambiguu, dar ideea e că totul se petrece transparent și nici nu vei simți cum se desfășoară respectiva manevră (poate vei simți o intensificare a activității hard-diskului, dar asta e tot). Singura problemă care ar putea apărea ar fi ca memoria virtuală necesară să depășească spațiul liber existent pe partiție, dar nici atunci nu se va petrece un crash, ci doar o încetinire (considerabilă) a sistemului.
Pe scurt, sistemul de memory management de la Apple este deocamdată “ză best”
Cont…
Vaxxie, super raspuns, multumesc pentru timpul acordat.
Si totusi… daca proc-ul si sistemul de operare aloca gigi de memorie pe disc, de ce se mai lupta lumea pentru cateva sute de K de Ram suplimentare (care totusi costa bani buni)? Sa inteleg ca totusi, cu cat mai mult RAM real, cu atat mai rapid, sau proc-ul lucreaza mai relax? Nu se pune problema de spatiu insuficient pe disc, evident.
Exact, cu cât ai mai mult RAM fizic, cu atât sistemul va putea să păstreze mai multe pagini de memorie în memoria reală, fără să o mute în memoria virtuală. O regulă generală pentru sistemele Unix (și implicit și OSX) este următoarea: cu cât mai mult RAM, cu atât mai bine !
Să explic și motivul. Managementul unixish este deștept; dacă are memorie RAM liberă, o va folosi la ceva, și n-o va lăsa neutilizată. Să zicem că ai 1 gb de RAM, și aplicațiile tale au nevoie de 2 gb RAM. Sistemul nu va aloca toată memoria RAM disponibilă unei aplicații, ci va păstra o porțiune din RAM pentru a stoca paginile de memorie mai des utilizate dintre cele care au fost la un moment dat trimise în memoria virtuală, deoarece este mai rapid să păstrez paginile des utilizate în RAM (chiar dacă ele nu sunt folosite de aplicația curentă, și va fi nevoie să aloc niște memorie virtuală aplicației din foreground)—chestia asta va accelera mult relansarea aplicației anterioare. De asemenea, dacă ai mai multă memorie RAM decât este necesar pentru aplicații, sistemul n-o va lăsa nefolosită (că doar ai dat banii pe ea, nu ? ) și o va folosi pentru caching la fișiere. Asta e o chestie care șochează la început pe oricine vine de pe un alt sistem: când vrei să vezi memoria liberă pe un sistem cu memory management unixish, va fi foarte puțină memorie RAM liberă, și următoarea afirmație este ceva de genul “hehe, ce sistem prost, abia mai ai oleacă de RAM liber”, când de fapt realitatea este că un sistem care lasă memorie RAM neutilizată este un sistem prost, pentru că nu utilizează la maxim resursele disponibile.
Ca să vezi informații despre memoria virtuală în MacOS X, deschide un Terminal și tastează “vm_stat <RETURN>”.
Va apărea ceva de genul ăsta (exemplu de pe sistemul meu):
Mach Virtual Memory Statistics: (page size of 4096 bytes) // asta înseamnă că o pagină de memorie are 4 kb Pages free: 18353. // câte pagini de memorie sunt libere Pages active: 27107. // pagini active Pages inactive: 68181. // pagini inactive Pages wired down: 17431. // pagini "fixate" (vezi mai jos) Translation faults: 2095501. // "lost in translation" :)) pagini care nu s-au mai potrivit când au fost readuse din swap Pages copy-on-write: 24474. Pages zero filled: 1086856. // câte pagini au fost "eliberate", șterse Pages reactivated: 0. Pageins: 18934. // câte pagini de memorie au fost mutate în swap Pageouts: 0. // câte pagini de memorie au fost recuperate din swap Object cache: 5108 hits of 14313 lookups (35% hit rate) // performanța cache-ului, destul de slabă după cum se vede, deoarece sistemul a fost restartat recent
Paginile fixate sunt paginile de memorie care nu vor părăsi niciodată memoria RAM, de exemplu bucățile de cod din kernel.
Cam asta ar fi. E o întreagă teorie a memory managementului, s-au scris cărți întregi pe chestia asta.
Super raspuns, multumesc mult. Cred ca si altii vor profita; si vom captura si pe alti “Bill Gate-isti”. Oricum, vorba francezului, chapeau pentru ce a facut Bill in momentul respectv.
Nu, nu sunt Calul Troian al lui Microsoft - am lucrat pe Mac din perioada Classic-ului, cand il foloseam si ca portabil (in portbagajul masinii…)
Inca o intrebare, pe aceeasi tema: alocarea memoriei functioneaza si in Mac OS classic 9 environment? Adica, daca deschid o aplicatie pentru MAC OS 9 (dar prin X), trebuie sa ii mai aloc memorie anterior deschiderii sau nu?
As putea incerca, poate, dar sunt de principiul ca e bine sa afli mai intai, si apoi sa incerci.
Multumesc
Recunosc că am început direct cu OSX, și nu cunosc reminescențele Classic-ului în ce privește fundația; însă în momentul actual, obiectiv vorbind, OSX bate la fund orice sistem de operare comercial de pe lumea asta (nu discut rara avis-urile pentru aplicații in-house, memorii de peste 16 gb, volume uriașe de date, magistrale optice ... și alte SF-uri; vorbesc strict la nivel end-user). Este o arhitectura Unix, care nu degeaba e lăudată atât, cu un melanj Apple format din ceea ce lipsește comunității open-source: o viziune de ansamblu, finanțare, unitate în elementele grafice, etc.
Inca o intrebare, pe aceeasi tema: alocarea memoriei functioneaza si in Mac OS classic 9 environment? Adica, daca deschid o aplicatie pentru MAC OS 9 (dar prin X), trebuie sa ii mai aloc memorie anterior deschiderii sau nu?
As putea incerca, poate, dar sunt de principiul ca e bine sa afli mai intai, si apoi sa incerci.
Multumesc
Recunosc că nu am studiat problema (n-am folosit environmentul de Classic), dar din câte am observat, acest “environment” este o aplicație nativă OSX care rulează aplicațiile pentru Classic, deci teoretic nu ar trebui să ridice absolut nici o problemă. Nu știu exact cum lucrează “emulatorul de Classic” (căci asta este, până la urmă), dar presupun că cei ce l-au scris s-au gândit la problema asta.
Cum se explica atunci faptul ca, dupa ce am alocat din “get info’ de la dreamweaver 3 (aplicatie pentru 9) 100M de memorie, si am deschis dreaweaver-ul prin environment-ul din X, meter-ul din meniul de la X nu mi-a indicat un “consum” de memorie marit?
Cred că se explică destul de simplu: “emulatorul” Classic din OSX ignoră pur și simplu valoarea pentru memorie alocată pentru aplicația respectivă din Classic (practic, nu are nici o importanță câți mega îi dai în “get info”), și se ocupă extern de managementul memoriei, așa încât aplicația din 9 crede că are tot timpul memorie destulă. Poți să aloci și o valoare maximă pentru memorie ? dacă da, fă un test simplu: alocă-i în 9 aplicației doar 1 mb de memorie, și vezi dacă pornește
însă în momentul actual, obiectiv vorbind, OSX bate la fund orice sistem de operare comercial de pe lumea asta
Apple fanboy
“How many times da I have to tell ya…the right tool for the right job!” - Scotty, Star Trek V: The Final Frontier
Nu exista sistem de operare perfect in toate privintele.
OS9 si cele dinainte aveau memory managementul similar cu cel de la win3.1. Isi facea un fisier de swap de marime fixa si aplicatiile trebuiau sa declare de la inceput cata memorie vor.
OSX foloseste standardul unix in care orice proces poate sa aloce cata memorie doreste (in anumite limite setate in prealabil) si el va tine in memorie doar paginile necesare. Acum unele unix-uri arunca pe swap doar ce nu incape in memorie (ex: Linux) iar altele prealoca swap pt orice este sau poate fi in ram ca sa fie sigure ca au unde sa aloce swap (ex: HP/UX si am impresia ca si OSX face la fel). De aia Linux se multumeste cu swap putin. Celelalte unix-uri tin swap-ul pe o partite separata sau intr-un fisier pre-alocat. OSX-ul a venit cu o chestie noua - genereaza dinamic fisiere de swap care le pune pe volumul System.
Asta e un lucru pe de o parte bun - ca nu mai sta user-ul sa se gandeasca cat swap sa puna si nu sta o partite cu spatiu nefolosit daca nu e nevoie de swap si nu apar probleme daca user-ul porneste tone de aplicatii si se consuma swap-ul. Pe de cealalta parte - faptul ca acele fisiere sunt alocate dinamic ii scade CRUNT performantza la lucrul cu swap-ul (fata de swap pe o partitie separata) si daca se umple filesystem-ul System in afara de problemele obisnuite mai apare si faptul ca nu mai poti aloca memorie - ceea ce pt un sistem unix e rau. De asemenea - ai un program care are un memory leak - aloca swap intr-una si te trezesti ca ai discul plin si nu mai poti salva nimic.
Eu unul preferam sa am optiunea sa ii fac partitie separata de swap.
iata solutia aleasa de mine: partitionarea hardului in 3 volume: 1 pentru sistem si aplicatii, 2 pentru scratch disk si 3 pentru lucrari ( toate fisierele pe care le lucrez, creez, modific etc - nu salvez nimic in user/home, adica pe partitia care contine sistemul si aplicatiile)
dupa ce am setat toate aplicatiile care au nevoie de scratch (photoshop, illustrator etc) sa aleaga pentru asta partitia special creata, am folosit un programel cu care am mutat setarea implicita a fisierului (invizibil) swap pe aceeasi partitie de scrath (si asa am observat ca uneori ramin cu 48K pe aceasta partitie care are 20 G)
iar daca lucrez la greu cu photoshop, prefer ca uneori, in functie de marimea fisierelor pe care le prelucrez, sa inchid aplicatia si sa o deschid din nou inainte de a trece la un alt fisier mare cu multe layere / ba uneori mai dau si log off la user (restartul mai rapid)
cit despre aplicatiile din os 9, prefer sa le rulez nativ pe un G4 - merg mult mai bine decit in mediul emulat din os x