Адрес памяти
Эта статья нуждается в дополнительных цитатах для проверки . ( февраль 2018 г. ) |

В вычислениях адрес памяти — это ссылка на конкретную ячейку памяти , используемую на различных уровнях программным и аппаратным обеспечением . [ 1 ] фиксированной длины, Адреса памяти представляют собой последовательности цифр которые обычно отображаются и обрабатываются как без знака целые числа . Такая числовая семантика основана на особенностях ЦП (таких как указатель команд и регистры инкрементального адреса ), а также на использовании памяти как массива, поддерживаемого различными языками программирования .
Типы
[ редактировать ]Физические адреса
[ редактировать ]цифрового компьютера ячеек Основная память состоит из множества памяти . Каждая ячейка памяти имеет физический адрес , который является кодом. ЦП (или другое устройство) может использовать код для доступа к соответствующей ячейке памяти. Обычно только системное программное обеспечение , то есть BIOS , операционные системы и некоторые специализированные служебные программы (например, тестеры памяти ), обращаются к физической памяти с помощью операндов машинного кода или регистров процессора , инструктируя ЦП направить аппаратное устройство, называемое контроллером памяти , на используйте шину памяти или системную шину или отдельные управления , адреса и шины данных для выполнения команд программы. контроллеров памяти Шина состоит из ряда параллельных линий, каждая из которых представлена двоичной цифрой (битом). Ширина шины и, следовательно, количество адресных единиц хранения и количество битов в каждой единице различаются в зависимости от компьютера.
Логические адреса
[ редактировать ]Компьютерная программа использует адреса памяти для выполнения машинного кода , а также для хранения и извлечения данных . На ранних компьютерах логические и физические адреса совпадали, но с появлением виртуальной памяти большинство прикладных программ не знают физических адресов. Скорее, они обращаются к логическим адресам или виртуальным адресам компьютера , используя блок управления памятью и операционной системы отображение памяти ; см . ниже .
Единица разрешения адреса
[ редактировать ]Большинство современных компьютеров имеют байтовую адресацию . Каждый адрес идентифицирует один байт ( восемь бит ) памяти. Данные размером более одного байта могут храниться в последовательности последовательных адресов. Существуют компьютеры с пословной адресацией процессора , где минимальной адресной единицей хранения является именно слово . Например, Data General Nova миникомпьютер , а также Texas Instruments TMS9900 и National Semiconductor IMP-16 микрокомпьютеры использовали 16-битные слова , а также существовало множество 36-битных мэйнфреймов (например, PDP-10 ), которые использовали 18-битную адресацию слов . не байтовая адресация , давая адресное пространство 2 18 36-битные слова, примерно 1 мегабайт памяти. Эффективность адресации памяти зависит от разрядности используемой для адресов шины – чем больше бит используется, тем больше адресов доступно компьютеру. Например, машина с 8-битной байтовой адресацией и 20-битной адресной шиной (например, Intel 8086 ) может адресовать 2 20 (1 048 576) ячеек памяти или один МБ памяти, а 32-битная шина (например, Intel 80386 ) адресует 2 32 (4 294 967 296) мест или адресное пространство размером 4 ГиБ . Напротив, 36-битная машина с пословной адресацией и 18-битной адресной шиной адресует только 2 18 (262 144) 36-битных ячеек (9 437 184 бит), что эквивалентно 1 179 648 8-битным байтам, или 1152 КиБ , или 1,125 МиБ — немного больше, чем 8086.
Некоторые старые компьютеры ( десятичные компьютеры ) десятичную адресацию имели . Например, каждый адрес в 1620 IBM памяти на магнитном сердечнике идентифицировал одну шестибитовую десятичную цифру в двоичном коде , состоящую из бита четности , бита флага и четырех числовых битов. В 1620 использовались пятизначные десятичные адреса, поэтому теоретически максимально возможный адрес был 99 999. На практике ЦП поддерживал 20 000 ячеек памяти, и можно было добавить до двух дополнительных внешних модулей памяти, каждый из которых поддерживал 20 000 адресов, всего 60 000 (00000–59999).
Размер слова и размер адреса
[ редактировать ]Размер слова — это характеристика компьютерной архитектуры, обозначающая количество битов, которые процессор может обрабатывать одновременно. Современные процессоры, включая встроенные системы , обычно имеют размер слова 8, 16, 24, 32 или 64 бита; большинство современных компьютеров общего назначения используют 32 или 64 бита. Исторически использовалось много разных размеров, в том числе 8, 9, 10, 12, 18, 24, 36, 39, 40, 48 и 60 бит.
Очень часто, говоря о размере слова современного компьютера, подразумевают также размер адресного пространства на этом компьютере. Например, компьютер, называемый « 32-битным », также обычно допускает 32-битные адреса памяти; 32-битный компьютер с байтовой адресацией может адресовать 2 32 = 4 294 967 296 байт памяти или 4 гибибайта (ГиБ). Это позволяет эффективно хранить один адрес памяти в одном слове.
Однако это не всегда соответствует действительности. Компьютеры могут иметь адреса памяти больше или меньше размера их слова. Например, многие 8-битные процессоры, такие как MOS Technology 6502 , поддерживали 16-битные адреса — в противном случае они были бы ограничены всего лишь 256 байтами адресации памяти. 16-битные процессоры Intel 8088 и Intel 8086 поддерживали 20-битную адресацию посредством сегментации , что позволяло им получать доступ к 1 МиБ, а не к 64 КиБ памяти. Intel Pentium Все процессоры , начиная с Pentium Pro , включают расширения физических адресов (PAE), которые поддерживают сопоставление 36-битных физических адресов с 32-битными виртуальными адресами. Многие ранние процессоры содержали 2 адреса на слово , например, 36-битные процессоры.
Теоретически современные 64-битные компьютеры с побайтовой адресацией могут адресовать 2 64 байт (16 эксбибайт ), но на практике объем памяти ограничен процессором, контроллером памяти или конструкцией печатной платы (например, количеством разъемов физической памяти или объемом припаянной памяти).
Содержимое каждой ячейки памяти
[ редактировать ]Каждая ячейка памяти компьютера с хранимой программой содержит двоичное или десятичное число какое-либо . Его интерпретация как данных некоторого типа данных или как инструкция, а также использование определяются инструкциями , которые извлекают их и манипулируют ими.
Некоторые ранние программисты объединяли инструкции и данные в словах, чтобы сэкономить память, когда это было дорого: в 40-битных словах Manchester Mark 1 было место для хранения небольших битов данных — его процессор игнорировал небольшой участок в середине слово – и это часто использовалось как дополнительное хранилище данных. [ нужна ссылка ] Самовоспроизводящиеся программы, такие как вирусы, иногда рассматривают себя как данные, а иногда как инструкции. Самомодифицирующийся код в настоящее время, как правило, устарел , поскольку он делает тестирование и обслуживание непропорционально трудным для экономии нескольких байт, а также может давать неверные результаты из-за предположений компилятора или процессора о состоянии машины , но все же иногда используется намеренно. с большой осторожностью.
Адресное пространство в прикладном программировании
[ редактировать ]В современной многозадачной среде приложения процесс обычно имеет в своем адресном пространстве (или пространствах) куски памяти следующих типов:
- Машинный код , в том числе:
- собственный код программы (исторически известный как сегмент кода или текстовый сегмент );
- общие библиотеки .
- Данные , в том числе:
- инициализированные данные ( сегмент данных );
- неинициализированные (но выделенные) переменные;
- стек времени выполнения ;
- куча ;
- общая память и файлы, отображаемые в памяти .
Некоторые части адресного пространства могут вообще не отображаться.
Некоторые системы имеют «разделенную» архитектуру памяти , где машинный код, константы и данные находятся в разных местах и могут иметь разные размеры адресов. Например, микроконтроллеры PIC18 имеют 21-битный программный счетчик для адресации машинного кода и констант во флэш-памяти, а также 12-битные адресные регистры для адресации данных в SRAM.
Схемы адресации
[ редактировать ]Компьютерная программа может получить доступ к адресу, заданному явно. В низкоуровневом программировании это обычно называется адресом. абсолютный адрес или иногда конкретный адрес, известный как тип данных указателя в языках более высокого уровня. Но программа также может использовать относительный адрес , который определяет местоположение относительно другого места ( базовый адрес ). Существует еще много режимов косвенной адресации .
Сопоставление логических адресов с физической и виртуальной памятью также добавляет несколько уровней косвенности; см. ниже.
Модели памяти
[ редактировать ]Многие программисты предпочитают обращаться к памяти так, чтобы не было различия между пространством кода и пространством данных (см. выше ), а также между физической и виртуальной памятью (см. выше ) — другими словами, числовые одинаковые указатели относятся к точно одному и тому же байту БАРАН.
Однако многие ранние компьютеры не поддерживали такую плоскую модель памяти — в частности, машины с гарвардской архитектурой заставляют хранить программы полностью отдельно от хранилища данных. Многие современные DSP (например, Motorola 56000 ) имеют три отдельные области хранения — хранилище программ, хранилище коэффициентов и хранилище данных. Некоторые часто используемые инструкции извлекаются из всех трех областей одновременно — меньшее количество областей хранения (даже если общее количество байтов памяти одинаковое) приведет к замедлению выполнения этих инструкций.
Модели памяти в архитектуре x86
[ редактировать ]Ранние процессоры x86 использовали адреса модели сегментированной памяти, основанные на комбинации двух чисел: сегмента памяти и смещения внутри этого сегмента.
Некоторые сегменты неявно рассматриваются как сегменты кода , предназначенные для инструкций , стека сегментов или обычных данных сегментов . Несмотря на то, что их использование различно, сегменты не имеют различной защиты памяти, что отражает это. В модели плоской памяти все сегменты (сегментные регистры) обычно устанавливаются в ноль, и переменными являются только смещения.
Модели памяти в мультипроцессорах IBM S/360 и его преемниках
[ редактировать ]В версиях 360/65 и 360/67 IBM представила концепцию, известную как префикс. [ 2 ] Префиксирование — это уровень трансляции адресов, который применяется к адресам в реальном режиме и к адресам, созданным в результате динамической трансляции адресов, с использованием уникального префикса, назначенного каждому ЦП. В 360/65, 360/67 и всех последующих версиях до z/Architecture он логически заменяет блок памяти размером 4096 байт на другой блок, назначенный ЦП. На z/Architecture, [ 3 ] префикс работает с блоками по 8196 байт. IBM классифицирует адреса в этих системах как: [ 4 ]
- Виртуальный адрес: адреса, подлежащие динамической трансляции адресов.
- Реальные адреса: адреса, сгенерированные в результате динамической трансляции адресов, и адреса, используемые кодом, работающим в реальном режиме.
- Абсолютные адреса: физические адреса
См. также
[ редактировать ]- Распределение памяти
- Блок управления памятью (MMU)
- Модель памяти (программирование)
- Защита памяти
- Сегментация памяти
- Смещение (информатика) , также известное как смещение
- Таблица страниц
Ссылки
[ редактировать ]- ^ Абрахамсон, Карл Р. (20 августа 2022 г.). «5.10.1. Память и адреса памяти» . Университет Восточной Каролины . Проверено 3 февраля 2023 г.
- ^ «Мультисистемная работа» (PDF) . Принципы работы IBM System/360 (PDF) . Справочная библиотека по системам (Восьмое изд.). Сентябрь 1968 г. с. 18. А22-6821-7 . Проверено 21 июля 2024 г.
Процедура перемещения применяется к первым 4096 байтам памяти. Эта область содержит все назначения постоянного хранения и, как правило, имеет особое значение для программ контроля. Перемещение осуществляется путем вставки 12-битного префикса в каждый адрес, у которого старшие 12 бит установлены в ноль и, следовательно, относятся к местоположению 0–4095.
- ^ «Префиксы в архитектурном режиме z/Architecture» (PDF) . z/Принципы работы архитектуры (PDF) (Четырнадцатое изд.). Май 2022. с. 3-21–3-23. SA22-7832-13 . Проверено 21 июля 2024 г.
Префиксирование обеспечивает возможность назначить блок реальных адресов, содержащий назначенные места хранения, другому блоку в абсолютной памяти для каждого ЦП, что позволяет нескольким ЦП, совместно использующим основную память, работать одновременно с минимальным вмешательством, особенно при обработке прерываний. .
- ^ «Типы адресов» (PDF) . z/Принципы работы архитектуры (PDF) (Четырнадцатое изд.). Май 2022 г. стр. 3-4–3-5. SA22-7832-13 . Проверено 21 июля 2024 г.