Нулевая страница
Нулевая страница или базовая страница — это блок памяти в самом начале компьютера пространства адресного ; то есть страница , начальный адрес которой равен нулю. Размер страницы зависит от контекста, а значение памяти с нулевой страницей по сравнению с памятью с более высокой адресацией сильно зависит от архитектуры машины. Например, семейства процессоров 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 ; zero page addressing
LDA $0012 ; absolute addressing
На языке ассемблера 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]
См. также
[ редактировать ]- Малая память — первые 64 КБ памяти (сегмент 0) в DOS.
- Перемещение границ страницы
Ссылки
[ редактировать ]- ^ Сьёдин, Томас; Йонссон, Йохан (2006). Студенческие работы по компьютерной архитектуре (PDF) . Умео, Швеция. п. 29. S2CID 14355431 . Архивировано из оригинала (PDF) 9 марта 2019 г. Проверено 21 августа 2019 г.
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ «Управление виртуальной памятью» . Майкрософт . 05.12.2014 . Проверено 5 декабря 2014 г.
- ^ «Дыра в безопасности ARM — двоюродный брат» . drobe.co.uk. 24 апреля 2007 г. Проверено 22 октября 2008 г.
- ^ «4.1 Пересечение границ страницы». Руководство по программированию на языке ассемблера MCS-4 — Руководство по программированию микрокомпьютерной системы INTELLEC 4 (PDF) (предварительное издание). Санта-Клара, Калифорния, США: Корпорация Intel . Декабрь 1973 г. стр. 2–4, 2–14, 3–41, 4–1. MCS-030-1273-1. Архивировано (PDF) из оригинала 01 марта 2020 г. Проверено 02 марта 2020 г.
[…] некоторые инструкции функционируют иначе, когда они расположены в последнем байте (или байтах) страницы, чем когда они расположены в другом месте. […] Два адреса находятся на одной странице, если старшие шестнадцатеричные цифры их адресов равны. […] Если инструкция JIN расположена в последней ячейке страницы в памяти, старшие 4 бита счетчика программы увеличиваются на единицу, в результате чего управление передается в соответствующую ячейку на следующей странице. […] Если бы […] JIN находился по десятичному адресу 255 (0FF шестнадцатеричный), управление было бы передано по шестнадцатеричному адресу 115, а не по шестнадцатеричному адресу 015. Это опасная практика программирования, и ее следует избегать, когда это возможно. […] программы хранятся либо в ПЗУ, либо в программном ОЗУ, оба из которых разделены на страницы. Каждая страница состоит из 256 8-битных ячеек. Адреса от 0 до 255 составляют первую страницу, адреса 256–511 — вторую страницу и так далее. В общем, хорошей практикой программирования является никогда не позволять потоку программы пересекать границу страницы, кроме как с помощью инструкции JUN или JMS. […]
Дальнейшее чтение
[ редактировать ]- Брей, Эндрю С.; Диккенс, Адриан К.; Холмс, Марк А. (1983). Расширенное руководство пользователя микрокомпьютера BBC (3-е изд.). Кембриджский микрокомпьютерный центр. ISBN 0-946827-00-1 .
- Рот, Ричард Л. (февраль 1978 г.) [1977]. «Переезд – это не просто программы перемещения» . Доктор Добб . Том. 3, нет. 2. Риджфилд, Калифорния, США: Народная компьютерная компания . стр. 14–20 (70–76). ISBN 0-8104-5490-4 . № 22. Архивировано из оригинала 20 апреля 2019 г. Проверено 19 апреля 2019 г.
- «1. Введение: выравнивание сегментов». Утилиты семейства 8086 — Руководство пользователя для систем разработки на базе 8080/8085 (PDF) . Версия E (A620/5821 6K DD изд.). Санта-Клара, Калифорния, США: Корпорация Intel . Май 1982 г. [1980, 1978]. п. 1-6. Номер заказа: 9800639-04. Архивировано (PDF) из оригинала 29 февраля 2020 г. Проверено 29 февраля 2020 г.