И снова доброго времени суток Прочел про irql у Руссинович, у Солдатова но так и не появлиось четкого понимая того каким образом реализуется вытеснение потоков по истечению отведенного им кванта. Пусть есть поток, который выполняется на уровне IRQL DISPATCH_LEVEL. Ну тикают часики, отсчитвающие такты и грубо говоря уменьшающие значения какой-то переменной или значения символизирующего что еще "не пора"(тут честно говоря не понял, где этно значение хранится). Когда д время отведеное потоку истекло, то происходит... собственно что происходит?Я поначалу было думал что тупо происходит "попытка вызвать" диспетчер:если текущий irql не маскирует irql диспетчера то все ок, если нет, то продолжается выполнение, пока irql не снизится до уровня когда можно будет нагрузить диспетчер. Однако всретил такую цитату Но постойте, каким образом процессор с уровня dispatch_level вдруг перескочил на CLOCK_LEVEL еще и минуя дисетчер и уже какая то программа выполняется?А где наш первоначальный процесс как это контекст так лихо переключили? Я понимаю что скорее всего приведенная цитата, както ущербно описывает интересующий механизм, но в то же время думаю что я и сам дурак. Проясните пожалуйста как происходит вытеснение по истечению отведенного птоку времени!Или ткните носом, где читать.
Процессор ничего не знает о IRQL. Это чисто програмное свойство процесса(треда). IRQL определяет кто кого может прервать. Своего рода приоритет. (не путать с приоритетом потока) Поскольку CLOCK_LEVEL имеет высший приоритет чем DISPATCH_LEVEL то обработчик прерывания от часов без проблем прерывает поток, исполняющийся с низшим уровнем. Диспетчер тут ни при чем. Диспетчер - это тоже поток и он сам может быть прерван чем-то более приоритетным.
Да да это понятно все, но одно ты дополнил, Partner, значит обработчик прерывания часв сначала получает проц под свои какие то нужды и пытается вызвать диспетчер.Но тк на clock_level это прерывание маскируется то диспетчер в лучшем случае будет вызван только после того как обработчик прерывания часов закончит свою работу! Спасибо, я просто не понял, что обработчки часиков свой какой-то код делает, думал тупо переменная устанавливается(хз где ) и вызывается диспетчер О и статью great'а тоже читну.Спс!