[#] Преемптивность: как отнять процессор
habrabot(difrex,1) — All
2016-04-20 20:30:02


Эта статья не имеет смысла без [предыдущей, в которой описывались основные механизмы переключения контекстов в многозадачной ОС][1]. Здесь я расскажу, как кооперативная многозадачность превращается во преемптивную. Суть этого превращения проста. В машине есть таймер, таймер генерирует прерывания, прерывания приостанавливают код нити и отдают процессор в руки механизма многозадачности. Оный уже вполне кооперативно переключает процессор на новую нить, как и описано в [предыдущей статье][2]. Но, как обычно, есть нюансы. См. [код для интела][3]. Сам «отъём» процессора делается как в рамках обычного хардверного прерывания, обычно — по таймеру, так и в рамках «софтверного» прерывания — которое, собственно, такое же прерывание, но вызванное специальной инструкцией процессора. Такой способ переключения контекста нужен, если мы (например, в рамках примитива синхронизации) явно останавливаем нить и не хотим ждать, пока прилетит таймерное прерывание. [Читать дальше →][4]

[1]: https://habrahabr.ru/post/282037/
[2]: https://habrahabr.ru/post/282037/
[3]: https://github.com/dzavalishin/phantomuserland/blob/master/oldtree/kernel/phantom/i386/interrupts.c
[4]: https://habrahabr.ru/post/282049/#habracut