Что это означает, что код, содержащий семафор, может быть выгружен - PullRequest
0 голосов
/ 03 ноября 2018

Я просматривал книгу о любви Роберта и был немного озадачен этой строкой. Что означает, что код, содержащий семафор, может быть выгружен?

Если прерывание происходит при доступе к той же переменной, которая есть у приложения пользовательского пространства, когда он выполняет код в критической секции, тогда приложение пользовательского пространства может быть выгружено?

Если мое понимание выше верно, то нет другой альтернативы, кроме спин-блокировки, чтобы отключить прерывание, когда приложение из пользовательского пространства находится в критической секции?

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

1 Ответ

0 голосов
/ 08 ноября 2018

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

Хотя для отключения прерываний есть несколько файлов spin_lock_XXX, вы можете использовать spin_lock_irqsave , поскольку он сохраняет флаги прерываний на этом ядре и восстанавливает их при снятии блокировки.

...