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

В вычислениях , A адрес памяти является ссылкой на конкретные памяти местоположение , используемом на различных уровнях программного обеспечения и аппаратных средствами . Адреса памяти представляют собой последовательности цифр фиксированной длины, которые обычно отображаются и обрабатываются как целые числа без знака . Такая числовая семантика основана на особенностях ЦП (таких как указатель команд и регистры инкрементного адреса ), а также на использовании памяти, например массива, поддерживаемого различными языками программирования .

Типы [ править ]

Физические адреса [ править ]

А цифровая вычислительная машина «S основная память состоит из множества ячеек памяти . Каждая ячейка памяти имеет физический адрес, который представляет собой код. ЦП (или другое устройство) может использовать код для доступа к соответствующей ячейке памяти. Обычно только системное программное обеспечение , то есть BIOS , операционные системы и некоторые специализированные служебные программы (например, тестеры памяти ), адресуют физическую память с помощью операндов машинного кода или регистров процессора , инструктируя ЦП направить аппаратное устройство, называемое контроллером памяти , на использовать шину памяти илисистемная шина или отдельные шины управления , адреса и данных для выполнения команд программы. Шина контроллеров памяти состоит из ряда параллельных линий, каждая из которых представлена двоичной цифрой (битом). Ширина шины и, следовательно, количество адресуемых запоминающих устройств и количество битов в каждой единице различаются между компьютерами.

Логические адреса [ править ]

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

Единица разрешения адреса [ править ]

Большинство современных компьютеров имеют байтовую адресацию . Каждый адрес идентифицирует один байт ( восемь бит ) памяти. Данные размером более одного байта могут храниться в последовательности последовательных адресов. Существуют компьютеры с адресной адресацией по словам , где минимальная адресуемая единица хранения - это слово процессора . Например, данные Общие Nova миникомпьютер , и Texas Instruments TMS9900 и National Semiconductor ИМП-16 микрокомпьютеры используются 16 - битных слов , и там было много 36-разрядных универсальных компьютеров (например, PDP-10), который использовал 18-битную адресацию слов , а не байтовую адресацию , давая адресное пространство из 2 18 36-битных слов, примерно 1 мегабайт памяти. Эффективность адресации памяти зависит от разрядности шины, используемой для адресов - чем больше используется бит, тем больше адресов доступно компьютеру. Например, машина с 8-битной адресацией байтов и 20-битной адресной шиной (например, Intel 8086 ) может адресовать 2 20 (1048 576) ячеек памяти или один мегабайт памяти, а 32-битная шина (например, Intel 80386) ) адресов 2 32 (4 294 967 296) местоположений, или 4 ГиБадресное пространство. Напротив, машина с 36-битной адресацией слов с 18-битной адресной шиной адресует только 2 18 (262 144) 36-битных ячеек (9 437 184 бит), что эквивалентно 1179 648 8-битным байтам, или 1152 КБ, или 1,125 МиБ - немного больше, чем у 8086.

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

Содержимое каждой ячейки памяти [ править ]

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

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

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

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

  • Машинный код , в том числе:
    • собственный код программы (исторически известный как сегмент кода или текстовый сегмент );
    • общие библиотеки .
  • Данные , в том числе:
    • инициализированные данные ( сегмент данных );
    • неинициализированные (но выделенные) переменные;
    • стек времени выполнения ;
    • куча ;
    • совместно используемая память и файлы с отображением памяти .

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

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

Схемы адресации [ править ]

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

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

Модели памяти [ править ]

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

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

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

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

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

См. Также [ править ]

  • Модель памяти (программирование)
  • Выделение памяти
  • Регистр адреса памяти
  • Базовый адрес
  • Смещение (информатика) , также известное как смещение
  • Порядок байтов
  • Блок управления памятью (MMU)
  • Таблица страниц
  • Защита памяти
  • Сегментация памяти
  • Язык программирования низкого уровня

Ссылки [ править ]