Синхронизация процессов

Факторы, определяющие часть кода как критическую секцию

Насколько я понимаю, process synchronization используется с использованием структур данных ядра, таких как semaphores, для предотвращения одновременного доступа к critical section кода. В целом я вижу следующие определения: критическая секция — это фрагмент кода, который может получить доступ к общим данным (или) общим ресурсам. Итак, вопросы:

  • Общие данные — это объект пользовательского пространства. Следовательно, пользовательский процесс несет ответственность за обеспечение согласованности своего доступа.
  • Я предполагаю, что одновременный доступ к ресурсам несколькими процессами — это то, о чем должно позаботиться ядро. Какая синхронизация на уровне пользователя требуется?
  • Каковы факторы, по которым часть кода в программе пользовательского пространства считается критическим разделом.

person Vivek Maran    schedule 08.11.2012    source источник


Ответы (2)


Вы смешиваете «пространство ядра/пространство пользователя» с «критическим разделом».
Пространство ядра/пользователя определяет только то, какими привилегиями обладает процесс. Если поток выполняется в пользовательском пространстве, он не может получить прямой доступ к физической памяти. Он должен пройти через управление виртуальной памятью ядра.
С другой стороны, критический раздел — это часть кода, выполнение которой двумя процессами параллельно может привести к повреждению данных. Это происходит из-за того, что код обращается к некоторому общему ресурсу.
Эти две концепции независимы. Критическая секция может находиться либо в пространстве пользователя, либо в пространстве ядра. Необходима какая-то синхронизация, чтобы избежать повреждения общего ресурса. Даже в случае, когда два процесса/потока работают в режиме ядра и хотят получить доступ к общему ресурсу, им необходимо применить какой-то механизм синхронизации (спин-блокировки или мьютекс).

Я надеюсь, что это объясняет, помогает.

person Harman    schedule 09.11.2012

Синхронизация между процессами может быть реализована с помощью именованных объектов синхронизации. Функции синхронизации Windows предлагает, например, именованные мьютексы и именованные семафоры. См. этот ответ для Линукс.

Общие ресурсы ряда процессов могут, например, быть общей памятью.

Использование термина critical section так, как это делается в вопросе, немного вводит в заблуждение, поскольку существуют Объекты критической секции (Windows), связанные с синхронизацией потоков.

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

Однако любой общий ресурс, будь то разделяемая память или любой другой объект, должен быть защищен от одновременного доступа во время работы.

person Arno    schedule 08.11.2012