Я хочу знать, как ядро linux, используемое в Ubuntu, управляет одновременным доступом к общим данным?
Сэр, я думаю, у вас неправильное представление о том, что такое блокировка и для чего нужен мьютекс. Кроме того, у вас неправильное представление о том, что такое Ubuntu.
Давайте начнем с последнего: Ubuntu - это дистрибутив на основе Linux . Все компоненты системной архитектуры низкого уровня выполняются ядром Linux. Ubuntu - это просто способ собрать различные части программного обеспечения, настроить, установить и обновить их надежным, единообразным и удобным для пользователя способом. Таким образом, ваш вопрос относится к Linux, а не к Ubuntu.
Мьютексы используются для того, чтобы гарантировать, что к общим ресурсам (таким как память) по ошибке не обращаются и не изменяют их одновременно. Поскольку процессы в целом не разделяют такие ресурсы, как память (ни в Windows, ни в Linux), проблема возникает, когда используются потоки , а не процессы. Это делается с помощью мьютексов, в этом вы правы; здесь вы найдете больше информации об этом. Linux использует потоки POSIX. Однако, используете ли вы - как программист - мьютексы или что-то еще (например, спин-блокировки или критические секции), это зависит от вас, а не от системы (см. здесь ), будь то Windows или Linux.
Что касается процессов, нужна блокировка файлов, но это уже другая история. И да, процессы реализованы по-разному в Windows и в Linux (что наиболее важно при планировании; см. эту презентацию, чтобы пролить некоторый свет на это).
До версии 2.6 Linux была неперегрузочным ядром. Теперь он полностью вытесняет, поэтому задачу можно выполнять при запуске в ядре.
Ядро Linux предоставляет спин-блокировки и семафоров для блокировки в ядре. На машинах SMP основным механизмом блокировки является спин-блокировка , а ядро спроектировано таким образом, что спин-блокировка удерживается только в течение коротких периодов времени.
Это не подходит для однопроцессорных машин. В однопроцессорных машинах ядро отключает выгрузку ядра ; и вместо освобождения спин-блокировки , он отключает ядро с вытеснением .