stringtranslate.com

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

В вычислительной технике ошибка страницы — это исключение , которое блок управления памятью (MMU) выдает, когда процесс обращается к странице памяти без надлежащей подготовки. Для доступа к странице требуется добавление отображения в виртуальное адресное пространство процесса . Кроме того, фактическое содержимое страницы может потребоваться загрузить из резервной копии, например с диска . MMU обнаруживает ошибку страницы, но ядро ​​операционной системы обрабатывает исключение, делая требуемую страницу доступной в физической памяти или запрещая незаконный доступ к памяти.

Допустимые ошибки страниц являются обычным явлением и необходимы для увеличения объема памяти, доступной программам в любой операционной системе, использующей виртуальную память , такой как Windows , macOS и ядро ​​Linux . [1]

Типы

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

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

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

Главный

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

Неверный

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

Неверные условия

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

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

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

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

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

Больший размер физической памяти также снижает количество сбоев страниц.

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

Ссылки

  1. ^ Бовет, Даниэль; Чезати, Марко (ноябрь 2005 г.). Понимание ядра Linux (PDF) (3-е изд.). О'Рейли Медиа. ISBN 0-596-00565-2. Получено 9 октября 2021 г. .

Внешние ссылки