Ще раз про Windows і чотири гігабайти

Минуло кілька років з тих пір, як була написана стаття « Чотири гігабайти пам’яті – недосяжна мета? », а запитань, чому не бачить всі чотири гігабайти, менше не стало. До числа шукає відповіді додалися й володарі 64-розрядних систем, яких ця проблема, здавалося б, не повинна була торкнутися. І стало ясно, що пора писати нову статтю на цю ж тему. Як і раніше, мова піде тільки про операційні системи , причому в основному клієнтських, тобто XP, Vista, 7 і прийдешньої 8. В деяких випадках навмисно будуть використовуватися кілька спрощені опису тих чи інших аспектів. Це дасть можливість зосередитися на предметі даної статті, не вдаючись у зайві подробиці, зокрема, внутрішнього устрою процесорів і наборів мікросхем (чіпсетів) для системних плат. Рекомендуємо попередньо прочитати зазначену вище статтю, так як не всі, сказане в ній, буде повторено тут.

Хоча теоретично 32-розрядної системі доступні (без додаткових хитрувань) до 4 ГБ фізичної пам’яті, 32-розрядні клієнтські версії не можуть використовувати весь цей обсяг через те, що частина адрес використовується пристроями комп’ютера. Ту частину ОЗУ, адреси якої збігаються з адресами пристроїв, необхідно відключати, щоб уникнути конфлікту між ОЗУ і пам’яттю пристрою – наприклад, відеоадаптера.

Якщо оперативна пам'ять в адресах, що використовуються пристроями, не відключена, виникає конфлікт

Рис. 1. Якщо оперативна пам’ять в адресах, що використовуються пристроями, не відключена, виникає конфлікт

Оперативна пам’ять заповнює адреси, починаючи з нульового, а пристроїв, як правило, відводяться адреси в четвертому гігабайті. Поки розмір ОЗУ не перевищує двох-трьох гігабайт, конфлікти не виникають. Як тільки верхня межа встановленої пам’яті входить в ту зону, де знаходяться адреси пристроїв, виникає проблема: з одного й того ж адресою знаходяться і осередок оперативної пам’яті, і осередок пам’яті пристрою (того ж відеоадаптера). У цьому випадку запис даних в пам’ять призведе до спотворення зображення на моніторі і навпаки: зміна зображення – до спотворення змісту пам’яті, тобто програмного коду або даних (скажімо, тексту в документі). Щоб конфлікти не виникали, операційній системі доводиться відмовлятися від використання тієї частини ОЗУ, яка перекривається з адресами пристроїв.

В середині дев’яностих років минулого століття для розширення доступного обсягу ОЗУ була розроблена технологія PAE (Physical Address Extension), що збільшує число ліній адреси з 32 до 36 – тим самим максимальний обсяг ОЗУ виростав з 4 до 64 ГБ. Ця технологія спочатку призначалася для серверів, проте пізніше з’явилася і в клієнтської Windows XP. Деякі особливості реалізації цієї технології в сучасних контролерах пам’яті дають можливість не тільки використовувати PAE за її прямим призначенням, а й «перекидати» пам’ять в інші адреси. Таким чином, частина пам’яті, яка заради запобігання конфліктів не використовується, може бути переміщена в старші адреси, наприклад в п’ятий гігабайт – і знову стати доступною системі.

В обговоренні першої статті було висловлено зауваження, що некоректно ототожнювати наявність в контролері пам’яті системної плати підтримки PAE – і здатність плати переадресовувати пам’ять; що це цілком можуть бути речі, один з одним не пов’язані. Однак практика показує, що в «залізі» для настільних систем це поняття взаємозамінні. Наприклад, Intel в документації до свого набору мікросхем G35 ні слова не говорить про можливість (реально існуючої) переадресації пам’яті, зате підкреслює підтримку РАЕ. А не підтримує PAE набір i945 не має і переадресації пам’яті. З процесорами AMD64 і останніми моделями процесорів Intel справи ще простіше: у них контролер пам’яті вбудований в процесор, і підтримка PAE (і ОЗУ розміром більше 4 ГБ) автоматично має на увазі підтримку переадресації.

Переадресація

Рис. 2. Переадресація

Рисунок досить умовний, переадресація зовсім не обов’язково виконується блоками саме по одному гігабайту, дискретність може бути іншою і визначається контролером пам’яті (який, нагадаємо, є або частиною обладнання системної плати, або частиною процесора). У програмі BIOS Setup комп’ютера зазвичай буває настройка, що дозволяє чи забороняє переадресацію. Вона може мати різні найменування – наприклад, Memory remap, Memory hole, 64-bit OS тощо. Її назва найкраще з’ясувати в керівництві до системної плати. Необхідно відзначити, що якщо використовується 32-розрядна система, то на деяких системних платах, переважно досить старих, переадресацію необхідно відключати – в іншому випадку обсяг доступного системі ОЗУ може зменшитися.

За замовчуванням у Windows XP режим РАЕ був відключений, оскільки реальної потреби в ньому не було (нагадаємо, що в 2001 році типовий обсяг пам’яті настільного комп’ютера становив 128-256 МБ). Тим не менше, якщо його включити, то ХР могла б використовувати всі чотири гігабайти пам’яті – за умови, звичайно, що системна плата підтримувала б РАЕ. Але, повторимо, реальної потреби включати цей режим в ті роки не було. При бажанні читач може для проби встановити на сучасний комп’ютер Windows XP або Windows XP SP1 (робити це для роботи, звичайно, не варто), включити режим PAE і своїми очима переконатися, що системі доступні чотири гігабайти оперативної пам’яті.

У 2003 році «Майкрософт» почала розробляти другий пакет виправлень для Windows XP (що вийшов в 2004 році), оскільки зіткнулася з необхідністю суттєво знизити число вразливостей в компонентах ОС. Одним із шляхів було використання запобігання виконання даних (Data Execution Prevention, DEP) – набору програмних і апаратних технологій, що дозволяють виконувати додаткові перевірки вмісту пам’яті і в ряді випадків запобігати запуск шкідливого коду. Ці перевірки виконуються як на програмному рівні, так і на апаратному (при наявності відповідного процесора). AMD назвала цю функцію процесора «захист сторінок від виконання» (no-execute page-protection, NX), а Intel використовувала термін «заборона на виконання» (Execute Disable bit, XD).

Проте використання такої апаратної захисту вимагає перекладу процесора в режим PAE, тому Windows XP SP2 при виявленні відповідного процесора стала включати цей режим за замовчуванням. І ось тут «Майкрософт» зіткнулася з досить серйозною проблемою: виявилося, що не всі драйвери можуть працювати в режимі PAE. Спробуємо пояснити цю особливість, не надто заглиблюючись в пристрій процесорів і механізми адресації.

У Windows використовується так звана плоска модель пам’яті. Тридцять два розряди адреси забезпечують звернення до простору розміром чотири гігабайти. Таким чином, кожному осередку ОЗУ або комірці пам’яті іншого пристрою відповідає певний адресу, і ніяких двозначностей тут бути не може. Включений режим PAE дає можливість використовувати 36 розрядів адреси і збільшити кількість елементів пам’яті в 16 разів. Але ж система команд процесора залишається тією ж самою і може адресувати тільки 4000000000 (двійкових) байтів! І ось, щоб забезпечити можливість доступу до будь-якого з 64 мільярдів байтів, вказавши лише 32 розряду адреси, в процесорі включається додатковий етап трансляції адрес (ті, кого цікавлять подробиці, можуть звернутися до спеціальної літератури – наприклад, книзі Руссиновича і Соломона «Внутрішнє пристрій Windows »). В результаті 32-розрядний адресу в програмі може вказувати на будь-який з байтів в 36-розрядному просторі.

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

Однак оскільки історично склалося так, що до того часу в клієнтських комп’ютерах PAE не використовувався, деякі компанії не вважали за потрібне підтримувати цей режим в написаних ними драйверах. Адже обладнання, яке вони випускали (звукові плати, наприклад), не призначалося для серверів, і драйвери не мали серверної версії – так навіщо без потреби ці драйвери ускладнювати? Тим більше, що для тестування роботи в режимі PAE раніше було потрібно встановлювати серверну ОС і використовувати серверне обладнання (системні плати для настільних комп’ютерів лише відносно недавно стали підтримувати PAE). Так що розробникам драйверів простіше і вигідніше було просто забути про цей PAE та забезпечити працездатність на звичайних клієнтських комп’ютерах зі звичайними персональними, а не серверними ОС.

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

А необхідність підвищення безпеки ХР компанія «Майкрософт» відчувала дуже гостро. Втім, міркування на тему, чому ми побачили Windows XP SP2 і не побачили чогось на зразок Windows XP Second Edition, виходять за рамки цієї статті.

Головне, що нас цікавить, це те, що для забезпечення сумісності з погано написаними драйверами функціональність PAE в SP2 для Windows XP була обрізана. І хоча сам цей режим існує і, більш того, на комп’ютерах з сучасними процесорами включається за замовчуванням, ніякого розширення адресного простору він не дає, просто передаючи на вихід ті ж адреси, які були подані на вхід. Фактично система поводиться як звичайна 32-розрядна без PAE.

Те ж саме поведінка була успадкована Windows Vista, а потім перейшло до Windows 7 і майбутньої Windows 8. Звичайно, 32-розрядних. Причина, по якій ця поведінка не змінилося, залишилася тією ж самою: забезпечення сумісності. Тим більше що необхідність вигадувати частки гігабайти відпала: ті, кому потрібні великі обсяги пам’яті, можуть використовувати 64-розрядні версії ОС.

Іноді можна почути запитання: якщо саме цей обрізаний режим PAE заважає системі бачити всі чотири гігабайти – так, може, відключити його зовсім, щоб не заважав, і, вуаля, системі стануть доступні 4 ГБ? На жаль, не стануть: для цього потрібно як раз наявність PAE, притому повноцінного. Інший не так уже й рідко задається питання звучить так: якщо пристрої дійсно заважають системі використовувати всю пам’ять і резервують її частину під свої потреби, то чому ж вони нічого не резервували, коли в комп’ютері стояло два гігабайти оперативної пам’яті?

Повернемося до першого малюнку і розглянемо ситуацію докладніше. Насамперед відзначимо, що потрібно чітко розрізняти два поняття: розмір адресного простору і обсяг ОЗУ. Змішання їх воєдино перешкоджає розумінню суті питання. Адресний простір – це набір усіх існуючих (до яких може звернутися процесор і інші пристрої) адрес. Для процесорів сімейства i386 це 4 гігабайти в звичайному режимі і 64 ГБ з використанням PAE. У 64-розрядних систем розмір адресного простору становить 2 ТБ.

Розмір адресного простору ніяк не залежить від обсягу ОЗУ. Навіть якщо витягнути з комп’ютера всю оперативну пам’ять, розмір адресного простору не зміниться ні на йоту.

Адресний простір може бути реальним, в якому працює сама операційна система, і віртуальним, яке ОС створює для працюючих в ній програм. Але особливості використання пам’яті в Windows будуть описані в іншій статті. Тут же відзначимо тільки, що до реального адресного простору програми доступу не мають – за реальними адресами можуть звертатися тільки сама операційна система та драйвери.

Розглянемо, як же в комп’ютері використовується адресний простір. Відразу підкреслимо, що його розподіл виконується обладнанням комп’ютера («залізом») і операційна система в загальному випадку не може на це вплинути. Є тільки один спосіб: змінити настройки обладнання за допомогою технології Plug & Play. Про неї багато говорили в середині 90-х років минулого століття, але тепер вона сприймається як щось само собою зрозуміле, і все збільшується число людей, які про неї навіть не чули.

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

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

Раз вже про це зайшла мова, зауважимо, що в ряді системних плат є налаштування під назвою «P & P OS». Якщо ця настройка вимкнена (No), то системна плата виконує розподіл адрес для всіх пристроїв. Якщо включена (Yes), то розподіл пам’яті виконується тільки для пристроїв, необхідних для завантаження, а налаштуванням інших пристроїв буде займатися операційна система. У разі Windows XP і більш нових ОС цього сімейства дану настройку рекомендується включати, оскільки в більшості випадків Windows виконає необхідні конфігурації принаймні не гірше, ніж BIOS.

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

Коли в комп’ютер вставлено деяка кількість ОЗУ, то адресний простір для нього виділяється знизу вгору, починаючи з нульового адреси і далі в бік збільшення адрес. Адреси пристроїв, навпаки, виділяються у верхній області (у четвертому гігабайті) в сторону зменшення адрес, але не обов’язково суміжними блоками – частіше, навпаки, несуміжними. Як тільки зони адрес, що виділяються для ОЗУ (з одного боку) і для пристроїв (з іншого боку), стикнуться, стає можливим конфлікт адрес, і обсяг використовуваного ОЗУ доводиться обмежувати.

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

Іноді задають питання: а чи можна вплинути на розподіл адрес, щоб зрушити всі пристрої в адресному просторі якомога вище і зробити якомога більше пам’яті доступної системі. У загальному випадку без втручання в конструкцію чи мікропрограми самих пристроїв це зробити неможливо. Якщо ж руки таки сверблять, а часу не шкода, можна спробувати наступний метод: в BIOS Setup включити настройку «PnP OS» (вона може або зовсім відсутніми або називатися по-іншому), щоб адреси для більшості пристроїв розподіляла Windows, а потім перевстановлювати драйвери, використовуючи відредаговані файли inf з віддаленими областями пам’яті, які, на ваш погляд, розташовані занадто низько.

В інтернеті можна знайти різні поради, які, нібито, повинні дати системі можливість використовувати всі чотири гігабайти, засновані на примусовому включенні PAE. Як легко зрозуміти з викладеного, ніякого виграшу це дати не може, оскільки не має значення, чи включений PAE автоматично або примусово – працює цей режим в обох випадках однаково.

Може виникнути також питання: а що буде, якщо встановити відеоадаптер з чотирма гігабайтами пам’яті. Адже тоді виходить, що система залишиться зовсім без ОЗУ і працювати не зможе. Насправді нічого страшного не станеться: відеоадаптери вже досить давно використовують ділянку адресного простору розміром 256 МБ, і доступ до всього обсягу пам’яті відеоприскорювача здійснюється через вікно такого розміру. Так що більше 256 мегабайт відеоадаптер не відніме. Можливо, в якихось моделях розмір цього вікна збільшено вдвічі або навіть учетверо, але автору в руки вони поки не потрапляли.

64 розряди

Отже, з 32-розрядними системами ми розібралися. Тепер перейдемо до 64-розрядних.

Ось вже тут-то, здавалося б, ніяких підводних каменів бути не повинно. Система може використовувати куди більше чотирьох гігабайт, так що, на перший погляд, досить увіткнути в системну плату пам’ять і встановити систему. Але виявляється, не все так просто. Перш за все, відзначимо, що спеціального устаткування, призначеного тільки для 64-розрядних систем, знайти не вдасться (ми говоримо про звичайні ПК). Будь системна плата, мережева плата, відеоадаптер і пр., що працюють в 64-розрядної системі, повинні з однаковим успіхом працювати в 32-розрядної.

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

Не підтримують переадресацію системні плати на наборах мікросхем Intel до 945 включно. Новими їх, звичайно, не назвеш, але комп’ютери на їх базі ще існують і використовуються. Так от, на таких платах і 64-розрядна, і 32-розрядна системи зможуть побачити однакову кількість пам’яті, і воно буде менше 4 ГБ. Чому менше – описано вище.

З 64-розрядними процесорами AMD справа йде простіше: у них контролер пам’яті вже досить давно вбудований в процесор, і переадресація відсутній тільки в застарілих моделях. Всі процесори для 939-контактного гнізда й новіші підтримують більше 4 ГБ і, відповідно, вміють виконувати переадресацію пам’яті. Те ж саме відноситься до процесорів Intel сімейств Core i3, i5, i7.

Втім, і тут може бути заковика: якщо на системній платі не виконана розводка додаткових адресних ліній, то не буде і можливості звернутися до переадресований пам’яті. А деякі молодші моделі системних плат для здешевлення випускають саме такими, так що необхідно дивитися опис конкретної системної плати.

І тут нас чекає сюрприз, подібний до того, з яким ми стикаємося в 32-розрядної системі: використання адресного простору для роботи пристроїв може обмежити обсяг пам’яті, доступний Windows.

Наприклад, якщо системна плата підтримує до 8 ГБ оперативної пам’яті (скажімо, що використовує набір мікросхем G35), і встановити всі ці 8 ГБ, то використовуватися будуть тільки ? 7-7,25 ГБ. Причина полягає в наступному: на такій системній платі розведені 33 лінії адреси, що, з точки зору виробника, цілком логічно – навіщо ускладнювати конструкцію, якщо більше 8 ГБ плата все одно не підтримує? Тому навіть якщо контролер пам’яті зможе перекинути невикористовуваний ділянку ОЗУ в дев’ятий гігабайт, звернутися до нього все одно буде неможливо. Для цього буде потрібно 34-розрядний адрес, який фізично не можна сформувати на 33-розрядної системної шини. Точно так же на платах, що підтримують 16 ГБ, Windows зможе використовувати ? 15-15,25 ГБ і так далі.

З переадресацією пов’язаний ще один маловідомий нюанс. Обмеження розміру пам’яті, що виконується в програмі msconfig (або відповідними настройками конфігурації завантаження) відноситься не до власне величиною пам’яті, а до верхньої межі адрес використовуваної пам’яті.

Эта настройка ограничивает верхнюю границу адресов, а не размер памяти

Рис. 3. Ця установка обмежує верхню межу адрес, а не розмір пам’яті

 

Тобто якщо задати цю величину рівній 4096 МБ, то пам’ять, розташована вище цієї межі (переадресовані в п’ятий гігабайт, наприклад), використовуватися не буде, і фактично обсяг пам’яті буде обмежений приблизно трьома гігабайтами. Цю особливість в деяких випадках вдається використовувати для діагностики того, працює переадресація чи ні. Наприклад, автору зустрівся випадок, коли на ноутбуці Windows використовувала 3,75 ГБ з чотирьох, і було незрозуміло: чи то не працює переадресація, чи то пам’ять використовується на якісь потреби. Установка прапорця і обмеження розміру пам’яті чотирма гігабайтами привели до того, що стали використовуватися тільки 3,25 ГБ. З цього можна зробити висновок, що переадресація працювала, а чверть гігабайти, отже, використовувалася для відеоадаптера або якихось інших цілей.

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

Автором статті являється MS MVP — Windows Expert-IT Pro

Обережно: реклама!

Схожі публікації


Сусідні публікації:
Ви можете залишити коментар. Посилання заборонено.

Коментувати

%d блогерам подобається це: