Вероятно, лучше всего начать читать код для определенных операционных систем:
Функция kernel/sched.c
ядра Linux sched_fork()
, вероятно, является хорошим местом для начала чтения; он запускает совершенно новую задачу, поэтому мне кажется, что он дает вам хороший обзор внутренних функций планировщика и управления памятью задач.
Функция sys/kern/sched.c
ядра FreeBSD sched_switch()
напрямую переключается между текущим процессом и следующим процессом; это, вероятно, легче читать, чем вариант Linux.
Другие операционные системы могут по-разному обрабатывать переключатели контекста. (Один из моих менеджеров работал над операционной системой, которая заменила универсальный код таблицы процессов кодом для перехода к следующей задаче, которая должна быть запланирована , среди других классных оптимизаций, специфичных для данных времени выполнения.)
Веб-сайт FXR позволяет легко следить
код в различных операционных системах. (Спасибо, Роберт, если вы читаете!) Из списка FXR я бы предложил изучить Plan9, Minix и OpenSolaris - они дальше от дерева FreeBSD, чем другие, более связанные, производные от BSD дистрибутивы.