Что именно является ошибкой страницы памяти? - PullRequest
5 голосов
/ 13 июня 2010

Из документов :

Примечание: основные данные избегают термина невиновен, потому что это сбивает с толку. Там нет «невинной» виртуальной ошибка страницы памяти. Ошибки страницы сработал, вызвал, уволен или встречается. Конечно вы можете освободить память обратно в ядро ​​в разнообразие способов (используя функции vm_deallocate, munmap или sbrk). ядро Данные описывают это как «превращение объект виноват ».

Ошибка в базовых данных - это, по сути, ошибка страницы памяти? У меня есть только небольшое представление о том, что такое страница памяти. Я считаю, что это своего рода «кусок кода в памяти», который необходим для выполнения процедур и тому подобного, и, когда приложение работает, фрагменты кода засасываются в память как «страницы» и выбрасываются, поскольку они не нужно больше Наверное, 99% неправильно;)

Любой

Ответы [ 3 ]

7 голосов
/ 13 июня 2010

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

В памяти существует материал (т. е. код и данные).

Каждая вещь, которая существует в памяти, имеет адрес (адрес памяти).

Адресное пространство памяти (например, 4 ГБ на 32-разрядной машине) делится на «страницы», где каждая страница представляет собой непрерывный фрагмент памяти (например, 4 КБ на страницу).

Адресное пространство отображается (с помощьюCPU и O / S) в RAM (или, возможно, сопоставлены с портами ввода / вывода, но это другая история).

Может быть установлено меньше RAM (например, 1 ГБ), чем есть адресное пространство (например, 4 ГБ), поэтому некоторые вещи (например, наименее использованные) могут быть выгружены (с помощью O / S) из ОЗУ в файл подкачки на диске.Целые, целочисленные страницы (например, блоки по 4 КБ) - это то, что поменяется местами (не отдельные байты).

Когда приложение пытается получить доступ к адресу, который в данный момент не сопоставлен с ОЗУ, это так называемая ошибка страницы.Для обработки ошибки страницы O / S может:

  • Освободить часть ОЗУ, переместив что-то (например, наименее недавно использованное) из ОЗУ на диск
  • Отобразить эту новуюосвободил доступную в настоящее время оперативную память по адресу, к которому приложение пытается получить доступ
  • Поменять в оперативную память с диска все, что должно быть по этому адресу (который в прошлом был заменен с этогоадрес на диск)
  • Возобновить приложение, с которого оно было остановлено: приложение снова пытается получить доступ к этому адресу памяти, только на этот раз без ошибки другой страницы.
3 голосов
/ 13 июня 2010

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

2 голосов
/ 13 июня 2010

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

Этот механизм зависит от реализации ОС.
Для более полного изучения теории операционных систем я бы порекомендовал книгу А.С.Тененбаума "Современные операционные системы".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...