Спин-блокировки в однопроцессорном и многопроцессорном режимах

Я прочитал и изучил, как работают спин-блокировки. Теперь у меня вопрос, на который я не могу найти исчерпывающий ответ:

как они работают в среде UP (однопроцессорная) и в среде SMP (симметричная многопроцессорная)? В чем отличия и проблемы?


person Johnny Pauling    schedule 23.03.2013    source источник


Ответы (1)


Спин-блокировки практически бесполезны в случае UP. Они просто сожгут свой отрезок времени. Лучше бы они спали в UP. В случае SMP спин-блокировки могут быть предпочтительнее спящего режима, если ожидаемое время ожидания меньше среднего времени, необходимого для повторного получения кванта времени для этого потока.

Отвечая на ваш вопрос "как они работают"? Везде одинаково, просто тратя процессорное время на свой квант времени.

person Andrey    schedule 23.03.2013
comment
Интересно, а как насчет потоков ядра? У них нет временных отрезков, я полагаю, не так ли? - person Johnny Pauling; 23.03.2013
comment
@JohnnyPauling, насколько я знаю (не уверен на 100%), потоки ядра являются обычными потоками с точки зрения разделения времени, просто с более высоким приоритетом. Теоретически вы можете разработать ОС, в которой ядро ​​​​может приостановить планирование, но я не уверен, что это возможно/используется в основных ОС. - person Andrey; 23.03.2013
comment
Я не эксперт по ядру, так что это что-то новое для меня. Действительно ли такие ОС, как linux/windows/OSX, используют разделение времени даже для потоков ядра? - person Johnny Pauling; 23.03.2013
comment
@JohnnyPauling Я думаю, у вас есть путаница в терминах. Вы имеете в виду что-то другое под потоком ядра, я думаю, что под потоком ядра вы имеете в виду системный поток, но на самом деле потоки ядра — это нечто другое: en.wikipedia.org/wiki/ - person Andrey; 24.03.2013
comment
@JohnnyPauling, и да, по-видимому, ВСЕ потоки действительно запланированы, даже системные потоки. - person Andrey; 24.03.2013
comment
@Andrey зависит от уровня приоритета планировщика. Если исполняемый фрагмент кода имеет хотя бы тот же приоритет, что и планировщик, он не будет вытеснен. Например, в Windows получение спин-блокировки в ядре приведет к такому эффекту — критический раздел не будет вытеснен. - person SomeWittyUsername; 25.03.2013
comment
@icepack, что вы имеете в виду под тем же приоритетом, что и у планировщика? Вы подразумеваете, что планировщик имеет приоритет? - person Andrey; 25.03.2013
comment
Планировщик @Andrey — это процесс/поток, работающий в фоновом режиме. Как и любой другой поток, он имеет связанный с ним приоритет (если говорить в терминах ядра Windows — IRQL). - person SomeWittyUsername; 26.03.2013
comment
@icepack мы говорим о разных приоритетах, проверьте это msdn.microsoft.com/en-us/library/windows/desktop/ и ниже есть комментарий, который показывает путаницу - person Andrey; 26.03.2013
comment
@icepack asher2003.wordpress.com/2010/12 /27/ - person Andrey; 26.03.2013
comment
@Андрей Да, в этой теме есть некоторая путаница. Я имел в виду приоритеты ядра (те, которые описаны в вашей второй ссылке). Планировщик работает на уровне Dispatch (== уровень IRQL 2 в вашей ссылке), и если какой-то код работает по крайней мере на этом уровне, он никогда не будет вытеснен (может произойти только с кодом в режиме ядра) - person SomeWittyUsername; 26.03.2013