stringtranslate.com

Адрес памяти

В компьютере, использующем виртуальную память , доступ к местоположению, соответствующему адресу памяти, может включать много уровней.

В вычислениях адрес памяти — это ссылка на конкретную ячейку памяти , используемую на различных уровнях программным и аппаратным обеспечением . [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 ) может адресовать 220 ( 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.

Некоторые старые компьютеры ( десятичные компьютеры ) имели десятичную адресацию . Например, каждый адрес в памяти на магнитном сердечнике IBM 1620 идентифицировал одну шестибитовую десятичную цифру в двоичном коде , состоящую из бита четности , бита флага и четырех числовых битов. В 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-битные компьютеры с побайтовой адресацией могут адресовать 264 байта (16 эксбибайт ), но на практике объем памяти ограничен процессором, контроллером памяти или конструкцией печатной платы (например, количеством физических разъемы памяти или объем припаянной памяти).

Содержимое каждой ячейки памяти

Каждая ячейка памяти компьютера с хранимой программой содержит какое-либо двоичное или десятичное число . Его интерпретация как данных некоторого типа данных или как инструкция, а также использование определяются инструкциями , которые извлекают их и манипулируют ими.

Некоторые ранние программисты объединяли инструкции и данные в словах, чтобы сэкономить память, когда это было дорого: в 40-битных словах Manchester Mark 1 было место для хранения небольших битов данных — его процессор игнорировал небольшой участок в середине слово – и это часто использовалось как дополнительное хранилище данных. [ нужна цитация ] Самовоспроизводящиеся программы, такие как вирусы, иногда рассматривают себя как данные, а иногда как инструкции. Самомодифицирующийся код в настоящее время, как правило, устарел , поскольку он делает тестирование и обслуживание непропорционально трудным для экономии нескольких байтов, а также может давать неверные результаты из-за предположений компилятора или процессора о состоянии машины , но все же иногда используется намеренно. с большой осторожностью.

Адресное пространство в прикладном программировании

В современной многозадачной среде процесс приложения обычно имеет в своем адресном пространстве (или пространствах) куски памяти следующих типов:

Некоторые части адресного пространства могут вообще не отображаться.

Некоторые системы имеют «разделенную» архитектуру памяти , где машинный код, константы и данные находятся в разных местах и ​​могут иметь разные размеры адресов. Например, микроконтроллеры PIC18 имеют 21-битный программный счетчик для адресации машинного кода и констант во флэш-памяти, а также 12-битные адресные регистры для адресации данных в SRAM.

Схемы адресации

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

Сопоставление логических адресов с физической и виртуальной памятью также добавляет несколько уровней косвенности; см. ниже.

Модели памяти

Многие программисты предпочитают обращаться к памяти так, чтобы не было различия между пространством кода и пространством данных (см. выше), а также между физической и виртуальной памятью (см. выше) — другими словами, числовые одинаковые указатели относятся к одному и тому же байту БАРАН.

Однако многие ранние компьютеры не поддерживали такую ​​модель плоской памяти — в частности, машины с гарвардской архитектурой заставляют хранить программы полностью отдельно от хранилища данных. Многие современные DSP (например, Motorola 56000 ) имеют три отдельные области хранения — хранилище программ, хранилище коэффициентов и хранилище данных. Некоторые часто используемые инструкции извлекаются из всех трех областей одновременно — меньшее количество областей хранения (даже если общее количество байтов памяти одинаковое) приведет к замедлению выполнения этих инструкций.

Модели памяти в архитектуре x86

Ранние процессоры x86 использовали адреса модели сегментированной памяти , основанные на комбинации двух чисел: сегмента памяти и смещения внутри этого сегмента.

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

Смотрите также

Рекомендации

  1. Абрахамсон, Карл Р. (20 августа 2022 г.). «5.10.1. Память и адреса памяти». Университет Восточной Каролины . Проверено 3 февраля 2023 г.