• Компьютер депо

    компьютер депо

    www.depo.ru





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


Обновление отрезка времени у процесса реального времени

Если текущий процесс является процессом реального времени, принадлежащим классу планирования "первым вошел — первым вышел”, функции scheduier tick ничего не нужно предпринимать. Фактически, в этом случае текущий процесс не может быть вытеснен процессом с меньшим или равным приоритетом, и, следовательно, нет смысла поддерживать корректное значение счетчика отрезка времени.

Если текущий процесс является процессом реального времени, работающим по круговому принципу, функция scheduier tick уменьшает его счетчик отрезка времени и проверяет, истек ли этот квант:
if (current->policy == SCHED_RR && !—current->time_slice) { current->time_slice = task_timeslice(current); current->first_time_slice = 0; set_tsk_need_resched(current); list_del(¤t->run_list); list_add_tail(¤t->run_list,
this_rq()->active->queue+current->prio);}
Если функция определяет, что квант времени фактически исчерпан, она выполняет некоторые действия, нацеленные на то, чтобы текущий процесс был как можно скорее вытеснен, если это необходимо.

Первое из этих действий заключается в пополнении” счетчика отрезка времени данного процесса С ПОМОЩЬЮ функции task timesliceO . Эта функция рассматривает статический приоритет процесса и возвращает соответствующий базовый квант времени согласно формуле (1), приведенной ранее в этой главе. Кроме того, сбрасывается поле first time siice процесса current: этот флаг был установлен функцией copy process о в служебной процедуре системного вызова fork и должен быть сброшен, как только истечет первый квант времени процесса.

Затем функция scheduler_tick вызывает функцию set_tsk_need_resched(), чтобы установить у процесса флаг tif need resched. ЭТОТ флаг приводит К вызову функции schedule , с тем, чтобы процесс current был замещен другим процессом реального времени с тем же (или более высоким) приоритетом, если таковой имеется.

Заключительное действие функции scheduier ticko состоит в переносе дескриптора процесса на последнее место в списке активных процессов (в очереди на выполнение) соответственно приоритету процесса current. Помещение текущего процесса в конец очереди гарантирует, что он не будет снова выбран для выполнения, пока каждый выполняемый процесс реального времени с тем же приоритетом, что и у current, не получит отрезок процессорного времени. В этом весь смысл кругового планирования. Дескриптор переносится следующим образом: вначале вызывается функция list deio для удаления процесса из списка активных процессов в очереди на выполнение, а затем — функция list add taii о для постановки процесса на последнее место в том же списке.

Предыдущая страница | 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 без проблем

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга для вас. А так как к книге прилагается компакт- диск с готовой к работе операционной системой Knoppix Live CD, то лишь достаточно вставить его в привод и перегрузить компьютер,...

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

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

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

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно неуклюже: получив системный вызов fork о, ядро в буквальном смысле дублировало все адресное пространство родителя и присваивало копию процессу-потомку. Такая операция...

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

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