Как операционная система вызывает запланированную пользователем задачу, которую нужно выполнить, когда наступит ее время? - PullRequest
0 голосов
/ 14 апреля 2019

Я не уверен, как сформулировать этот вопрос, но я буду стараться изо всех сил. Когда мы планируем какое-то абстрактное задание в режиме реального времени, как оно вызывается вовремя (заданием может быть все, что запланировано на определенное время, например, будильник, который будит вас утром)? Что происходит на самом низком уровне программного обеспечения? Например, в .NET WaitHandle.WaitOne (1000), как это реализовано? Есть ли какой-то планировщик операционной системы (я не говорю о временном разрезе между потоками), который каждая программная платформа использует для планирования своей задачи? Когда системные часы идут на один такт, это как-то говорит операционной системе: «Эй, один тик истек, увеличьте системное время!». А затем операционная система увеличивает время и говорит планировщику проверить, запланированы ли какие-либо события в это новое время? Или планировщик работает в отдельном потоке в бесконечном цикле, проверяет системное время в каждой итерации и проверяет, есть ли у него запланированные действия? Или нет планировщика, и каждый компонент выполняет бесконечные циклы самостоятельно? Я предполагаю, что идея одинакова в каждой операционной системе, но если нет, меня особенно интересует, что происходит в ОС Windows и .NET.

С уважением,

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Существует нечто, называемое программируемый интервальный таймер. Он может быть запрограммирован на подсчет количества тиков и затем посылать сигнал в os. ОС затем проснется процесс. Чтобы узнать больше о PIT, обратитесь к osdev

0 голосов
/ 15 апреля 2019

Состояние процесса определяется набором регистров, называемых контекстом процесса. Этот набор регистров включает значения общих регистров и системных регистров, которые доступны только в режиме ядра.

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

Чтобы переключить контекст с одного процесса на другой, операционная система обеспечивает сохранение регистров текущего процесса на своей печатной плате, а затем загружает регистры с печатной платы нового процесса.

Большинство процессоров загружают контекст процесса и сохраняют инструкции контекста процесса, чтобы это можно было сделать сразу. Ряд некомпетентно спроектированных процессоров, которые широко используются, могут требовать нескольких инструкций для выполнения этих задач.

...