Как ядро ​​узнает о сбое в сегменте? - PullRequest
1 голос
/ 17 января 2012

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

Ответы [ 4 ]

2 голосов
/ 17 января 2012

Детали будут различаться в зависимости от платформы, о которой вы говорите, но обычно MMU генерирует исключение (прерывание), когда вы пытаетесь получить доступ к недопустимому объему памяти, а затем ядро ​​обрабатывает это как часть подпрограммы обработки прерывания..

1 голос
/ 17 января 2012

Чтобы ответить на вторую часть вашего вопроса, опять же, это зависит от оборудования и ОС.В типичной системе (т. Е. X86) ЦПУ обращается к регистрам сегментов (через глобальные или локальные таблицы дескрипторов), чтобы превратить относительный адрес сегмента в виртуальный адрес (это обычно, но не всегда, запрет на работу в современных системах x86).системы), а затем (MMU делает этот бит действительно, но на x86 его часть ЦП) обращается к таблицам страниц, чтобы превратить этот виртуальный адрес в физический адрес.Когда он встречает страницу, которая не помечена как присутствующая (текущий бит не установлен в каталоге или таблицах страниц), он вызывает исключение.Когда ОС обрабатывает это исключение, она либо сдается (вызывая сигнал segfault, который вы видите при совершении ошибки или паники), либо она изменяет таблицы страниц, чтобы сделать память действительной и продолжить с исключения.Как правило, в ОС есть некоторая бухгалтерия, в которой говорится, какие страницы могут быть действительными и как получить страницу.Так происходит пейджинг по требованию.

1 голос
/ 17 января 2012

Ошибка сегмента обычно возникает, когда процесс пытается получить доступ к памяти, которую ЦП не может физически адресовать. Это оборудование, которое уведомляет ОС о нарушении доступа к памяти. Затем ядро ​​ОС посылает сигнал процессу, вызвавшему исключение

0 голосов
/ 01 марта 2013

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

...