Наша совместная команда Banwar.org

Связаться с нами

  • (097) ?601-88-87
    (067) ?493-44-27
    (096) ?830-00-01

Статьи

Чотири гігабайти пам'яті - недосяжна мета?


Попередження. У даній статті розглядаються 32-розрядні версії Windows. У всіх випадках, коли розрядність системи не згадується, мова йде саме про них.

Комп'ютери все вдосконалюються і вдосконалюються, а пам'ять все дешевшає і дешевшає. Одинадцять років тому модуль пам'яті об'ємом чотири мегабайта коштував сто з лишком доларів. З тих пір ціни впали на три порядки - майже за ті ж гроші зараз можна купити чотири гігабайтовий модуля.

Системні плати для домашніх комп'ютерів, що підтримують установку чотирьох і навіть восьми гігабайт оперативної пам'яті, перестали бути екзотикою, а здешевлення пам'яті зробило покупку і установку ОЗУ такого розміру реальними. Ще раз уточню, що мова йде саме про домашніх комп'ютерах і про масові робочих комп'ютерах, оскільки сервери досягли цієї межі досить давно, та й для серйозних робочих станцій такий обсяг ОЗУ вже не в новинку.

А от пересічні користувачі лише недавно отримали можливість придбати за прийнятною ціною комп'ютер з чотирма гігабайтами оперативної пам'яті або розширити до цієї межі пам'ять у вже наявному комп'ютері. Тому кількість питань «Чому Windows не бачить всі мої чотири гігабайти» останнім часом збільшується навіть не в арифметичній, а в геометричній прогресії.

Відповідь на це питання почнемо з невеликого екскурсу в теорію організації ЕОМ і в історію розвитку сімейства цих машин, сумісного з IBM PC.

Оперативна пам'ять ЕОМ практично завжди працювала на кілька порядків швидше, ніж пристрої зовнішньої пам'яті або введення-виведення. Тому для розробників було цілком логічним розділити операції звернення до ОП і до інших пристроїв. До пам'яті йшло безпосереднє звернення, а операції введення-виведення і робота із зовнішніми пристроями виконувалися через спеціальні регістри - порти. З іншого боку, такий поділ ускладнювало систему команд, і в ряді моделей для звернення до пристроїв була виділена область адрес пам'яті, в якій і розміщувалися регістри пристроїв. За другою моделі, зокрема, була спроектована знаменита PDP-11: її шістдесят чотири кілобайти адресного простору були розділені на дві частини - 56 для оперативної пам'яті і вісім для пристроїв. Установка модуля ОЗУ повного обсягу (64 КБ) приводила до того, що одна восьма його частина просто не могла бути використана.

Компанія Intel з самого початку, з моделі 4004 використовувала перший підхід: один адресний простір для ОЗУ і ПЗУ, а інше, окремий простір портів введення-виведення - для інших пристроїв. Таке рішення, звичайно, давало можливість повністю використовувати весь адресний простір під пам'ять. Але воно мало і негативні сторони. Звернення до портів зазвичай займає більше часу, до того ж воно не сумісне з технологією прямого доступу в пам'ять, помітно збільшує швидкість обміну даними і розвантажує центральний процесор.

Тому розробники комп'ютерів і периферійних пристроїв вже досить давно стали поєднувати введення-виведення через порти з прямим зверненням до оперативну пам'ять пристрою. Але щоб звернутися до пам'яті пристрою безпосередньо, ця пам'ять повинна бути розташована в загальному адресному просторі.

Якщо взяти класичний ПК, випущений в 1981 році, то його адресний простір було поділено на дві частини в співвідношенні п'ять до трьох. Перша частина відводилася для ОЗУ, а друга - для ПЗУ самого комп'ютера (програма самотестування - POST і базова система введення-виведення - BIOS) і для ПЗУ і ОЗУ пристроїв. Уже найперший відеоадаптер MDA мав свою оперативну пам'ять, що знаходиться в загальному адресному просторі пам'яті.

Слід звернути увагу, що та частина адресного простору, яка зайнята пристроями, не може бути одночасно використана для основної пам'яті комп'ютера. Адже якщо на звернення до комірки пам'яті будуть відгукуватися два пристрої, то можливі конфлікти між ними і, як наслідок, порушення роботи комп'ютера.

Коли в 1985 році компанія Intel випустила процесор 80386, то при розробці комп'ютерів на його основі були прийняті два рішення. По-перше, розподіл адрес в першому мегабайті було залишено незмінним заради сумісності з попередніми моделями комп'ютерів і розробленими для них програмами. По-друге, для реалізації переваг 32-розрядної архітектури було передбачено, що пристроїв, які потребують використання адресного простору пам'яті, виділяється четвертий гігабайт.

Можливо, зараз комусь це рішення і здається необачним, але тоді гігабайти пам'яті здавалися чимось фантастичним. Та й навряд чи хтось міг в той час припустити, що ця архітектура проживе ще як мінімум двадцять років.

Втім, як виявилося, насправді рішення зовсім не було необачним: для роботи відеоприскорювачів життєво важлива можливість прямого доступу драйвера до відеопам'яті. Адже альтернативою є Послівний запис даних в порт, і тоді можна забути, наприклад, про сучасну графіку в іграх. Щоб отримати приблизне уявлення, як би це виглядало, можете порівняти поведінку дискової системи в режимі прямого доступу в пам'ять (UDMA) і в режимі програмного введення-виведення (включите режим PIO 1 в настройках контролера дисків, тільки не забудьте потім повернути до початкового значення).

Отже, в IBM PC / 386 і у всіх наступних сумісних комп'ютерах (а саме ця архітектура панує зараз на ринку персональних комп'ютерів) ОЗУ в адресному просторі займало нижні області, а решта устаткування - від верхньої межі 4 Гб вниз. Причому довгий час ніхто всерйоз не турбувався про це четвертому гігабайті - одиниці або десятки кілобайт буферів мережевого адаптера і контролера дисків і лічені мегабайти пам'яті відеоадаптера погоди не робили. До того ж для домашніх і робочих комп'ютерів такий обсяг пам'яті був просто нереальний, а для установки великої кількості пам'яті в потужні робочі станції і сервери було запропоновано інше рішення, про яке буде розказано нижче.

Перший серйозний стрибок в «отжіраніі» у ОЗУ адресного простору зробила технологія AGP. З появою відеоадаптерів з апаратними прискорювачами виведення тривимірних зображень різко збільшилася потреба в обсязі оперативної пам'яті такого адаптера. Технологія AGP дала можливість в разі потреби (брак власної пам'яті) використовувати для потреб відеоадаптера частину основної пам'яті комп'ютера.

Необхідність швидкої роботи з пам'яттю відеоприскорювача диктувала розміщення всього обсягу цієї пам'яті в фізичному адресному просторі. Тому обладнання AGP резервує для своїх потреб адресний простір, яке до недавнього часу було набагато більше, ніж розмір відеоОЗУ. Зазвичай резервується 256 Мб, причому не має значення, скільки пам'яті встановлено в відеоадаптер. Поява PCI-E принципових змін не принесло - змінився фізичний інтерфейс, а організація використання відеопам'яті залишилася тією ж.

Щоб наочно показати, як кількість доступного обсягу ОЗУ пов'язане з використанням фізичного адресного простору пристроями, наведемо дві картинки - вікно властивостей комп'ютера і вікно диспетчера пристроїв з розподілом ресурсів пам'яті. Використовувався відеоадаптер з 128 Мб ОЗУ.

властивості системи

Диспетчер пристроїв

Операційна система використовує 3,25 Гб ОЗУ з чотирьох встановлених, і ця величина в точності відповідає нижній межі адресного простору, використовуваного адаптером (портом PCI-E): шістнадцяткове значення d0000000. Зверніть увагу, що відведені для відеоадаптера адреси з d000000 по dfffffff, тобто 256 Мб.

Драйвери пристроїв не встановлювалися (в значках пристроїв стоять знаки питання) свідомо, щоб продемонструвати, що справа не в них.

Для обмеження доступного для ОЗУ адресного простору досить фізичної присутності пристрою на шині, і не має значення, використовується воно чи ні.

Втім, установка всіх драйверів картину не змінює.

У 32-розрядної Windows Vista точнісінько так само - системі є 3,25 Гб ОЗУ.

Властивості системи в Windows Vista

І було б дивно, якби доступно виявилося інше кількість пам'яті - адже обладнання щось одне і те ж, і адреси воно забирає у оперативної пам'яті одні й ті ж незалежно від того, яка встановлена ​​ОС.

Перевіримо, як впливає на доступний обсяг ОЗУ розмір пам'яті відеоадаптера. Замінимо плату з 128 Мб на таку ж модель, але з 512 Мб.

Диспетчер пристроїв

Як бачимо, нічого не змінилося. Частинка адресного простору задається не самим адаптером, а обладнанням шини AGP або PCI-E.

У розглянутих прикладах наймолодший з адрес пристроїв був використаний відеоадаптером. Правда, треба відзначити, що кількість пристроїв на системній платі було невелике і відносно стандартно для нових плат. Додавання будь-яких плат в гнізда системної плати (або інтегрування додаткових пристроїв в плату її виробником) може привести до того, що доданий пристрій займе адреси молодше, ніж у інших пристроїв. Тоді доступний ОС обсяг ОЗУ ще більше зменшиться. З іншого боку, адреси пристроїв можуть розподілитися так, що новий пристрій займе вільні області між уже наявними пристроями, і тоді зменшення доступного системі ОЗУ не відбудеться.

Наприклад, коли в комп'ютер автора були додані два ТВ-тюнера, вони зайняли адресний простір вище, ніж відеоадаптер, і зменшення доступного системі ОЗУ не відбулося.

Диспетчер пристроїв
Клацніть щоб збільшити

З іншого боку, коли ті ж два тюнера стояли в старому комп'ютері автора з системною платою на базі i865, вони займали адресний простір нижче відеоадаптера (і зменшували б доступний обсяг ОЗУ, якби пам'яті на тому комп'ютері було більше 3 Гб).

Наприклад, установка чотирьох відеоадаптерів може помітно обмежити розмір використовуваного ОЗУ (показана таблиця розподілу ресурсів була приведена на форумі 3Dnews учасником HarfulL).

Диспетчер пристроїв
Клацніть щоб збільшити

Як видно, відеоадаптери зайняли чотири області адресного простору по 256 Мб кожна, що починаються на кордонах 2,5, 2,75, 3,0 і 3,25 Гб. (В даному прикладі був встановлений тільки один гігабайт ОЗУ).

У цікавого читача вже напоготові питання: а яким чином адреси розподіляються між пристроями? Чи можна якимось способом «зрушити» все адреси в одну суцільну купу і звільнити для ОЗУ додатково десятки або навіть сотні мегабайт адресного простору?

Адреси (а також порти введення-виведення, а на шині ISA - ще і переривання) визначаються дешифратором пристрою. Налаштування цього дешифратора зазвичай можна змінювати в деяких межах, заданих виробником. До середини дев'яностих років така настройка виконувалася установкою або видаленням спеціальних перемичок на пристрої. І завдання конфігурації комп'ютера з декількома додатковими пристроями була не надто простою справою. Тому була запропонована технологія plug-and-play. У той час вона була у всіх на слуху, а зараз стала повсякденним явищем. Суть цієї технології в тому, що використовувані пристроєм адреси пам'яті, порти вводу-виводу і лінії переривань можуть конфигурироваться програмно. Це робить або BIOS на етапі підготовки комп'ютера до завантаження, або операційна система в ході своєї завантаження. Програма конфігурації опитує пристрою, визначає, які ресурси можуть використовуватися кожним з них, а потім розподіляє ці ресурси між пристроями.

Межі конфігурації кожного пристрою задає його виробник. Причому для спрощення дешифраторів адрес ступені конфігурації зазвичай кратні розміру ресурсів, що використовуються пристроєм. Наприклад, якщо якась «залізяка» має ОЗУ розміром 32 Кб, то і початкова адреса, як правило, можна встановити тільки кратним цього розміру або навіть більшою величиною.

В результаті зрушувати адреси різних пристроїв «впритул» не надається можливим, хоча теоретично це завдання і реалізувати.

Висновок 1. Хоча 32-розрядні версії Windows XP і Windows Vista можуть використовувати чотири гігабайти оперативної пам'яті, через обмеження, що накладаються архітектурою використовуваного обладнання, ця величина зазвичай виявляється в межах 3-3,5 Гб.

Висновок 2. Додавання пристроїв, що використовують шини PCI або PCI-E, може зменшити кількість доступного системі ОЗУ. У таких випадках можна рекомендувати розглянути заміну внутрішніх модулів на пристрої з аналогічною функціональністю, що підключаються до інтерфейсу USB.

Можливо, читач вже звернув увагу, що про серверні варіанти ОС поки не було сказано ні слова. І цьому є свої причини - в серверних версіях справа йде трохи по-іншому. Наприклад, на тому ж самому комп'ютері з тим же самим обладнанням 32-розрядний Windows Server 2003 Standard Edition «бачить» практично всі чотири гігабайти, хоча пристрої займають в четвертому гігабайті ті ж самі адреси.

властивості системи

Диспетчер пристроїв

Як таке може бути? Повернемося в середину дев'яностих років. У той час для серверів верхнього рівня (розмова піде тільки про серверах з архітектурою IBM PC) стала актуальною задача збільшення обсягу пам'яті понад чотирьох гігабайт. Ніякої Америки для цього відкривати не знадобилося - «все вже вкрадено до нас». Технологія розширення обсягу пам'яті була неодноразово використана в самих різних ЕОМ.

До обладнання додавали апаратний диспетчер пам'яті, який у взаємодії з операційною системою забезпечував розширення фізичного адресного простору пам'яті. Пам'ять при цьому ділилася на окремі сторінки, розмір яких визначався характеристиками апаратного диспетчера.

Нову (для платформи PC / 386) технологію назвали розширенням фізичних адрес (PAE - Physical Address Extention) і втілили її в процесорах Pentium Pro. Комп'ютери на цих і всіх наступних процесорах можуть (при наявності відповідної системної плати, звичайно) використовувати не 32-х, а 36-розрядну шину адреси, що дає можливість встановити до 64 Гб ОЗУ.

Слід підкреслити, що мова йде про розширення саме фізичних адрес. Процесор при цьому залишається 32-розрядних, всі програми також використовують 32-розрядну адресацію і безпосередньо можуть звертатися тільки до чотирьох гігабайтам.

Щоб дати можливість програмам використовувати більшу кількість пам'яті, в Windows була додана ще одна технологія - AWE (Address Windowing Extension - віконне розширення адрес). В адресному просторі програми виділялося вікно, в яке відображався ділянку виділеної програмі пам'яті. Наприклад, програма запитує та отримує для своїх потреб 16 Гб, але може звертатися до них тільки через вікно розміром один гігабайт. Щоб отримати доступ до потрібної ділянки пам'яті, слід перемістити вікно в потрібне положення, при цьому інші 15 гігабайт виявляються недоступними. Якщо потрібно звернутися до іншого ділянці пам'яті - ще раз перемещаем вікно і так далі. Програму при цьому доводиться ускладнювати, причому на звичайних комп'ютерах, що не серверах, таке ускладнення виявляється практично марним. Тому не дивно, що підтримку AWE можна побачити тільки в серйозних серверних додатках, кількість яких, кажучи фігурально, дозволяє перерахувати їх на пальцях.

При використанні розширення фізичних адрес, по-перше, процесору стає доступною пам'ять в фізичних адресах вище чотирьох гігабайт. По-друге, системна плата може «перекинути» в область вище чотирьох гігабайт ту оперативну пам'ять, розташовану в четвертому гігабайті, яка заблокована через можливість конфліктів з пристроями.

Слід підкреслити, що для цього необхідна наявність двох обов'язкових умов:

  • системна плата повинна підтримувати розширення фізичних адрес;
  • в операційній системі потрібно включити режим PAE.

Недотримання хоча б одного з них призводить до неможливості використання адрес вище чотирьох гігабайт. Наприклад, ніякі хитрощі і шаманські танці з бубном не допоможуть системі побачити всі чотири гігабайти на системних платах на базі i945.

Виконання першої умови можна перевірити по документації до системної плати. Правда, далеко не завжди в описі плати можна знайти «чарівне» слово PAE. Найчастіше використовується (в описі плати або настройках BIOS) вираз memory remap або близькі до нього.

Виконання другої умови останнім часом часто забезпечується автоматично. Якщо процесор підтримує апаратну захист від виконання даних (Data Execution Prevention - DEP), то Windows XP з другим пакетом виправлень, Windows Server 2003 з першим і більш пізніми пакетами виправлень і, звичайно, Windows Vista за замовчуванням включають цей захист, а разом з нею і PAE. До таких процесорам відносяться всі сімейство 64-розрядних процесорів АМД, все процесори Intel з підтримкою технології EM64T і деякі чисто 32-розрядні процесори сімейства Pentium 4.

Якщо процесор старіший або якщо використовуються більш старі версії Windows, можна включити режим розширення фізичних адрес примусово. Для цього треба додати в рядок запуску даної ОС в файлі boot.ini параметр / PAE.

Якщо режим розширення фізичних адрес включений, то у вікні властивостей комп'ютера з'являється рядок «Розширення фізичних адрес» (останнє слово часом не поміщається у відведений для напису місце і обрізається). Подивіться ще раз на вікно властивостей комп'ютера з встановленим WS2003. Розширення фізичних адрес включено, і система бачить практично всі чотири гігабайти.

Уважний читач, звичайно ж, вже смикає мене за рукав: але ж у вікні властивостей XP SP2 теж є такий напис. Значить, ця система теж працює в режимі розширення фізичних адрес? Але чому ж тоді їй доступно лише три з невеликим гігабайти?

Так, Windows XP SP2 в даному випадку за замовчуванням включила режим PAE для забезпечення підтримки DEP. Але, на відміну від Windows Server 2003, в Windows XP розширення фізичних адрес реалізовано лише частково. Ця система не підтримує 36-розрядну адресацію пам'яті, Навіть з включеним PAE вона має те ж саме 32-розрядне адресний простір, що і без цього режиму.

Так що навіть примусове включення РАЕ не додасть в розпорядження системи жодного байта.

Втім, якщо встановити Windows XP з першим пакетом виправлень або вихідну версію взагалі без пакетів (що автор з деяких причин категорично не рекомендує робити на сучасних комп'ютерах), то розширення фізичних адрес дасть системі можливість побачити всі чотири гігабайти. Але варто тільки додати SP2, як кількість пам'яті відразу зменшиться.

Причина в тому, що в 32-розрядних Windows XP SP2 (а також майбутньому SP3) і Windows Vista розширення фізичних адрес є, але в той же час його нібито й немає. Причина проста і банальна - забезпечення сумісності з драйверами, написаними без урахування можливого включення РАЕ. Зупинимося на цьому трохи докладніше.

Всі програми і сама ОС працюють у віртуальних адресних просторах. Перерахунок (трансляція) ВА у фізичну відбувається не в один етап, а в два без режиму розширення фізичних адрес і в три етапи при включенні цього режиму. Після того, як в ході розробки другого пакету виправлень режим РАЕ був включений за замовчуванням, виявилося, що не всі драйвери вміють працювати в цьому режимі. Розширення фізичних адрес споконвіку (фігурально висловлюючись, звичайно) було особливістю серверних систем. Оскільки драйвери працюють з фізичними адресами, вони повинні розуміти ускладнений процес трансляції адрес при включеному РАЕ. І розробники драйверів для серверних версій це враховували.

Розробники ж драйверів, призначених для звичайних робітників і, тим більше, домашніх комп'ютерів могли і спростити собі роботу - навіщо передбачати алгоритм роботи з включеним РАЕ, якщо він не використовується? Адже без нього і програмувати менше треба, і роботи з тестування менше робити. Але якщо такий драйвер опинявся в системі з включеним розширенням фізичних адрес, то з досить високою ймовірністю він міг «порушить» управління пам'яттю системи, що призвело б у кращому випадку до не працювати, а в гіршому - пошкодження даних або збою в роботі системи (синього екрану).

Але ж для підвищення безпеки системи треба було включати в процесорі захист від виконання даних і, як наслідок, режим розширення адрес. Тому для сумісності з усіма раніше написаними для Windows XP драйверами було прийнято компромісне рішення - щоб режим РАЕ включався, додавав третій етап в процес транслювання адреси, але нічого на цьому третьому етапі залишався вірним. Фактично це означає, що розширення адресного простору не відбувається і система має ті ж чотири гігабайти фізичних адрес. А частина цих адрес, як ми пам'ятаємо, зайняті пристроями.

Висновок 3. Windows XP SP2 і Windows Vista побачити всі чотири гігабайти оперативної пам'яті (якщо вони встановлені) просто не в змозі, і змінити це не можна. Тим, хто вже витратив свої кровні гроші на чотири гігабайтних модуля залишається або змиритися, що частина їх виявиться невикористаної, або переходити на 64-розрядні версії ОС.

Зауваження. Час від часу можна побачити рада щодо збільшення пам'яті, доступної системі: додати в файл boot.ini параметр / 3GB. Насправді ця рада, як то кажуть, не з тієї опери. Цей параметр забезпечує перерозподіл віртуального адресного простору додатків між ними і системою, але ніяк не впливає на роботу з фізичною пам'яттю.

Так чи варто купувати для комп'ютера з 32-розрядної Windows чотири гігабайти пам'яті, якщо це не сервер? У загальному випадку відповідь залежить від того, чи плануєте ви незабаром переходити на 64-розрядну версію (під «незабаром» в даному випадку розуміється час до заміни комп'ютера на новий або до досить серйозної його модернізації). Якщо перехід не планується, то частина з цих чотирьох гігабайт виявиться невикористаної. Скільки саме не використовуватиметься, залежить від конфігурації обладнання, але зазвичай ця величина складає 0,75-1 Гб.

Оскільки в сучасні комп'ютери модулі пам'яті зазвичай вставляються парами, то альтернативою чотирьом гігабайтам є конфігурації 2х1 Гб або 2х1 Гб + 2х512 Мб, причому перший варіант залишає (як правило) можливість розширення, а другий дає більше пам'яті.

Але ж, як відомо, адресний простір (віртуальне), що виділяється процесу на його потреби, становить 2 Гб. Тобто переважна більшість програм не зможуть використовувати більше двох Гб ОЗУ. То чи є сенс ставити третій гігабайт? Цілком може бути, що є. Все залежить від того, скільки пам'яті потрібно запускаються одночасно завданням. Навіть якщо «важка» завдання більше двох гігабайт отримати і не зможе, вона, тим не менш, зможе використовувати всі свої два гігабайти, якщо система і інші запущені завдання візьмуть свою частку пам'яті з третього гігабайти. Та й дисковий кеш не конкуруватиме за пам'ять з цієї «важкої» завданням.

Ось тільки не варто оцінювати завантаження пам'яті за інтенсивністю роботи жорсткого диска, як це нерідко робиться. Чимало ігор розраховані на подгрузку нових даних, а не забивання ними пам'яті, і будуть активно звертатися до диска, навіть якщо пам'яті більш ніж достатньо. Втім, використання пам'яті - це тема для окремої статті.

При написанні статті використовувалося обладнання, надане компанією « Елмер », За що автор висловлює їй свою вдячність.

Частина 2: Ще раз про Windows і чотири гігабайти .

У цікавого читача вже напоготові питання: а яким чином адреси розподіляються між пристроями?
Чи можна якимось способом «зрушити» все адреси в одну суцільну купу і звільнити для ОЗУ додатково десятки або навіть сотні мегабайт адресного простору?
Значить, ця система теж працює в режимі розширення фізичних адрес?
Але чому ж тоді їй доступно лише три з невеликим гігабайти?
Так чи варто купувати для комп'ютера з 32-розрядної Windows чотири гігабайти пам'яті, якщо це не сервер?
То чи є сенс ставити третій гігабайт?

Новости

Banwar.org
Наша совместная команда Banwar.org. Сайт казино "Пари Матч" теперь доступен для всех желающих, жаждущих волнения и азартных приключений.