Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

Размер [ править ]

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

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

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

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

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

 LDA  $ 00  ; нулевая страница  LDA  0000 $ ; ненулевая страница 

Две приведенные выше инструкции выполняют одно и то же: они загружают значение ячейки памяти $ 00 в регистр .A (аккумулятор). Однако первая инструкция имеет длину всего два байта и требует для завершения трех тактовых циклов. Длина второй инструкции составляет три байта, и для ее выполнения требуется четыре тактовых цикла. Эта разница во времени выполнения может стать значительной в повторяющемся коде.

Нулевые указатели [ править ]

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

Векторы прерывания [ править ]

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

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

CP / M [ править ]

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

Адресация страницы [ править ]

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

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

  • Мало памяти - первые 64 КБ памяти (сегмент 0) в DOS
  • Перенос границы страницы

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

  1. ^ Sjödin, Томас; Йонссон, Йохан (2006). Работы студентов по компьютерной архитектуре (PDF) . Умео, Швеция. п. 29. Архивировано из оригинального (PDF) 09.03.2019 . Проверено 21 августа 2019 .
  2. ^ «Управление виртуальной памятью» . Microsoft . 2014-12-05 . Проверено 5 декабря 2014 .
  3. ^ "Дыра в безопасности ARM является двоюродным братом" . drobe.co.uk. 2007-04-24 . Проверено 22 октября 2008 .
  4. ^ «4.1 Пересечение границ страницы». Руководство по программированию на языке ассемблера MCS-4 - Руководство по программированию микрокомпьютерной системы INTELLEC 4 (PDF) (предварительная редакция). Санта-Клара, Калифорния, США: Intel Corporation . Декабрь 1973 г. С. 2-4, 2-14, 3-41, 4-1. MCS-030-1273-1. Архивировано (PDF) из оригинала 2020-03-01 . Проверено 2 марта 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]. «Переезд - это не просто перемещение программ» . Доктора Добба . Vol. 3 шт. 2. Риджфилд, Калифорния, США: People's Computer Company . С. 14–20 (70–76). ISBN 0-8104-5490-4. №22. Архивировано 20 апреля 2019 года . Проверено 19 апреля 2019 .
  • «1. Введение: Выравнивание сегментов». Утилиты семейства 8086 - Руководство пользователя систем разработки на базе 8080/8085 (PDF) . Редакция E (A620 / 5821 6K DD ed.). Санта-Клара, Калифорния, США: Intel Corporation . Май 1982 [1980, 1978]. п. 1-6. Номер заказа: 9800639-04. Архивировано (PDF) из оригинала 29 февраля 2020 года . Проверено 29 февраля 2020 .