Linux Kernel (Ядро линукса) (часть 1)


Алгоритм планирования

Алгоритм планирования, применявшийся в ранних версиях Linux, был довольно прост и прямолинеен. При каждом переключении процессов ядро просматривало список выполняемых процессов, вычисляло их приоритеты и выбирало "наилучший" процесс. Основной недостаток такого алгоритма заключается в том, что время, потраченное на выбор процесса, зависит от количества выполняемых процессов. Алгоритм оказывается слишком дорогим (то есть расходует слишком много времени) в системах типа high-end, где выполняются тысячи процессов.

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

Планировщику всегда удается найти процесс, который следует выполнить. Всегда существует, по меньшей мере, один выполняемый процесс — процесс swapper, который имеет идентификатор, равный 0, и выполняется лишь тогда, когда процессор не может выполнить другие процессы. каждый процессор в многопроцессорной системе имеет свой процесс swapper с идентификатором, равным нулю.

Выполнение любого процесса в Linux всегда планируется в соответствии с одним из следующих классов планирования:

- sched fifo— процесс, работающий в реальном времени по принципу "первым вошел — первым вышел". Когда планировщик предоставляет процессор такому процессу, он оставляет дескриптор процесса на том же месте в очереди на выполнение. При отсутствии других выполняемых процессов реального времени с более высоким приоритетом данный процесс продолжает пользоваться процессором, сколько ему нужно, даже если имеются выполняемые процессы реального времени с тем же приоритетом;
- sched rr — процесс, работающий в реальном времени по круговому принципу. Когда планировщик предоставляет процессор такому процессу, он переносит дескриптор процесса в конец очереди на выполнение. Эта политика обеспечивает справедливое распределение времени процессора между всеми процессами реального времени, принадлежащими к классу sched rr и имеющими одинаковый приоритет;
- sched normal — обычный процесс, работающий в режиме разделения времени.

Алгоритм планирования ведет себя по-разному в зависимости от того, является ли процесс обычным или процессом реального времени.

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

Linux Kernel (Ядро линукса) (ч...

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть...

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...