Interested Article - Отказ страницы

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

Несмотря на название, отказы при обращении к допустимым страницам являются нормальной частью функционирования любой операционной системы, использующей виртуальную память, включая OpenVMS , Microsoft Windows и UNIX-подобных системы. Фактически, они являются просто сигналами, необходимыми операционной системе для выделения памяти работающим программам.

Типы

Лёгкий или программный

Отказ страницы, который в Linux-подобных системах называется лёгким ( англ. minor ) , а в Windows — программным ( англ. soft ) , означает, что требуемая страница либо уже находится в оперативной памяти, но не отмечена в блоке управления памятью как загруженная, либо она вновь выделена и ещё ни разу не использовалась. Обработчик исключения в операционной системе должен только добавить запись в таблицу страниц для требуемой страницы и указать, что она загружена в память. Загрузка страницы с диска не требуется. Отказ происходит в следующих случаях :

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

Поскольку обработка таких отказов не сопровождается задержкой для обращения к диску, они обрабатываются быстрее значительных или аппаратных отказов.

Значительный или аппаратный

Отказ страницы, который в Linux-подобных системах называется значительным ( англ. major ) , а в Windows — аппаратным ( англ. hard ) , является основным механизмом, используемым операционной системой для выделения программам памяти по их запросу. Операционная система откладывает загрузку частей программы с диска до тех пор, пока программа не попытается получить доступ к ним и тем самым сгенерирует отказ страницы. Если страница не загружена в память на момент отказа, тогда отказ называется значительным или аппаратным. Обработчик отказа страницы в операционной системе должен найти свободное место в оперативной памяти: свободную либо занятую страницу. Занятая страница может принадлежать другому процессу. В этом случае операционная система должна выгрузить данные этой страницы на диск (если они не были выгружены ранее) и пометить эту страницу в таблице страниц процесса как отсутствующую в памяти. Как только свободное место становится доступным, операционная система может загрузить данные для новой страницы в память, добавить её физический адрес в таблицу страниц исходного процесса и пометить страницу, как находящуюся в памяти. Необходимость обращения к диску делает обработку таких отказов гораздо более медленной по сравнению с лёгкими.

Обращение к недействительной странице

Если отказ страницы возникает при обращении к адресу, не принадлежащему виртуальному адресному пространству процесса, то есть страницы в памяти, соответствующей этому адресу, не может быть, тогда этот отказ называется отказом недействительной страницы ( англ. invalid page fault ). Обработчик отказа страницы в операционной системе в этом случае, как правило, передает ошибку сегментации исходному процессу, показывая, что обращение было недействительным. Это приводит к аварийному завершению блока кода, выполнившего недействительное обращение. Примером недействительного обращения является разыменование нулевого указателя . Нулевой указатель — это указатель, не ссылающийся ни на какой объект. Обычно он представляется как указатель на адрес 0. Большинство операционных систем не включают страницу, содержащую нулевой адрес, в адресное пространство процесса, поэтому попытки чтения или записи памяти через нулевой указатель приводят к отказу недействительной страницы.

Примечания

  1. Э. Танненбаум. Современные операционные системы = Modern Operating Systems. — 2-е изд. — СПб. : Питер, 2002. — С. 235. — 1040 с. — ISBN 5-318-00299-4 .
  2. (англ.) . Дата обращения: 30 декабря 2017. 11 февраля 2015 года.
  3. (англ.) . Дата обращения: 30 декабря 2017. 2 ноября 2017 года.

Ссылки

  • William Gatliff. (англ.) . Дата обращения: 30 декабря 2017. Архивировано из 29 августа 2017 года.
Источник —

Same as Отказ страницы