Просто прочитав несколько заметок в лекции Purdue об ОС, и он говорит:
Программа видит память как массив байтов, который идет от адреса 0 до 2^32-1 (от 0 до 4 ГБ-1).
Почему 4 ГБ?
Просто прочитав несколько заметок в лекции Purdue об ОС, и он говорит:
Программа видит память как массив байтов, который идет от адреса 0 до 2^32-1 (от 0 до 4 ГБ-1).
Почему 4 ГБ?
Поскольку 32 бита могут представлять числа до 232 – 1 = 4 294967295 = 4 ГиБ – 1, и, следовательно, адресовать до 232 отдельных байтов, что составляет 4 ГиБ, тогда .
Однако есть способы обойти это. Например, при использовании PAE даже 32-разрядная операционная система может поддерживать больший объем памяти. Однако исторически это чаще всего использовалось на серверах. Кроме того, несерверные SKU Windows не поддерживают его. Однако сейчас все это спорно, учитывая, что 64-битные процессоры, операционные системы и поддержка драйверов являются обычным явлением.
Потому что каждый байт памяти должен иметь адрес. В 32-битной операционной системе адрес имеет длину 32 бита; таким образом, существует 2 ^ 32 возможных адреса, что означает, что 2 ^ 32 байта = 4 ГБ.
Все говорят, что 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 ГБ.
Если у вас 4-битная система, это означает, что адрес для каждого байта состоит из 4 двоичных цифр, вероятность всех ваших адресов будет варьироваться от 0000
до 1111
, что равно 2^4 = 16
(2, потому что есть либо 0 или 1), с четырьмя битами можно создать 16
разных значений нулей и единиц, если у вас есть 16 разных адресов. каждый представляет byte
, тогда у вас может быть максимум 16 bytes
4-битная система будет выглядеть так:
Для 32-битной системы максимальное значение равно 2^32 = 4294967292 bytes
.
4 ГБ = 2^32 байта.
2 ^ 32 = 4 * 1024 * 1024 * 1024
Это в байтах и есть определение 4 ГБ. Другими словами, 32-битный регистр в качестве указателя памяти может адресовать 4 ГБ памяти и не более.
На самом деле это не так просто, как 2^32 = 4294967296 байт. Вы видите, что в защищенном режиме x86 с включенным пейджингом (то есть, что вы получаете при использовании любой современной ОС) вы не обращаетесь к ячейкам памяти напрямую, даже несмотря на то, что механизм трансляции пейджинга прозрачен для клиентских приложений.
Из логического 32-битного адреса памяти при использовании 4K страниц:
Как видите, у вас есть 2^10 (1024) каталогов страниц, в каждом каталоге страниц у вас есть 2^10 таблиц страниц, и каждая страница имеет длину 2^12 (4096) байт, следовательно, 2^32 = 4294967296 байт. Ширина шины памяти удобно равна разрядности процессора, но это совсем не обязательно. Фактически, более современные процессоры x86 поддерживают PAE, что позволяет адресовать более 4 ГБ (или ГиБ) даже в 32-битном режиме.
Потому что это количество различных адресов памяти (в байтах), которые могут быть сохранены в слове.
Но на самом деле это не всегда так (в большинстве случаев это не так), ОС может обрабатывать больше физической памяти (с PAE), а приложения могут использовать менее 4 ГБ виртуальной памяти (потому что часть этой виртуальной память сопоставляется с ОС, например, 1 ГБ в Linux и 2 ГБ в Windows).
Другой сценарий, в котором это неприменимо, заключается в том, что если память адресуется словами, а не байтами, то общая адресуемая память будет, например, 16 ГБ.
0..2^32
= 0..4,294,967,296
2^32Б = 4 194 304КиБ = 4 194МиБ = 4ГиБ
В основном из-за того, что 32-битная ОС поддерживает только адреса 2 ^ 32-1.
Если ЦП имеет более 32 адресных линий на FSB, то 32-разрядная ОС может выбрать использование механизма подкачки для доступа к более чем 4 ГБ. (Например, версии Windows 2000 Advanced Server/Data Center на чипах Intel/AMD с поддержкой PAE)
ЦП с 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
4 ГБ = 2^32 байта. Но помните, что 32-битная ОС выделяет максимум 4 ГБ. В реальности ОС увидит меньше, т.е. после выделения VRAM.
Как ранее заявляли другие пользователи, 32-разрядные ОС Windows используют 32-разрядные слова для хранения адресов памяти.
Фактически, большинство 32-разрядных чипов в наши дни используют 36-разрядную адресацию, используя модель Intel Physical Address Extension (PAE). Некоторые операционные системы поддерживают это напрямую (например, Linux).
Как отмечает Рэймонд Чен, в Windows 32-разрядное приложение может выделять более 4 ГБ памяти, и для этого не требуется 64-разрядная версия Windows. Или даже ПАЭ.
Если уж на то пошло, 64-битные чипы не поддерживают все 64-битное пространство памяти. Я полагаю, что в настоящее время они ограничены 42-битным пространством... 36-битным пространством, которое использует PAE, плюс верхние 8-битные адреса,