Ошибка страницы - Page fault

А ошибка страницы (иногда называют #ПФ, ПФ или же серьезная ошибка)[а] это тип исключение вызывается компьютерным оборудованием, когда запущенная программа обращается к страница памяти который в настоящее время не отображается блок управления памятью (MMU) в виртуальное адресное пространство процесса. По логике, страница может быть доступна процессу, но требует добавления сопоставления в таблицы страниц процесса, а также может дополнительно потребовать, чтобы фактическое содержимое страницы было загружено из резервного хранилища, такого как диск. MMU процессора обнаруживает ошибку страницы, в то время как Обработка исключений программное обеспечение, которое обрабатывает ошибки страницы, обычно является частью операционной системы ядро. При обработке ошибки страницы Операционная система пытается сделать требуемую страницу доступной в месте физической памяти или завершает программу в случае незаконного доступа к памяти.

Вопреки тому, что может предполагать «сбой», действительные сбои страниц не являются ошибками, а являются обычным явлением и необходимы для увеличения объема памяти, доступной программам в любой операционной системе, которая использует виртуальная память, включая OpenVMS, Майкрософт Виндоус, Unix-подобный системы (включая macOS, Linux, * BSD, Солярис, AIX, и HP-UX ), и z / OS.

Типы

Незначительный

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

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

Основной

Это механизм, используемый операционной системой для увеличения объема памяти программ, доступной по запросу. Операционная система откладывает загрузку частей программы с диска до тех пор, пока программа не попытается использовать их и не будет сгенерирована ошибка страницы. Если страница не загружена в память во время сбоя, это называется серьезной или аппаратной ошибкой страницы. Обработчику ошибок страницы в ОС необходимо найти свободное место: либо свободную страницу в памяти, либо несвободную страницу в памяти. Последний может быть использован другим процессом, и в этом случае ОС необходимо записать данные на этой странице (если они не были записаны с момента последнего изменения) и пометить эту страницу как не загружаемую в память в своем процессе. таблица страниц. После того, как пространство станет доступным, ОС может прочитать данные для новой страницы в память, добавить запись в свое местоположение в блоке управления памятью и указать, что страница загружена. Таким образом, серьезные сбои обходятся дороже, чем второстепенные, и увеличивают задержку доступа к хранилищу для прерванного выполнения программы.

Инвалид

Если ошибка страницы возникает для ссылки на адрес, который не является частью виртуального адресное пространство, что означает, что в памяти не может быть соответствующей ему страницы, тогда это называется ошибкой неверной страницы. Обработчик сбоя страницы в операционной системе обычно передает ошибка сегментации процессу-нарушителю, указывая, что доступ был недействительным; это обычно приводит к ненормальное прекращение кода, сделавшего недействительную ссылку. А нулевой указатель обычно представляется как указатель на адрес 0 в адресном пространстве; многие операционные системы устанавливают MMU, чтобы указать, что страница, содержащая этот адрес, не находится в памяти, и не включают эту страницу в виртуальное адресное пространство, поэтому попытки чтения или записи в память, на которую ссылается нулевой указатель, получают недействительный ошибка страницы.

Недопустимые условия

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

Операционные системы, такие как Windows и UNIX (и другие UNIX-подобный системы) предоставляют различные механизмы для сообщения об ошибках, вызванных ошибками страниц. Windows использует структурированная обработка исключений сообщать о недействительных доступах из-за сбоя страницы как нарушение доступа исключения, и системы UNIX (и UNIX-подобные) обычно используют сигналы, Такие как SIGSEGV, чтобы сообщить программам об этих состояниях ошибки.

Если программа, получившая ошибку, не обрабатывает ее, операционная система выполняет действие по умолчанию, обычно включающее завершение работы процесс это вызвало состояние ошибки и уведомило пользователя о том, что программа работает неправильно. Последние версии Windows часто сообщают о таких проблемах, просто указывая что-то вроде «эта программа должна быть закрыта» (опытный пользователь или программист с доступом к отладчик все еще можно получить подробную информацию). Последние версии Windows также пишут минидамп (в принципе похож на дамп ядра ), описывающий состояние аварийного процесса. UNIX и UNIX-подобный операционные системы сообщают об этих условиях пользователю с помощью сообщений об ошибках, таких как «нарушение сегментации» или «ошибка шины», а также могут создавать дамп ядра.

Влияние на производительность

Ошибки страницы по самой своей природе снижают производительность программа или операционная система, и в дегенеративном случае может вызвать взбучка. Оптимизация программ и операционной системы, которые уменьшают количество ошибок страниц, улучшают производительность программы или даже всей системы. Два основных направления усилий по оптимизации - сокращение общего использования памяти и улучшение место в памяти. Чтобы уменьшить количество ошибок страниц в системе, программисты должны использовать соответствующий алгоритм замены страницы который соответствует текущим требованиям и увеличивает количество обращений к странице. Было предложено много, например, реализация эвристические алгоритмы чтобы уменьшить количество ошибок страниц. Как правило, увеличение объема доступной физической памяти также снижает количество ошибок страниц.

Основные ошибки страниц на обычных компьютерах, использующих жесткие диски для хранения может существенно повлиять на производительность, так как средний жесткий диск имеет средний задержка вращения 3 мс, a время поиска 5 мс, а время передачи 0,05 мс / страница. Следовательно, общее время пейджинга составляет около 8 мс (= 8000 мкс). Если время доступа к памяти составляет 0,2 мкс, то ошибка страницы сделает операцию примерно в 40 000 раз медленнее.

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

Примечания

  1. ^ Microsoft использует термин "серьезная неисправность" в некоторых версиях своего Монитор ресурсов, например, в Виндоус виста (как используется в справке по представлению ресурсов в операционных системах Microsoft).

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

  • Джон Л. Хеннесси, Дэвид А. Паттерсон, Компьютерная архитектура, количественный подход (ISBN  1-55860-724-2)
  • Таненбаум, Эндрю С. Операционные системы: разработка и реализация (второе издание). Нью-Джерси: Прентис-Холл 1997.
  • Руководство разработчика программного обеспечения для архитектуры Intel–Том 3: Системное программирование

внешняя ссылка