Цитата Сообщение от lvd
Дык ну и вот, в момент этого добровольного пропуска тебе приходит инт и ты его запросто пропускаешь. Вот о чём речь, а не о том, как это сделать.
когда приходит инт, возможны две ситуации
-процесс вытеснится
-процесс останется тот же самый

если мы в процедуре пропуска кванта запрещаем прерывания, а в это время приходит сигнал, он игнорируется (я как понял, тебя это беспокоит). но мы следующим шагом идем в обработчик прерываний, который в итоге даст первую ситуацию. так что тут мы ничего не теряем.
исключение составляет очередь процессов реального времени, обязанных выполняться по очереди каждое прерывание. для них нужно вводить специальный флаг, который будет выставляться каждое прерывание обработчиком и сниматься диспетчером по окончанию обработки той очереди. но тут есть узкое место- в предложенной ситуации пропуск прерывания означает вероятный пропуск диспетчеризации очереди процессов реального времени. как вариант, можно использовать отложенные прерывания. например:

int_routine:
push af
ld a,(int_flag)
or int_comeon
ld (int_flag),a
and pended_interrupt
jr nz,skip_int
push bc
....
pop bc
skip_int:
pop af
ei
ret

;somewhere in system
yield
ld a,(int_flag) ;beneath DI
or pended_interrupt
ld (int_flag),a
...