Планировщик Linux

Отслеживание прохождения switch_to() на РРС

Результат реализации switch_to() на РРС не обязательно идентичен вызову х86; он берет указатели на current и next задачи и возвращает указатель на предыдущую выполнявшуюся задачу:

include/asm-ppc/system.h
38 extern struct task_struct * switch_to(struct task_struct *,
39 struct task_struct *);
90 #define switch_to(prev, next, last)
((last) = switch_to((prev), (next)))
91
92 struct thread_struct;
93 extern struct task_struct *_switch(struct thread_struct *prev,
94 struct thread_struct *next),-

В строке 88 switch_to () получает параметр типа task_struct и на строке 93

Отслеживание context_switch{) на РРС

Код context_switch() для РРС делает немного больше работы для получения того же результата. В отличие от регистра сгЗ на архитектуре х86, РРС использует функцию юпирования для указания на окружение контекста. Следующий код для switch_mm() изсается этой функции, но в гл. 4, «Управление памятью», находится его более подробное описание.
Здесь приведена функция switch_mm(), которая, в свою очередь, вызывает функцию set_context ().
include/asm-ppc/mmu_context.h 155 static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,struct task_struct *tsk)
1:6 {

Переключение контекста

Функция context_switch (), вызываемая из schedule () в /kernel/sched. с, вы-шадняет специфическую для системы работу по переключению окружения памяти и состояния процесса. На абстрактном уровне context_switch переключает текущую за-JB4Y и следующую задачу. Функция context_switch () начинает выполнение следующей задачи и возвращает указатель на структуру задачи, которая выполнялась до вызова:

ismel/sched. с
1143 /*
1149 * context_switch - переключение на новый ММ и новое
1X53 * состояние регистра потока.
1151 */
1152 static inline

Выбор следующей задачи

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

Планировщик Linux

В ядре Linux 2.6 представлен полностью новый планировщик, называемый также планировщиком 0(1). Это значит, что планировщик выполняет планирование выполнения шач за константное время . Гл. 3 описывает базовые структуры планировщика, их инициализацию при создании процессов. Этот раздел описывает, как задачи выполняются на единственном процессоре. Мы будем упоминать о планировщике для многопроцессорной системы (SMP), но в общем процессы внутри всех планировщиков совпадают.

RSS-материал