понедельник, 6 декабря 2010 г.

5.1 Ловушки в scull.

Ловушки в scull


Давайте кратко рассмотрим фрагмент кода управления памятью в scull. Глубоко внутри логики write, scull должен решить, требуется ли выделение памяти или нет. Фрагмент кода, который решает эту задачу:

if (!dptr->data[s_pos]) {
    dptr->data[s_pos] = kmalloc(quantum, GFP_KERNEL);
    if (!dptr->data[s_pos])
        goto out;
}

Предположим на минуту, что два процесса (назовём их "А" и "Б") независимо друг от друга пытаются записать по тому же самому смещению в то же самое устройство scull. Каждый процесс доходит до проверки if в первой строке вышеприведённого фрагмента в одно и то же время. Если указатель в запросе является NULL, каждый процесс примет решение о выделении памяти, каждый в результате присвоит указателю значение для dptr->data[s_pos]. Поскольку оба процесса указывают на одно и то же место, ясно, что лишь одно из присвоений будет преобладать.

Что приведёт, конечно, к тому, что процесс, который завершает установку вторым и будет "победителем". Если процесс А делает присвоение первым, его назначение будет перезаписано процессом Б. В этот момент scull полностью забудет о памяти, которая выделяется А; он имеет только указатель на память процесса Б. Память, выделенная таким образом процессом А, будет потеряна и никогда не вернётся к системе.

Такая последовательность событий является демонстрацией гонок условий (или состояния гонок). Состояния гонок являются результатом неконтролируемого доступа к общим данным. Неправильная модель доступа приводит к неожиданным результатам. Для гонки условий, обсуждаемой здесь, результатом является утечка памяти. Это плохо, но состояния гонок часто могут привести к падениям системы, повреждённым данным, а также к проблемам с безопасностью. Программисты могут поддаться искушению игнорировать состояния гонок как событие с крайне низкой вероятностью. Но в компьютерном мире события "одно на миллион" могут происходить раз в несколько секунд и последствия могут быть серьёзными.

В ближайшее время мы ликвидируем гонки условий в scull, но сначала мы должны получить более общее представление о конкуренции.

Переведено на сайте www.notabenoid.com
http://notabenoid.com/book/11832/38274
Внимание! Этот перевод, возможно, ещё не готов,
так как модераторы установили для него статус
"перевод редактируется" 

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.