The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Ловушки в scull

Ловушки в scull

Предыдущая  Содержание  Следующая V*D*V

Давайте кратко рассмотрим фрагмент кода управления памятью в 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, но сначала мы должны получить более общее представление о конкуренции.

Предыдущая  Содержание  Следующая