Почему 32-разрядная ОС поддерживает 4 ГБ ОЗУ?

Просто прочитав несколько заметок в лекции Purdue об ОС, и он говорит:

Программа видит память как массив байтов, который идет от адреса 0 до 2^32-1 (от 0 до 4 ГБ-1).

Почему 4 ГБ?


person Blankman    schedule 13.07.2009    source источник
comment
4 ГБ — это теоретический максимум памяти, который вы можете использовать с 32-разрядной ОС. Практически вы не можете использовать все 4 ГБ памяти (возможно, только 3,5 ГБ), потому что вам также нужно некоторое адресное пространство для других аппаратных компонентов, таких как: процессор, жесткий диск, графическая карта и т. д.   -  person Alexander    schedule 13.07.2009
comment
Вопрос из темы некорректен. 32-битная ОС может поддерживать больше оперативной памяти; он просто увидит 4 ГБ за раз.   -  person liori    schedule 13.07.2009
comment
Технически PAE может дать вам более 4 ГБ.   -  person Cole Johnson    schedule 03.06.2013


Ответы (13)


Поскольку 32 бита могут представлять числа до 232 – 1 = 4 294967295 = 4 ГиБ – 1, и, следовательно, адресовать до 232 отдельных байтов, что составляет 4 ГиБ, тогда .

Однако есть способы обойти это. Например, при использовании PAE даже 32-разрядная операционная система может поддерживать больший объем памяти. Однако исторически это чаще всего использовалось на серверах. Кроме того, несерверные SKU Windows не поддерживают его. Однако сейчас все это спорно, учитывая, что 64-битные процессоры, операционные системы и поддержка драйверов являются обычным явлением.

person Joey    schedule 13.07.2009
comment
Я думаю, что эта штука с гибибайтами так же бессмысленна, как и спорить, является ли Плутон планетой (кстати, так и есть) - person Tamas Czinege; 13.07.2009
comment
GiB принадлежит slashdot и википедии. Остальной мир использует ГБ (независимо от того, что говорит комитет). - person Greg D; 13.07.2009
comment
Когда говорят, что остальной мир не использует его одинаково, вряд ли это хорошо, Грег. - person xyz; 13.07.2009
comment
Учитывая, что этот форум дает ответы на технические вопросы, я считаю, что ответы должны быть точными. Гига — это префикс системы СИ с особым значением. 4 гигабайта — это 4 000 000 000 байт, что не равно 2³². - person Greenstone Walker; 06.05.2013
comment
@Life: 2³¹ + 1 равно 2 147 483 649. - person Joey; 23.03.2014

Потому что каждый байт памяти должен иметь адрес. В 32-битной операционной системе адрес имеет длину 32 бита; таким образом, существует 2 ^ 32 возможных адреса, что означает, что 2 ^ 32 байта = 4 ГБ.

person mipadi    schedule 13.07.2009
comment
Потому что каждый байт памяти должен иметь адрес. - только в системе с байтовой адресацией, разумеется. На платформе с адресацией по словам у вас может быть вдвое больше памяти... - person Vicky; 13.07.2009
comment
или больше, в зависимости от размера слов вашей машины - person tialaramex; 17.07.2009
comment
Можете ли вы объяснить мне, почему 2 ^ 32 адреса означают 2 ^ 32 байта? Спасибо. - person hqt; 27.04.2020
comment
@hqt: в основных случаях каждый байт имеет адрес, поэтому количество адресов == количеству байтов. - person mipadi; 27.04.2020

Все говорят, что 2 ^ 32 = 4 ГБ, и это правильно. На всякий случай, вот как мы туда попали:

32-битная машина использует 32 бита для адресации памяти. Каждый бит имеет значение 0 или 1. Если у вас есть 1 бит, у вас есть два возможных адреса: 0 или 1. Двухбитная система (каламбур) имеет четыре возможных адреса: 00 = 0, 01 = 1, 10 = 2, 11=3. 2^2=4. Три бита имеют 8 возможных адресов: 000=0, 001=1, 010=2, 011=3, 100=4, 101=5, 110=6 и 111=7.

Каждый бит удваивает потенциальное адресное пространство, поэтому 2^n говорит вам, сколько адресов вы используете для данного количества битов. 2^1 = 2, 2^2 = 2*2 = 4, 2^3 = 2*2*2 = 8 и т. д.

К тому времени, когда вы доберетесь до 32 бит, вы получите 4 ГБ.

person Chris Arguin    schedule 13.07.2009
comment
Верно! 2^32-1 — это сумма геометрических последовательностей. - person Life; 26.03.2014

Если у вас 4-битная система, это означает, что адрес для каждого байта состоит из 4 двоичных цифр, вероятность всех ваших адресов будет варьироваться от 0000 до 1111, что равно 2^4 = 16 (2, потому что есть либо 0 или 1), с четырьмя битами можно создать 16 разных значений нулей и единиц, если у вас есть 16 разных адресов. каждый представляет byte, тогда у вас может быть максимум 16 bytes

4-битная система будет выглядеть так:

введите описание изображения здесь

Для 32-битной системы максимальное значение равно 2^32 = 4294967292 bytes.

person Mina Gabriel    schedule 26.10.2016

4 ГБ = 2^32 байта.

person ceejayoz    schedule 13.07.2009

2 ^ 32 = 4 * 1024 * 1024 * 1024

Это в байтах и ​​есть определение 4 ГБ. Другими словами, 32-битный регистр в качестве указателя памяти может адресовать 4 ГБ памяти и не более.

person David M    schedule 13.07.2009

На самом деле это не так просто, как 2^32 = 4294967296 байт. Вы видите, что в защищенном режиме x86 с включенным пейджингом (то есть, что вы получаете при использовании любой современной ОС) вы не обращаетесь к ячейкам памяти напрямую, даже несмотря на то, что механизм трансляции пейджинга прозрачен для клиентских приложений.

Из логического 32-битного адреса памяти при использовании 4K страниц:

  • биты 22-31 относятся к каталогу страниц
  • биты 12-21 относятся к таблице страниц
  • биты 11-0 относятся к смещению на странице размером 4096 байт.

Как видите, у вас есть 2^10 (1024) каталогов страниц, в каждом каталоге страниц у вас есть 2^10 таблиц страниц, и каждая страница имеет длину 2^12 (4096) байт, следовательно, 2^32 = 4294967296 байт. Ширина шины памяти удобно равна разрядности процессора, но это совсем не обязательно. Фактически, более современные процессоры x86 поддерживают PAE, что позволяет адресовать более 4 ГБ (или ГиБ) даже в 32-битном режиме.

person Tamas Czinege    schedule 13.07.2009
comment
PAE не позволяет вам адресовать более 4 ГиБ, за исключением случаев, когда рассматриваемый вы работает в режиме супервизора и считает, что переписывание таблицы страниц между обращениями по-прежнему представляет собой адресацию, в какой момент вы могли бы почти утверждать, что вы также можете обращаться к данным на диске ... PAE - это ловкий хак, но это всего лишь хак. - person tialaramex; 17.07.2009

Потому что это количество различных адресов памяти (в байтах), которые могут быть сохранены в слове.

Но на самом деле это не всегда так (в большинстве случаев это не так), ОС может обрабатывать больше физической памяти (с PAE), а приложения могут использовать менее 4 ГБ виртуальной памяти (потому что часть этой виртуальной память сопоставляется с ОС, например, 1 ГБ в Linux и 2 ГБ в Windows).

Другой сценарий, в котором это неприменимо, заключается в том, что если память адресуется словами, а не байтами, то общая адресуемая память будет, например, 16 ГБ.

person fortran    schedule 13.07.2009

  1. 32бит могут представлять числа 0..2^32 = 0..4,294,967,296
  2. 32бит может адресовать до 2^32Б байт (при условии, что блоки размером в байт)
  3. 2^32Б байт — максимальный размер

2^32Б = 4 194 304КиБ = 4 194МиБ = 4ГиБ

person Maryan    schedule 19.05.2019
comment
Вы имеете в виду 4096МиБ? - person seeker_of_bacon; 26.06.2020

В основном из-за того, что 32-битная ОС поддерживает только адреса 2 ^ 32-1.

Если ЦП имеет более 32 адресных линий на FSB, то 32-разрядная ОС может выбрать использование механизма подкачки для доступа к более чем 4 ГБ. (Например, версии Windows 2000 Advanced Server/Data Center на чипах Intel/AMD с поддержкой PAE)

person Indy9000    schedule 13.07.2009

ЦП с 32-битными регистрами потребует, чтобы операционная система вычисляла все фрагментами по 32 бита. Это аппаратное требование, которому должна соответствовать ОС. Точно так же процессорам с 64-битными регистрами потребуется операционная система, которая считывает и записывает данные из ОЗУ порциями по 64 бита. (Каждый раз, когда вы читаете данные из памяти, вам нужно прочитать их в один из этих регистров — будь то 32-битный, 64-битный, 16-битный и т. д.)

32-битный регистр может хранить 2^32 различных адреса ОЗУ. Каждый адрес ОЗУ соответствует байту (8 бит) в современных ОЗУ. (Аргумент 4 ГБ верен только для тех ОЗУ, у которых есть адреса для каждого байта.)

=> 2^32 = 4 294 967 296 адресов, → что соответствует 4 294 967 296 байтам.

Теперь 1 КБ = 2^10 байт или 1024 байта (в двоичной системе).

Следовательно, 4 294 967 296 байт / 1024 = 4 194 304 КБ.

4,194,304‬ KB / 1024 = 4,096‬ MB

4,096‬ MB / 1024 = 4 GB

person Debarshi Majumdar    schedule 12.02.2020

4 ГБ = 2^32 байта. Но помните, что 32-битная ОС выделяет максимум 4 ГБ. В реальности ОС увидит меньше, т.е. после выделения VRAM.

person waqasahmed    schedule 13.07.2009

Как ранее заявляли другие пользователи, 32-разрядные ОС Windows используют 32-разрядные слова для хранения адресов памяти.

Фактически, большинство 32-разрядных чипов в наши дни используют 36-разрядную адресацию, используя модель Intel Physical Address Extension (PAE). Некоторые операционные системы поддерживают это напрямую (например, Linux).

Как отмечает Рэймонд Чен, в Windows 32-разрядное приложение может выделять более 4 ГБ памяти, и для этого не требуется 64-разрядная версия Windows. Или даже ПАЭ.

Если уж на то пошло, 64-битные чипы не поддерживают все 64-битное пространство памяти. Я полагаю, что в настоящее время они ограничены 42-битным пространством... 36-битным пространством, которое использует PAE, плюс верхние 8-битные адреса,

person Powerlord    schedule 13.07.2009
comment
Даже если вы можете выделить более 4 ГБ памяти, вы не сможете использовать более 4 ГБ ОЗУ без 64-разрядной версии или PAE. - person ephemient; 13.07.2009
comment
Вы можете проверить, сколько бит физического и виртуального адреса действительно работает на вашем процессоре с помощью CPUID (на x86) или аналогичных функций на других семействах процессоров. Вы также можете увидеть это в /proc/cpuinfo в Linux. Мой дешевый компьютер из магазина на углу имеет 40 бит физических адресов и 48 бит виртуальных. Старые процессоры Xeon в нашей серверной стойке имеют только 36-битные физические адреса (неважно, они могут принимать только 16 ГБ модулей DIMM). - person tialaramex; 17.07.2009