системы часто строятся послойно, в т.ч. в операционных системах этот принцип тоже прослеживается. Меня интересует вопрос создания атомарной операции на некотором уровне этой системы. Атомарность здесь в смысле "после выполнения операции система или практически в том же состоянии, что и до, или полностью перешла в корректное новое состояние". Не бывает, что произошло ужасное и система осталась в "грязном" состоянии (кроме совсем ужасных ситуаций типа взрыва бомбы).
В этой книжке (конкретно в этой главе) я прочитал, что рапространённый способ этого свойства достичь — разбить операцию на три части:
1. Подготовка (всякая блокировка ресурсов и т.д.) — часть, которую всегда можно откатить и которая не приводит к разрушению текущего состояния
2. Атомарная операция-"коммит" более низкого уровня
3. Часть, которая зафейлиться не может, или можно всегда её доделать: разблокировка ресурсов и т.д.
Вопрос первый. Правда ли, что CAS инструкции появились как атомарные операции самого низкого уровня, удобные для реализации атомарных операций более высокого уровня? Например, формировать новое состояние не деструктивно, а рядом со старым, а затем поменять указатель на состояние атомарно с помощью CAS.
Атомарность в этом смысле кажется очень хорошим свойством со многих точек зрения. Прежде всего она прощает систему и делает менее "дырявыми" абстракции. Не надо думать, а что произойдёт если операция высокого уровня дойдёт до половины.
Вопрос 2. Как часто при проектировании ОС разработчики думают об атомарности операций высокого уровня?
Приём с разбиением операции на три части подразумевает, что в случае фейла первый этап можно откатить назад. Соответственно, кажется полезным вообще все действия на любых уровнях стараться делать обратимыми.
Например, на уровне N есть действия a1, a2, ... an. На уровне N+1 есть действие b реализованное через атомарные операции a1, a2 и a3. Выполняем b; a1 и a2 выполнились корректно, а a3 нет. Тогда чтобы b был атомарным необходимо уметь откатить a1 и a2.
Вопрос 3. Это вообще верное рассуждение? И как часто при проектировании ОС разработчики думают об обратимости тех или иных операций?
compare-and-swap обычная атомарная операция
Обсуждают сегодня