Чи може 32-розрядна машина ОС використовувати весь 8 ГБ оперативної пам’яті + 20 ГБ сторінки сторінки?


98

Що я розумію в 32-розрядної ОС, адреса виражається в 32 бітах, тому щонайбільше ОС може використовувати 2 32 = 4G простору пам’яті - я припускаю, що одиниця становить байти, тож 4 ​​Гб.

Чи означає це, що будь-яка машина з 32-розрядною ОС (будь то Windows або Unix) має на жорсткому диску понад 4 ГБ оперативної пам’яті + файл сторінки, наприклад, 8 ГБ оперативної пам’яті та 20 Гб сторінки сторінки, її пам’ять ніколи не буде «використана "?

Під "використаним" я маю на увазі, що збільшення оперативної пам’яті або файлу сторінки не допоможе продуктивність; Звичайно, завжди можливо, що додаток буде постійно запитувати пам'ять від ОС, але не вдається.

Аналогічно, якщо ця 32-бітна ОС має 2 ГБ оперативної пам’яті та 2 ГБ сторінки сторінки, збільшення розміру файлу сторінки не допоможе продуктивність. Це правда?


2
Як зауваження, якщо у вас більше 4 Гб оперативної пам’яті та лише 32-бітна ОС, ви можете зробити диск оперативної пам’яті. Це жорсткий диск у вашій оперативній пам’яті, і ви можете використовувати невикористовувану / неадресовану оперативну пам’ять, щоб розмістити її.
Саймон Вербеке

10
Ви не можете. Рамдиск все ще повинен бути створений через ОС, якщо ОС не може використовувати пам'ять, ви також не можете створити там. (Якщо тільки ваш біос не може створити рамковий диск, що рідко).
AVee

1
Коротка відповідь - «так». Хоча зазвичай для процесу надається 32-розрядний адресний простір для використання, сама ОС може використовувати більше, ніж це (або через банківські комутації, як у 80-х роках, або за допомогою трюків розширення адрес як PAE від Intel. Також пам’ятайте, що ви запускаєте більше, ніж по одній програмі, яка може складатися з декількох процесів (Chrome розміщує вкладки в різних процесах). А сама ОС використовуватиме пам'ять для таких речей, як кешування даних з локальних фіксованих дисків, щоб ви мали швидший доступ до даних уже б / в
rbanffy

Відповіді:


145

Що я розумію в 32-розрядної ОС, це адреса виражається в 32 бітах, тому щонайбільше ОС може використовувати 2 ^ 32 = 4 ГБ пам’яті

Найбільше, на що може звернутися процес, - 4 Гб. Ви потенційно плутаєте пам'ять з адресним простором . Процес може мати більше пам'яті, ніж адресний простір. Це абсолютно законно і досить часто зустрічається у відеообробці та інших додатках, що потребують пам'яті. Процес може виділити десятки ГБ оперативної пам’яті та поміняти його за власним бажанням у адресний простір та поза ним. Лише 2 Гбайт може одночасно зайти в адресний простір користувача .

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

Чи означає це, що будь-яка 32-розрядна ОС, будь то Windows або Unix, якщо на комп'ютері є файл RAM + сторінок на жорсткому диску більше 4 ГБ, наприклад, 8 ГБ оперативної пам’яті та 20-сторінковий файл сторінки, ніколи не буде «пам'ять витрачена»?

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

Крім того, два процеси можуть спільно використовувати неприватні сторінки пам'яті . Якщо двадцять процесів завантажують одну і ту ж DLL, всі процеси поділяють сторінки пам'яті для цього коду. Вони не поділяють адресний простір віртуальної пам’яті , вони поділяють пам’ять .

Моя думка, якщо це не зрозуміло, це те, що ви повинні перестати думати про пам’ять та адресний простір як про одне й те саме, адже вони зовсім не одне і те ж.

якщо цей 32-розрядний ОС має 2 Гб оперативної пам’яті та 2 Гб сторінки сторінки, збільшення розміру файлу сторінки не допоможе продуктивність. Це правда?

У вас п’ятдесят машин і гараж на чотири автомобілі, і 100 автостоянок вниз по вулиці. Ви збільшуєте розмір стоянки до 200 місць. У вас будь-який автомобіль стає швидшим, тому що у вас зараз 150 додаткових місць для паркування замість 50 додаткових місць для паркування?


26
Я вважаю, що ця відповідь не стосується цього питання і майже є оманливим у певних пунктах.
Ріг

48
@Rig: Чудово, я радий почути вашу конструктивну критику. Тепер ваш шанс написати кращу відповідь і показати нам такий варіант відповіді, який ви вважаєте менш оманливим і більш доречним.
Ерік Ліпперт

4
@BlueRaja: Я підозрюю, що ви плутаєте фізичну пам'ять із пам'яттю . Фізична пам'ять - це лише оптимізація, яка дозволяє швидше отримати доступ до пам'яті. Так само, як кеші процесорів - це оптимізація, яка дозволяє швидше отримати доступ до пам'яті. Пам'ять призначена для всіх цілей та цілей, простір відведений у файлі сторінки. Незалежно від того, чи дана сторінка у файлі сторінки (1) відображена на адресу віртуальної пам'яті або (2) скопійована з диска у фізичну пам'ять, не має значення для питання, виділяється вона чи ні.
Ерік Ліпперт

4
@BlueRaja: Стаття Реймонда Чена може допомогти. Він показує, як виділити 4 ГБ із файлу сторінки; це пам'ять, якою володіє процес . Звичайно, процес не може вирішити все це відразу, але він може адресувати будь-яку сторінку , зіставляючи сторінку у невикористану сторінку VM, використовуючи її на деякий час, а потім відкидаючи її. blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx
Ерік Ліпперт

3
Ця відповідь була б зрозумілішою, Еріко, якби ти чітко заявив, що Windows (та інші ОС) дозволяють "резервувати" пам'ять, фактично не маючи її у своєму віртуальному адресному просторі, а потім відповісти на очевидне запитання "то як ти адресу? ». Я думаю, що відповідь на це: "є якийсь ідентифікатор сторінки, який ви використовуєте для посилання на нього, щоб передати його у віртуальний адресний простір, а потім ви зможете адресувати його", але я не знаю, і Ваша відповідь не говорить :)
Timwi

67

Це правда, що процесор може адресувати максимум 4 Гб оперативної пам’яті. Однак поточний процесор використовує MMU ( блок управління пам'яттю ) для перекладу конкретних процесів пам'яті у фізичні адреси пам'яті.

Цей MMU використовується для всіляких різних хитрощів, від ізоляції пам'яті (процес A не може маніпулювати пам'яттю процесу B) до спільного використання пам'яті (процес A може отримати доступ до тієї ж фізичної області пам'яті, що і процес B, і таким чином може обмінюватися даними).

Хоча 32-бітний процесор підтримує лише 4 Гб оперативної пам’яті за процес, він може адресувати до 64 Гб оперативної пам’яті при використанні розширення фізичної адреси . Це дозволяє процесу A використовувати перший 4Gb пам'яті, тоді як процес B використовує наступний 4Gb. Загалом використовується більше 4 Гб фізичної пам'яті, але загальний об'єм пам'яті, який використовується одним процесом, все ще обмежений на рівні 4 Гб .

PAE підтримується в Linux з ядра версії 2.3.23 та деяких 32-бітних ароматів Windows Server, але не в 32-розрядної Windows XP, Vista або 7.

Якщо ваш процесор не підтримує PAE, ви будете обмежені 4 Гб фізичної пам'яті (або менше залежно від інших факторів).

Зверніть увагу, що ваша операційна система все одно може вилучати на диск частини файлу фізичної пам'яті (файл сторінки) незалежно від процесора, що підтримує PAE. Це гарантує можливість запуску декількох процесів, які використовують більше 4 Гбіт разом. Єдиний вплив PAE полягає в тому, чи можна зберігати 4Gb процесу B у фізичній пам'яті під час запуску процесу А.


це означає, що якщо він не підтримує, то що я сказав вище, це правильно?

10
Windows XP підтримує PAE (починаючи з SP2, я думаю), але ігнорує оперативну пам'ять понад 4 ГБ, навіть коли машина підтримує PAE; дивіться тут . Він використовується для апаратних засобів запобігання виконанню даних - біт NX / XD доступний лише у статті таблиці таблиць PAE, а не у звичайній таблиці таблиці.
Wyzard

Набір мікросхем також може бути обмежуючим фактором того, скільки пам'яті можна підтримувати / використовувати незалежно від того, яку ОС або хак ви вибрали.
Моаб

5
Додам, що причиною того, що споживчі версії 32-бітових вікон не підтримують> 4 ГБ оперативної пам’яті, полягають у тому, що значна кількість апаратних дисків не працює належним чином з такою великою кількістю пам’яті; а оскільки в той час> 4 ГБ оперативної пам’яті було надзвичайно рідкісним чином поза серверами / надвисокими робочими станціями, то більшість компаній, які підтримували драйвери, були незацікавлені в витрачанні грошей на оновлення драйверів, які використовували б лише 0,1% їх клієнтської бази.
Ден Нелі

6
@DanNeely ОС робить мати підтримку для пам'яті, вона обмежена з - за проблем з ліцензуванням . Хоча я погоджуюся, що це сторонні хаки, це лише для споживчих варіантів Windows. Серверні дистрибутиви Windows, починаючи з Windows 2000 , мали підтримку більше 4 Гб оперативної пам'яті (див. Перше посилання).
Прорив

15

Якщо говорити про 32-розрядні варіанти Windows, вони підтримували більше 4 Гб оперативної пам’яті, починаючи з варіантів Windows 2003 (і ви також можете отримати злом ядра для Windows 7, що дозволяє використовувати всю вашу оперативну пам’ять у 32-розрядному). Однак це виходить дорого, як ви окреслили в першій частині свого питання.

У 32-бітовій операційній системі розмір вказівника (адреса пам’яті) такий самий, як довжина слова ЦП, 32 біт, що дозволяє (як ви вже згадували) в пам'яті 2 ^ 32 = 4 Гб місця. Windows також використовує "віртуальну пам'ять" для підключення програм, тому для кожної програми є власний простір пам'яті.

Оскільки кожен вказівник має ширину лише 32 біти, вказівники кожного додатка можуть адресувати до 4 Гб пам'яті, навіть якщо система може підтримувати більше 4 ГБ оперативної пам’яті. Наскільки я знаю, це єдиний застереження щодо використання понад 4 ГБ оперативної пам’яті в 32-бітній операційній системі. Загалом, у вас може бути багато додатків, які використовують більше 4 ГБ оперативної пам’яті разом, але будь-який окремий процес може виділити / отримати доступ до 4 ГБ.


Повертаючись до вашого питання, скажімо, у вас є програма, яка використовує 2 Гб оперативної пам’яті. Якщо у вас є 10 екземплярів цієї програми, це 20 Гб. Буде витрачено всі 8 ГБ оперативної пам’яті, а також ще 12 Гб файлу сторінки. Так, так, у 32-бітних операційних системах використовувати цю пам'ять більш ніж можливо.

якщо цей 32-розрядний ОС має 2 Гб оперативної пам’яті та 2 Гб сторінки сторінки, збільшення розміру файлу сторінки не допоможе продуктивність. це правда?

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


З 4 ГБ адресного простору, який отримує кожен процес, лише 2 ГБ фактично доступні для використання програмою; інші 2 Гб зарезервовані для використання ядром. Параметр завантаження / 3 Гб може дозволити деяким програмам використовувати більше оперативної пам’яті.
Wyzard

1
@Breakthrough: "Збільшення розміру файлу сторінки ніколи не підвищить продуктивність". Я не думаю, що це правда. Наприклад, якщо є більше свопів, ОС може більш агресивно поміняти невикористані дані програми та використовувати вільну ОЗУ, наприклад, для кешування диска. У деяких конфігураціях це може забезпечити кращі показники. На сервері ServerFault є хороша відповідь на те, чому важливий файл сторінки, який стосується цих питань: serverfault.com/questions/23621/…
sleske

2
Будьте уважні до заголовків, таких як "Збільшення розміру файлу сторінки ніколи не підвищить продуктивність" , цілком можливо, що файл сторінки, який є занадто малим, може призвести до більшого обстрілу диска, ніж у файлах більшої сторінки! Дивіться відповіді та коментарі до цього питання .
Марк Бут

1
@sleske Хороший момент, я оновив його, щоб бути більше "зазвичай не" типу речі. Хоча я згоден, це може призвести до величезної зміни на сервері, для більшості людей справа, яку я намагався перейти, полягає в тому, що їм було б краще просто отримати більше оперативної пам’яті (оскільки, коли ви використовуєте пейджинг, продуктивність майже настільки ж повільна як може отримати).
Прорив

-1

Коли процесор вважається 32-розрядним, це означає, що він може працювати з 32-бітовими номерами, використовуючи одну інструкцію. Це мало стосується ширини шини адреси, яка в архітектурі Intel є 36-розрядною з моменту випуску Pentium Pro в 1995 році.

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


Це неправильно, як вказувалося в інших попередніх відповідях вище.
ChrisInEdmonton

Не могли б ви вказати один конкретний факт, що я помилився?
Дмитро Григор’єв

1
Один процес може використовувати більше 4 Гб. Зокрема, попередні відповіді вказують на те, що "Процес може мати більше пам'яті, ніж адресний простір".
ChrisInEdmonton

2
Дивіться, наприклад, blog.superuser.com/2011/04/23/… Тепер, звичайно, ви не можете використовувати більше 4 Гб одночасно, але один процес може скасувати карту та перезавантажувати пам'ять, тому можна використовувати більше 4 Гб в одному процесі, є лише трохи бухгалтерії. Ця публікація в блозі скоріше для Windows. Я запускав сервери баз даних з виділеною пам'яттю> 4 Гб, для 32-розрядної установки Linux. Сьогодні, звичайно, ви просто запустили 64-розрядний Linux.
ChrisInEdmonton

1
Гаразд, мої вибачення. Я не думав про можливість mmapдодаткової пам’яті.
Дмитро Григор’єв
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.