deadlock-сценарием в шедулере, когда список процессов лежит под мьютексом, а для переключения контекстов надо иметь поинтеры на структуры внутри процессов. Если просто брать лок на список процессов и переключать контекст, то будет дедлок:
1. Вход в шедулер, берётся лок на процессы и запускается контекст 1
2. Таймер говорит переключать процесс
3. Шедулер пробует взять лок на процессы, чтобы переключиться на контекст 2 и висит, потому что контекст 1 до сих пор не дропнул лок.
как вариант временное повышение значимости потока(до игнорирования других), на время блокировки списка потоков, но это нарушает нормальное распределение времени на потоки. можно ещё более кринж вариант с cli sti
А зачем держать лок при переключении процесса?
а вот так делать нельзя
Прерывания маскировать?
Обсуждают сегодня