ошибка сегментации и ошибка страницы - PullRequest
24 голосов
/ 05 августа 2011
  1. Мне было интересно, какие различия и отношения существуют между ошибкой сегментации и ошибкой страницы?

  2. Относится ли ошибка сегментации только к модели сегментированной памяти?

    Отказ страницы относится только к модели с постраничной памятью?

    Если оба значения да, так как большинство компьютерных систем, таких как x86 и Linux, используют модель постраничной памяти вместо модели с сегментированной памятью, почему GCC Cкомпилятор иногда сообщает об ошибке сегментации?

Спасибо и всего наилучшего!

Ответы [ 2 ]

29 голосов
/ 05 августа 2011

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

«Сегментация» совсем не связана со старой «моделью сегментированной памяти», используемой ранними процессорами x86;это более раннее использование, которое относится только к части или сегменту памяти.

9 голосов
/ 05 августа 2011

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

...