Jump to content

Въпрос относно РАМ паметта.


C_heAD

Препоръчан пост

Здравейте.

Наскоро ми привлече интереса РАМ паметта на компютъра и как тя се заема от програмите.Имам предвид,примерно моя лаптоп има 4 ГБ РАМ (DDR3) и ми е интересно ако примерно пусна 5 програми които дърпат яко ресурс (РАМ памет,а не от процесора) как по точно ще се разпредели всичко това,дали само паметта от едната "банка" ще се заема или?

Link to comment
Сподели другаде

Паметта се адресира, Операционната система разпределя ресурсите и жонглира с исканията на приложенията/програмите, за операционната система няма особено значение дали банките са 1, 2 или 5.Съвременните процесори и операционни системи в персоналните компютри работят в защитен режим/protected mode/, което позволява операционната система да има контрол над проложенията и позволява съществуването и разбирателството на различни приложения, пуснати да работят паралелно, като всяко си има определено адресно пространство в паметта.

Реално, ядрата на операционните системи не се занимават само с физическата RAM памет, тук си говорим за понятието Виртуална памет, което обобщава физическата RAM памет, page/swap файла, който се намира на твърдият диск и т.н. Операционната система от момента, в който физическата памет започне да намалява недопустимо, ще започне да ангажира swap файла на твърдият диск, който се възприема логически като част от общата памет, но е много по-бавен от RAM паметта. Зависи от самото приложение колко памет ще поиска да задели и т.н

Link to comment
Сподели другаде

Внимание: следва сухичък текст.

За жалост няма как да е иначе, защото самата материя е сложничка.

 

Когато даден процес се стартира, операционната система му предлага оперделено количество виртуална памет. На 32-битови версии на Windows това количество е 2 гигабайта, докато на 64-битови версии на Windows е 8 терабайта. Т.е. ако имаш 30 активни процеса, ще имаш и 30 пъти по 2GB (или 8TB на Windows x64) виртуална памет. Тази памет не съществува на практика и можем да я считаме като теоритичен лимит. Т.е. операционанта система общо взето лъже всеки процес, че има толкова налична памет, която той може да използва както сметне за нужно.

 

Леко пояснително отклонение... Защо тези стойности? Всяка архитектура си има адресно пространство, т.е. максималното количество адреси във виртуалната си памет.

Лимитът на 32-битовата архитектура е (2 на 32-ра степен), което е равно на 4294967296 байта = 4194304 килобайта = 4096 мегабайта = 4 гигабайта. От тези 4 гигабайта 2 се запазват за системата, а другите 2 се предоставят на процеса.

Лимитът на 64-битовата архитектура е 2^64 (2 на 64-та степен), което е равно на 18446744073709551616 байта = 18014398509481984 килобайта = 17592186044416 мегабайта = 17592186044416 гигабайта = 16777216 терабайта = 16384 петабайта = 16 екзабайта. Конкретно на 64-битовите версии на Windows обаче максималното адресно пространство е 2^40 (2 на 40-та степен), което е равно на 17592186044416 байта = 17179869184 килобайта = 16777216 мегабайта = 16384 гигабайта = 16 терабайта. Отново се дели на 2 - 8 терабайта за системата и 8 терабайта за процесите.

 

Когато даден процес се стартира, той започва да си зарежда нужните данни в тази виртуална памет. Самият процесът си няма понятие от RAM, pagefile и т.н. Той вижда само тази виртуална памет, която му е предоставена, и ползва само нея. Операционната система е тази, която се грижи данните да отиват във физическата памет. Физическата памет е тази, която съществува на практика. Това е RAM паметта, pagefile-а на твърдия диск и евентуално нормални файлове също на твърдия диск. За илюстрация мога да използвам услугата за оставяне връхни дрехи на гардероб(иер) в театрите. Оставяш си връхната дреха на служителя и получаваш номерче. На излизане предоставяш обратно номерчето и служителят ти връща дрехата. Ти не знаеш тази дреха къде отива, а само казваш "искам да приберете това палто" и после "искам да ми върнете това палто". Задължение на служителя е да знае къде го прибира и после да го даде обратно. Той върши работата, ти само чакап и си свиркаш с уста.

 

Единицата за работа с памет е страница (page) и е с размер 4 КБ.

Когато даден процес започне да си зарежда данните, той ги и докосва. Всички докоснати страници се поместват в RAM паметта и се разполагат в т.нар. working set на процеса. Това е съвкупност от страници, които процесът е докоснал, прочел или променил, т.е. счита се, че работи активно с тях. Това е стойността на Mem Usage в Task Manager.

Windows разполага с няколко списъка със страници:

- standby page list - тук се намират страниците, които са напуснали наскоро working set-a на някой процес, но все още са асоциирани с него;

- modified page list - тук се намират страниците, които са напуснали наскоро working set-a на някой процес, все още са асоциирани с него, но са били променени, докато са били използвани; тези страници са на изчакване за записване в pagefile-a или някой нормален файл на твърдия диск;

- free page list - тук се намират страниците, които са напуснали standby page list и вече не се асоциирани с никой процес;

- zero page list - тук се намират страниците, които са напуснали standby page list, не са асоциирани с никой процес и информацията в тях е занулена.

 

При стартиране на процес Windows му предоставя колкото страници са му нужни, за да си зареди всичко. С течение на времето обаче някои от страниците в working set-a на процеса остаряват. Т.е. процесът не е имал нужда от тях скоро. Windows се стреми да поддържа всичко подредено и стегнато, затова постепенно кълца страниците на working set-a и ги вади от там. Ако тези страници са били промемени, докато са били в working set-a на процеса, те се преместват в modified списъка. Там те изчакват реда си да бъдат записани в pagefile или в някой файл на твърдия диск (зависи каква информация е имало в тези страници). След като бъдат записани, се преместват в standby списъка. Ако страниците не са били промемени, докато са били в working set-a, се преместват директно в standby списъка. Там стоят определен период и ако процесът не си ги поиска обратно, преминават след това във free списъка. Когато във free списъка се появят страници, това е сигнал на една специална нишка да се задейства и да ги занули и да ги премести в zero списъка.

 

Важно е да се отбележи, че записването на данни от modified страниците в pagefile-а не се извършва постоянно, а само когато се насъберат много промемени (modified) страници или ако списъците със свободни (free) и занулени (zero) страници се изпразнят доста. Нишката, която занулява свободни страници, също не се активира веднага. Тя има много нисък приоритет по принцип и работи само, ако централния процесор в момента е свободен и няма никаква друга работа.

Разбира се, ако на даден процес докосне страници от паметта, които в момента се намират в modified или standby списъците, Windows ще ги върне обратно в working set-a на процеса, защото помни коя страница от тези списъци на кой процес е принадлежала. За жалост, ако тази страница, която процесът е докоснал, вече случайно е записана на твърдия диск, ще трябва да се вземе от там, което не е добре, защото твърдият диск е МНОГО по-бавен от RAM паметта.

 

Когато друг/нов процес стартира, той също трябва да получи страници. Windows първо проверява списъците със свободни и занулени страници, в зависимост какви страници са нужни. Ако новият процес веднага ще си запълни страниците с негови си данни, тогава се вземат страници от списъка със свободни. В тях има вече данни от други процеси, но те ще бъдат презаписани веднага и всичко ще е наред. Ако обаче новият процес няма да си запълни страниците веднага, но ги изисква, тогава Windows ще му даде занулени страници, защото в противен случай новият процес ще може да види информация, принадлежаща на други процеси. Това са мерки за сигурност. Ако са нужни занулени страници, но такива няма, Windows ще събуди нишката за зануляване принудително и ще я накара да занули страници веднага, защото са нужни. Ако в предпочитаният от двата списъка няма страници, се прибягва до другия.

Ако обаче и двата списъка (free и zero) са празни, тогава Windows поглежда в standby списъка. Там страниците все още са асоциирани с процеси и не са толкова стари, но няма как. Хваща страниците от standby списъка, мести ги във free списъка и след това, ако има нужда, ги занулява и ги мести в zero списъка.

Ако обаче и standby списъка е празен, Windows поглежда в modified списъка и принуждава те да бъдат записани на твърдия диск, за да ги премести в standby списъка, след това във free списъка и накрая в zero списъка, ако е нужно.

Ако положението е критично и дори и standby списъкът е празен, тогава Windows няма избор и прибягва до кълцане на working set-и на други процеси. Това е крайна мярка.

 

Компонентът в Windows, който се грижи за всичко това, се нарича memory manager. Неговата цел е да държи колкото се може повече страници в RAM паметта, да прави колкото се може по-малко четения/записи от/по твърдия диск и да поддържа всички процеси доволни, като регулира кои техни страници са в RAM и кои са в pagefile-a максимално безпристрастно и честно. Той не е много стиснат и ако някой процес е гладен за RAM, няма да се скрънзи много, но също така няма и да остави даден процес да изгълта цялата памет и ще дръпне юздите, ако се налага.

 

Дано ти е свърши работа. Предполагам, че това звучи сложничко, и е така. Това не е и чак толкова задълбочено обяснение. Има и още подробности, термини и особености. Доста е оплетено и навързано. За жалост няма как да се направи едновременно кратко и правилно/точно обяснение на memory manager-а в Windows NT, защото точно това е най-сложното нещо в цялата операционна система.

Link to comment
Сподели другаде

Поздравления, Night Raven, че изказа и описа нещата така подробно. Аз лично се стремях да е нещо лаконично и приблизително, защото не смятах, че подробни обяснения биха имали голям смисъл, но все пак поздравявам за точно представената информация.
Link to comment
Сподели другаде

Ами със сигурност ми свърши работа и ми задоволи интереса.Искрено ви благодаря =) Съжалявам за толкова късния отговор,но нямах много време да се ровичкам из интернет напоследък.
Link to comment
Сподели другаде

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гост
Отговори на тази тема

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   Не можете да качите директно снимка. Качете или добавете изображението от линк (URL)

Loading...
×
×
  • Създай ново...