2015-09-29 3 views
2

Я изучаю операционную систему сейчас, и я совершенно смущен двумя понятиями: mutex и атомная операция. По моему мнению, они такие же, но мой учитель ОС дает нам такой вопрос:Есть ли разница между «мьютексом» и «атомной операцией»?

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

Этот вопрос указывает, что мьютекс и атомная операция - это две вещи. Может ли кто-нибудь помочь мне с этим?

ответ

3

Операция atomic не может быть подразделена на более мелкие части. Таким образом, он никогда не будет выполнен на полпути, поэтому вы можете гарантировать, что он всегда будет соблюдаться в согласованном состоянии. Например, современное оборудование реализует операции атомного сравнения и свопинга.

мьютекс (сокращенно mutual exclusion) исключает другие процессы или потоки от выполнения один и тот же фрагмент кода (The critical section). В принципе, это гарантирует, что не более одного потока выполняется данный раздел кода. Мьютекс также называется lock.

Под капотом блокировки должны быть реализованы с использованием аппаратного обеспечения каким-либо образом, а реализация должна использовать гарантии атомарности базового оборудования.

Большинство нетривиальных операций невозможно сделать атомарными, поэтому вы должны либо использовать блокировку, чтобы блокировать другие потоки от работы во время выполнения критической секции, либо вы должны тщательно спроектировать lock-free algorithm, что гарантирует, что все критические операции изменения состояния могут быть безопасно реализованы с использованием атомных операций.

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

1

сначала прочитал @ Даниэль ответ, а затем мой.

Если ваш процессор обеспечивает атомарные инструкции, достаточные для выполнения вашей задачи, вам не нужны Mutex/locks. В вашем случае fetch-increment и fetch-decrement должны быть атомарными, поэтому вам не нужно использовать Mutex.

Атомные операции используют блокировки уровня низкого уровня/аппаратного уровня для выполнения некоторых операций ATOMIC: операции, которые фактически выполняются в одном цикле go/cpu.Поэтому атомарные операции никогда не помещайте системы в неустойчивом состоянии

EDIT

Нет Atomic и мьютекс не то же самое, но две противоположные вещи, используемые для той же цели, убедившись, что состояние системы не должно стать противоречивыми. Вы используете Mutex для операций без ATOMIC, в то время как для операций ATOMIC вы не используете Mutex.

Смежные вопросы