Википедия:Нет страницы с июня 2021
- 1 year ago
- 0
- 0
Отказ страницы ( англ. page fault ) — разновидность аппаратного исключения , возникающего в компьютере с виртуальной памятью на основе подкачки страниц в момент обращения к странице памяти, которая не включена блоком управления памятью в адресное пространство процесса. Обращение к этой странице может быть логически допустимым, но может требовать её добавления в таблицу страниц и, возможно, загрузки её содержимого из вторичного хранилища ( жёсткого диска ) в оперативную память. Обнаружение отказа страницы выполняет аппаратное обеспечение (блок управления памятью), а его обработку выполняет программное обеспечение, обычно являющееся частью ядра операционной системы . При обработке отказа страницы операционная система пытается поместить требуемую страницу в оперативную память и сделать доступной процессу , либо завершает программу в случае недопустимого обращения к памяти.
Несмотря на название, отказы при обращении к допустимым страницам являются нормальной частью функционирования любой операционной системы, использующей виртуальную память, включая OpenVMS , Microsoft Windows и UNIX-подобных системы. Фактически, они являются просто сигналами, необходимыми операционной системе для выделения памяти работающим программам.
Отказ страницы, который в Linux-подобных системах называется лёгким ( англ. minor ) , а в Windows — программным ( англ. soft ) , означает, что требуемая страница либо уже находится в оперативной памяти, но не отмечена в блоке управления памятью как загруженная, либо она вновь выделена и ещё ни разу не использовалась. Обработчик исключения в операционной системе должен только добавить запись в таблицу страниц для требуемой страницы и указать, что она загружена в память. Загрузка страницы с диска не требуется. Отказ происходит в следующих случаях :
Поскольку обработка таких отказов не сопровождается задержкой для обращения к диску, они обрабатываются быстрее значительных или аппаратных отказов.
Отказ страницы, который в Linux-подобных системах называется значительным ( англ. major ) , а в Windows — аппаратным ( англ. hard ) , является основным механизмом, используемым операционной системой для выделения программам памяти по их запросу. Операционная система откладывает загрузку частей программы с диска до тех пор, пока программа не попытается получить доступ к ним и тем самым сгенерирует отказ страницы. Если страница не загружена в память на момент отказа, тогда отказ называется значительным или аппаратным. Обработчик отказа страницы в операционной системе должен найти свободное место в оперативной памяти: свободную либо занятую страницу. Занятая страница может принадлежать другому процессу. В этом случае операционная система должна выгрузить данные этой страницы на диск (если они не были выгружены ранее) и пометить эту страницу в таблице страниц процесса как отсутствующую в памяти. Как только свободное место становится доступным, операционная система может загрузить данные для новой страницы в память, добавить её физический адрес в таблицу страниц исходного процесса и пометить страницу, как находящуюся в памяти. Необходимость обращения к диску делает обработку таких отказов гораздо более медленной по сравнению с лёгкими.
Если отказ страницы возникает при обращении к адресу, не принадлежащему виртуальному адресному пространству процесса, то есть страницы в памяти, соответствующей этому адресу, не может быть, тогда этот отказ называется отказом недействительной страницы ( англ. invalid page fault ). Обработчик отказа страницы в операционной системе в этом случае, как правило, передает ошибку сегментации исходному процессу, показывая, что обращение было недействительным. Это приводит к аварийному завершению блока кода, выполнившего недействительное обращение. Примером недействительного обращения является разыменование нулевого указателя . Нулевой указатель — это указатель, не ссылающийся ни на какой объект. Обычно он представляется как указатель на адрес 0. Большинство операционных систем не включают страницу, содержащую нулевой адрес, в адресное пространство процесса, поэтому попытки чтения или записи памяти через нулевой указатель приводят к отказу недействительной страницы.