что это аппаратные прерывания, но допустим что проц одноядерный, если это ядро исполнило jmp some_entry, то само себя оно не сможет прервать после 1000 инструкций? или как
программируется таймер на заданном ядре. Таймер просит ядро выполнить прерывание. В коде прерывания сначала дается отмашка таймеру, чтобы не лупил больше запросами. Потом запускается шедулер, который при необходимости перекидывает потоки с/на сдро. При этом определяется, должен ли текущий поток быть смещен. На выходе из прерывания происходит своп (обмен) стеков активного потока и следующего в очереди на исполнение. После обмена стеков, у тебя в регистрах уже новый SP, который по выходе в юзерспейс восстановится наряду со счетчиком команд
Взводишь таймер, когда тикнул - переключаешь контекст.
а таймер инкрементируется от выполненных инструкций или от физического времени? или есть оба типа?
По времени. Таймера по инструкциям я не припомню
rdtsc вроде счётчик тактов ведёт, очень условно можно думать что команды считает
Архитектурно-зависимо. Но я недостаточно армы и прочие risc-v знаю, чтобы утверждать, что там такого нет.
ну так его прервёт прерывание
Обсуждают сегодня