stringtranslate.com

Нулевая страница

Нулевая страница или базовая страница — это блок памяти в самом начале адресного пространства компьютера ; то есть страница , начальный адрес которой равен нулю. Размер страницы зависит от контекста, а значимость памяти с нулевой страницей по сравнению с памятью с более высоким адресом сильно зависит от архитектуры машины. Например, семейства процессоров Motorola 6800 и MOS Technology 6502 обрабатывают первые 256 байт памяти особым образом , [1] тогда как многие другие процессоры этого не делают.

В отличие от более современного оборудования, в 1970-х годах оперативная память компьютера была такой же быстрой, как и центральный процессор. [ требуется цитата ] Таким образом, имело смысл иметь немного регистров и использовать основную память как расширенный пул дополнительных регистров. В машинах с относительно широкой 16-битной адресной шиной и сравнительно узкой 8-битной шиной данных вычисление адреса в памяти могло занять несколько циклов. Однобайтовый адрес нулевой страницы был меньше и, следовательно, быстрее для чтения и вычисления, чем в других местах, что делало нулевую страницу полезной для высокопроизводительного кода.

Адресация нулевой страницы в настоящее время имеет в основном историческое значение, поскольку развитие технологии интегральных схем сделало добавление большего количества регистров в ЦП менее затратным, а операции ЦП стали выполняться намного быстрее, чем доступ к ОЗУ.

Размер

Фактический размер нулевой страницы в байтах определяется конструкцией микропроцессора и в старых конструкциях часто равен наибольшему значению, на которое могут ссылаться индексные регистры процессора. Например, вышеупомянутые 8-битные процессоры имеют 8-битные индексные регистры и размер страницы 256 байт. Таким образом, их нулевая страница простирается от адреса 0 до адреса 255.

Компьютеры с небольшим количеством регистров ЦП

В ранних компьютерах, таких как PDP-8 , нулевая страница имела специальный режим быстрой адресации , который облегчал ее использование для временного хранения данных и компенсировал нехватку регистров ЦП . У PDP-8 был только один регистр, поэтому адресация нулевой страницы была необходима. В оригинальных моделях PDP-10 KA-10 доступные регистры — это просто первые 16 слов длиной 36 бит основной памяти. К этим ячейкам можно обращаться как к регистрам, так и к ячейкам памяти.

В отличие от более современного оборудования, оперативная память компьютеров 1970-х годов была такой же быстрой, как и центральный процессор. Таким образом, имело смысл иметь несколько регистров и использовать основную память как расширенный пул дополнительных регистров. В машинах с 16-битной адресной шиной и 8-битной шиной данных доступ к ячейкам нулевой страницы мог быть быстрее, чем доступ к другим ячейкам. Поскольку ячейки нулевой страницы могли быть адресованы одним байтом , инструкции, обращающиеся к ним, могли быть короче и, следовательно, быстрее загружаться.

Например, семейство MOS Technology 6502 имеет только один регистр общего назначения: аккумулятор. Чтобы компенсировать это ограничение и получить преимущество в производительности, 6502 разработан для специального использования нулевой страницы, предоставляя инструкции, операнды которых составляют восемь бит вместо 16, что требует меньше циклов выборки памяти. Многие инструкции кодируются по-разному для адресов нулевой и ненулевой страниц; это называется адресацией нулевой страницы в терминологии 6502 (это называется прямой адресацией в терминологии Motorola 6800 ; Western Design Center 65C816 также называет адресацию нулевой страницы прямой адресацией страницы ):

 LDA $ 12 ; адресация нулевой страницы LDA $ 0012 ; абсолютная адресация     

На языке ассемблера 6502 обе приведенные выше инструкции выполняют одно и то же: загружают значение ячейки памяти $12в .Aрегистр (аккумулятор) ( $это обозначение языка ассемблера Motorola/MOS Technology для шестнадцатеричного числа). Однако первая инструкция имеет длину всего два байта и требует для своего выполнения три такта. Вторая инструкция имеет длину три байта и требует для своего выполнения четыре такта. Эта разница во времени выполнения может стать существенной в повторяющемся коде.

Некоторые процессоры, такие как Motorola 6809 и вышеупомянутый WDC 65C816, реализуют «регистр прямой страницы» ( DP), который сообщает процессору начальный адрес в ОЗУ того, что считается нулевой страницей. В этом контексте адресация нулевой страницы является условной; фактический доступ не будет к физической нулевой странице, если DPзагружен какой-либо адрес, отличный от $00(или $0000в случае 65C816).

Нулевые указатели

В отличие от изначального предпочтительного использования нулевой страницы, некоторые современные операционные системы, такие как FreeBSD , Linux и Microsoft Windows [2], фактически делают нулевую страницу недоступной для перехвата использования нулевых указателей . Такие значения указателей могут законно указывать на неинициализированные значения или контрольные узлы , но они не указывают на допустимые объекты. Ошибочный код может попытаться получить доступ к объекту через нулевой указатель, и это может быть перехвачено на уровне операционной системы как нарушение доступа к памяти .

Векторы прерываний

Однако некоторые компьютерные архитектуры по-прежнему резервируют начало адресного пространства для других целей; например, системы Intel x86 резервируют первые 256 двойных слов адресного пространства для таблицы векторов прерываний (IVT), если они работают в реальном режиме .

Похожая техника использования нулевой страницы для векторов, связанных с оборудованием, применялась в архитектуре ARM. В плохо написанных программах это могло привести к поведению "ofla", когда программа пытается прочитать информацию из непредназначенной области памяти и обрабатывает исполняемый код как данные или наоборот. Это особенно проблематично, если область нулевой страницы используется для хранения векторов системных переходов, а встроенное ПО обманным путем перезаписывает их. [3]

КП/М

В 8-битном CP/M нулевая страница используется для связи между работающей программой и операционной системой.

Адресация страниц

В некоторых архитектурах процессоров, например, в 4-битном процессоре Intel 4004 , память была разделена на страницы (по 256 байт), и приходилось принимать особые меры предосторожности, когда поток управления пересекал границы страниц , поскольку некоторые машинные инструкции демонстрировали различное поведение, если располагались в последних нескольких инструкциях страницы, поэтому для перехода между страницами рекомендовалось использовать лишь несколько инструкций. [4]

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

Ссылки

  1. ^ Sjödin, Tomas; Jonsson, Johan (2006). Student Papers in Computer Architecture (PDF) . Umeå, Sweden. стр. 29. S2CID  14355431. Архивировано из оригинала (PDF) 2019-03-09 . Получено 2019-08-21 .{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  2. ^ "Управление виртуальной памятью". Microsoft . 2014-12-05 . Получено 2014-12-05 .
  3. ^ "ARM 'security hole' is ofla brother". drobe.co.uk. 2007-04-24 . Получено 2008-10-22 .
  4. ^ "4.1 Пересечение границ страниц". Руководство по программированию на языке ассемблера MCS-4 - Руководство по программированию микрокомпьютерной системы INTELLEC 4 (PDF) (Предварительное издание). Санта-Клара, Калифорния, США: Intel Corporation . Декабрь 1973 г. стр. 2-4, 2-14, 3-41, 4-1. MCS-030-1273-1. Архивировано (PDF) из оригинала 01.03.2020 . Получено 02.03.2020 . […] некоторые инструкции функционируют по-разному, когда они находятся в последнем байте (или байтах) страницы, чем когда они находятся в другом месте. […] Два адреса находятся на одной странице, если шестнадцатеричные цифры их адресов старшего порядка равны. […] Если инструкция JIN находится в последнем месте страницы в памяти, то старшие 4 бита счетчика программ увеличиваются на единицу, в результате чего управление передается в соответствующее место на следующей странице. […] Если […] JIN находится по адресу 255 в десятичной системе счисления (0FF в шестнадцатеричной системе счисления), управление передается по адресу 115 в шестнадцатеричной системе счисления, а не по адресу 015 в шестнадцатеричной системе счисления. Это опасная практика программирования, и ее следует избегать, когда это возможно. […] программы хранятся либо в ПЗУ, либо в ОЗУ программ, и обе они разделены на страницы. Каждая страница состоит из 256 8-битных ячеек. Адреса с 0 по 255 составляют первую страницу, с 256 по 511 составляют вторую страницу и т. д. В целом, хорошей практикой программирования является никогда не допускать, чтобы поток программы пересекал границу страницы, за исключением случаев использования инструкции JUN или JMS. […]

Дальнейшее чтение