Size: a a a

2021 February 20

FS

Flower Surgeon in supapro.cxx
Ты лучше погляди как это в других модулях ядра сделано. И почитай доки заодно.
источник

КП

Котеечко Пухнастиньк... in supapro.cxx
доставляет мне его аватарка))
источник

КП

Котеечко Пухнастиньк... in supapro.cxx
спасибо
источник

s

std::slavik in supapro.cxx
Котеечко Пухнастиньке
так

но у нас же SMP система

много ядер, много потоков

общая память
ключевое тут - общая память
источник

s

std::slavik in supapro.cxx
есть разделяемый аппаратный ресурс
источник

s

std::slavik in supapro.cxx
и чтобы обеспечить непрерывное выполнение участка кода который с этим ресурсом взаимодействует - запрещаются прерывания
источник

s

std::slavik in supapro.cxx
тогда можно гарантировать что между инструкциями последовательными ничего другого не произошло
например прерывания в котором тоже с этой памятью что-то делается
источник

s

std::slavik in supapro.cxx
в простейшем случае - мы просто запрещаем прерывания и после этого уверены можем быть что программный счетчик не переключится сам по себе в произвольный момент
источник

s

std::slavik in supapro.cxx
и поскольку при этом блокируется все остальное - в таких секциях нужно проводить минимальное время - буквально несколько инструкций
источник

s

std::slavik in supapro.cxx
например - мы хотим реализовать семафор - по какому-то адресу в памяти записываем 0. для того чтобы увеличить на 1 или уменьшить это значение мы должны несколько инструкций выполнить последовательно - прочитать из памяти в регистр значение, увеличить значение в регистре на 1, записать обратно значение в память
и этот блок инструкций должен выполняться атомарно
источник

s

std::slavik in supapro.cxx
если мы прочитаем значение из памяти в регистр, а затем произойдет прерывание, которое переключит контекст на другой поток, в котором тоже самое делается - получится что оба потока прочитали одно и то же значение, увеличили на 1 и записали
в итоге должно быть 2 значение, а будет 1
источник

КП

Котеечко Пухнастиньк... in supapro.cxx
std::slavik
например - мы хотим реализовать семафор - по какому-то адресу в памяти записываем 0. для того чтобы увеличить на 1 или уменьшить это значение мы должны несколько инструкций выполнить последовательно - прочитать из памяти в регистр значение, увеличить значение в регистре на 1, записать обратно значение в память
и этот блок инструкций должен выполняться атомарно
так
источник

s

std::slavik in supapro.cxx
чтобы гарантировать атомарность выполнения блока - запрещаются прерывания
потом разрешаются
источник

КП

Котеечко Пухнастиньк... in supapro.cxx
тоесть атомарность - это когда вся деятельность на машине замирает буквально на несколько инструкций?
источник

s

std::slavik in supapro.cxx
по сути - да
не вся деятельность
а прерывания
и не обязательно глобально
но это уже детали
на современных процессорах есть специальные инструкции всякие
но суть такая
источник

КП

Котеечко Пухнастиньк... in supapro.cxx
но как такое возможно?
источник

КП

Котеечко Пухнастиньк... in supapro.cxx
погоди. блин. есть 2 ядра. физических. ядра.
источник

RB

Rustem B. in supapro.cxx
Вопрос
Существует header, который реализует (полностью или частично) функционал windows.h под Линукс?
источник

/

/dev/desider in supapro.cxx
скиньте пожалуйста аудиокнигу по с++
источник

MK

Mikhail Kalugin in supapro.cxx
Котеечко Пухнастиньке
тоесть атомарность - это когда вся деятельность на машине замирает буквально на несколько инструкций?
Не вообще вся, а пользовательская - в этом состояние весь CPU в распоряжение ядра.
источник