Чому Windows х86 бачить менше 4 ГБ оперативної пам'яті

  1. Адресний простір під потреби обладнання
  2. Конфлікт адрес фізичної пам'яті і пристроїв
  3. Як повністю задіяти 4 гігабайти фізичної пам'яті в Windows x86

Привіт шановні читачі блогу www.ithabits.ru. Продовжуємо наше захоплююче дослідження особливостей роботи 32-бітових операційних систем з оперативною пам'яттю великого обсягу.

Минулого разу ми вже повністю переключилися на системи від Microsoft і з'ясували, що всі призначені для користувача версії x86, починаючи з Windows XP SP2, не можуть використовувати фізичну пам'ять більше 4-гігабайт через встановленого в ядрі обмеження. Ми знайшли пояснення Microsoft, що це обмеження було зроблено для того, щоб уникнути нестійкої роботи драйверів пристроїв, написаних без підтримки режиму PAE (Physical Address Extension).

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

Перейдемо від теорії до практики і на реальному прикладі покажемо, чому на самому початку ми визначили кордон «великий пам'яті» для 32-розрядних операційних систем на рівні близько 3, а не 4 ГБ.

Допоможе нам у цьому ноутбук Acer з 4 ГБ оперативної пам'яті і 32-бітної Windows 7 Professional.

Подивимося, скільки пам'яті бачить windows 7, і що говорить про використання фізичної пам'яті в цьому комп'ютері сама операційна система>

Ось це так! Якщо вірити тому, що ми бачимо, а не вірити, начебто, підстав поки немає, то виходить, що 1,51 ГБ - "гроші на вітер".

Як же так? А все дуже просто.

Адресний простір під потреби обладнання

Подивимося ще кілька звітів. Запустимо "Диспетчер завдань", потім "Монітор ресурсів" і відкриємо вкладку "Пам'ять">

Ну ось, власне, і готову відповідь на питання про використання фізичної пам'яті - скільки пам'яті бачить windows 7, або куди зникли півтора гігабайти фізичної пам'яті. Вони зарезервовані під потреби обладнання.

Ні, не так. Під потреби обладнання зарезервована НЕ пам'ять, а 1,5 ГБ адресного простору в інтервалі 4 ГБ. Так як одне і теж адресний простір не може бути одночасно використано і пристроями і пам'яттю комп'ютера через неминуче конфлікту, "зайвої" фізичної пам'яті стало просто нікуди подітися і вона виявилася недоступна.

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

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

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

Конфлікт адрес фізичної пам'яті і пристроїв

Деякий час назад реально з'явилися клієнтські комп'ютери з 3 - 4 гігабайтами оперативної пам'яті (зараз то цим вже нікого не здивуєш) і адреси оперативної пам'яті і пристроїв "зустрілися" і перетнулися. Ось так умовно можна уявити картину розподілу адресного простору і використання фізичної пам'яті для комп'ютера з встановленими 4 гігабайтами оперативної пам'яті>

Червона зона в адресному просторі, зайнятому пристроями, відображає конфлікт, який завжди вирішується не на користь фізичної пам'яті - це реальні втрати, ті самі 1,5 ГБ для нашого ноутбука.

Величина "втрат" залежить від того, як багато фізичної пам'яті встановлено в комп'ютері, і яке адресний простір резервують під себе пристрої. На різних комп'ютерах вона буде різною. Наприклад, на моєму настільному комп'ютері під потреби обладнання резервується в два рази менше - близько 0,75 ГБ, але так як фізичної пам'яті встановлено 6 ГБ, то втрати в 32-бітної Windows складуть вже приблизно 2, 7 ГБ, тобто майже половину ( !)

Частково скористаємося методикою, описаної в класичній статті Марка Руссиновича « Pushing the Limits of Windows: Physical Memory «, І зробимо дві речі, - вони нам стануть в нагоді згодом. Скористаємося маленької діагностичної утилітою MemInfo від Alexa Ionescu. Запустимо її з правами адміністратора на нашому ноутбуці з ключем -r і подивимося як використовується фізична пам'ять>

А тепер відкриємо "Диспетчер пристроїв" в "Керування комп'ютером". Перемкнемо "Вид" на "Ресурси по типу" і відкриємо блок "Пам'ять">

Порівнюємо верхню межу фізичної пам'яті "9F800000", певну утилітою MemInfo, з нижньою межею діапазону адрес, зарезервованих пристроями. У нашому випадку це "A0000000" для відеокарти AMD Radeon HD. Все сходиться. Є ще вікно в нижній частині в діапазоні 640 КБ - 1 МБ. Як не важко здогадатися, це атавізм, який прийшов до нас від 16-розрядного процесора 8086 і ДОС.

Такі от справи в "класичних" 32-розрядних системах. У нашому випадку система не є "класичною" через включеного режиму PAE, але виглядає абсолютно так само завдяки Microsoft-івської обмеження. Очевидно, що задіяти в таких системах повністю 4 ГБ оперативної пам'яті неможливо в принципі.

Microsoft, деяким чином, вводить користувачів в оману, декларуючи підтримку 4 гігабайт оперативної пам'яті. Насправді, як ми вже зрозуміли, система не може задіяти всю пам'ять через те, що адресний простір обмежений зверху "FFFFFFFF" (4 ГБ), а саме це і робить Microsoft не дивлячись на те, що процесор може адресувати незрівнянно більше і сама ОС давно підтримує PAE. Одну з найбільш ймовірних причин по якій це було зроблено ми розглянули в минулий раз.

Як повністю задіяти 4 гігабайти фізичної пам'яті в Windows x86

По-хорошому, для того, щоб продемонструвати, як можна повернути "втрачену" пам'ять, потрібно встановити на нашому ноутбуці Linux з ядром PAE або серверну 32-розрядної версії Windows, причому таку, для якої заявлена ​​підтримка більше 4 ГБ пам'яті. Це, наприклад, Windows Server 2003 або 2008 року в редакції Enterprise. Робити мені ні першого, ні другого, по правді кажучи, зовсім не хочеться.

Марк Руссинович використовував для аналогічних цілей 64-розрядну ОС. Ми підемо іншим шляхом. Для цього, правда, доведеться вступити не зовсім чесно по відношенню до Microsoft - ми просто знімемо в ядрі обмеження на 4 гігабайти оперативної пам'яті. Як це зробити можна прочитати тут .

Робимо і дивимося, що вийшло>

Як бачимо, "загублена" пам'ять відразу знайшлася. Ще раз відкриємо монітор ресурсів>

Тут Windows намагається ввести нас в оману коли говорить, що тепер під обладнання зарезервовано всього 138 Мбайт. Я не буду ще раз показувати карту розподілу пам'яті пристроїв з "Диспетчер пристроїв" в силу того, що зовсім нічого не змінилося - всі пристрої залишилися на своїх місцях в діапазоні адрес між "A0000000" і "FFFFFFFF". Тобто, насправді сірим кольором монітор ресурсів показує не розмір адресного простору, зарезервованого під потреби пристроїв, а сумарний обсяг "втраченої" пам'яті. Чому "сумарний" стане ясно, коли ми перейдемо до комп'ютера з об'ємом встановленої фізичної пам'яті більше 4 ГБ.

Подивимося діапазони зареєстрованої фізичної пам'яті за допомогою утиліти MemInfo>

Подивимося діапазони зареєстрованої фізичної пам'яті за допомогою утиліти MemInfo>

Бачимо, що внизу додався новий діапазон розміром 1,4 ГБ. Це і є наша "втрачена" пам'ять. Через те, що ми продовжуємо оперувати 32-х розрядними адресами, вийшов, як би, конфлікт. Насправді ніякого конфлікту немає в силу того, що додати діапазон фізичних адрес лежить вище "FFFFFFFF". Спробуємо графічно зобразити те, що вийшло після того, як ми зняли 4-гігабайтний обмеження>

Спробуємо графічно зобразити те, що вийшло після того, як ми зняли 4-гігабайтний обмеження>

"Розумний" чіпсет і BIOS ноутбука перенесли конфліктну частину фізичної пам'яті вище 4 Гбайтное кордону. Завдяки цьому і працює режиму PAE, цю ділянку фізичної пам'яті став доступний операційній системі.

Тут не зайвим буде зазначити, що для того, щоб "втрачена" пам'ять могла повернутися, потрібен не тільки процесор з підтримкою PAE, але і материнська плата, яка, по-перше, підтримує більше 4 ГБ ОЗУ, по-друге, вміє переміщати адресні блоки фізичної пам'яті, що конфліктують з обладнанням, вище "FFFFFFFF". В BIOS з приводу останнього навіть може бути окрема настройка, щось типу "Memory Remapping". У використаному мною ноутбуці я такого налаштування не знайшов - мабуть вибір Enabled / Disabled відбувається в ньому автоматично.

Підводимо проміжні підсумки:

32-бітові клієнтські операційні системи Microsoft можуть працювати з усією встановленої в системі фізичної пам'яттю. У тому, що це дійсно так, ми переконаємося в заключній публікації на цю тему на прикладі комп'ютера з 6 ГБ оперативної пам'яті.

Як же так?

Новости