> man operating_systems
Bossa, framework для разработки планировщиков
Среда для разработки планировщиков, рассмотрение работы планировщиков
на Пятница, 23 Июль 2004, 00:25
добавил: Кристоф Ожие (Christophe Augier) список авторов печатать элемент контента создать pdf-файл  элемент контента
категория Статьи
комментарии: 0
просмотров: 2162


clocktick

Событие clocktick возникает при каждом тике часов CPU. Как правило, планировщик может использовать clocktick как единицу времени, в нашем случае, это необходимо для управления атрибутом time_slice. Выше, в обработчике события new мы установили свойство time_slice в 30, что подразумевает, что процесс может исполняться а течении 30 тиков. Ниже способ обработки этого события, применительно к алгоритму кругового обслуживания:

On system.clocktick {
    running.time_slice--;                    // процесс уже потратил один тик
    if (running.time_slice <= 0) {        // время процесса вышло
        running.time_slice = 30;        // восстанавливаемего время
        running => active;                // и выгружаем его
    }
}

Если процесс израсходовал свое время, он выгружается.

schedule

Мы знаем, что процесс может быть выгружен в течение блокировки и тика процессора. Когда запущенный процесс был выгружен, планировщик должен выбрать следующий процесс для запуска. Алгоритм кругового обслуживания всего лишь выбирает следующий процесс с состоянием active. Таким образом, реализация события schedule очень проста:

On bossa.schedule {
    select() => running;
}

select(), возвращает процесс из списка sorted, выбранный согласно ordering_criteria и любой дополнительной информации о порядке этого списка (в данном случае, fifo). Изменяя состояние этого процесса на running (используя =>) мы объявляем, что выбранный процесс должен быть выполнен (мы изменяем его состояние с active на running).

end

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

On process.end {
    e.target => terminated;
}

Этот обработчик как правило более сложен в случае политик, в которых критерии приема основаны на текущей загрузке планировщика (например, EDF[1]). Эти политики должны знать, когда процессы умирают, таким образом уменьшая нагрузку.

Хватит теории! Покажите мне, как это работает.

В описании выше вы получили краткий обзор того, как происходит написание политики планировщика, используя Bossa. В этом разделе, мы проверим наш планировщик. Полную реализацию и некоторые тестовые программы можно найти в архиве rr.tar.gz [http://www.emn.fr/x-info/bossa/rr.tar.gz] . Конечно, чтобы эти программы запустились правильно, первым делом необходимо загрузить и запустить ядро Bossa.
1.Распакуйте, соберите, установите, и загрузитесь с ядром Bossa [http://www.emn.fr/x-info/bossa/versions/bossa2424.2406.tar.gz] (Примечание: Вы должны использовать make install, чтобы установить ядро и инструменты Bossa), или загрузитесь, используя компакт-диск Bossa [http://www.emn.fr/x-info/bossa/knoppix.iso]
2.Распакуйте архив:

 $ tar zxf RR.tar.gz
      $ cd RR
      $ ls
      loop10.c  Proportion.bossa  RR30.bossa     testRR.sh
      loop30.c  RR10.bossa        setup_test.sh
      $

RR10.bossa и RR30.bossa - две реализации алгоритма кругового обслуживания. В RR10 time_slice каждого процесса - 10, в то время, как в RR30 - 30.
<img src='files/images/articles/diagram4.png' />
Дерево планировщиков
3.Запустите скрипт setup_test.sh с правами супер-пользователя . Этот скрипт собирает две политики кругового обслуживания, как модули Linux, используя утилиту bossa_install, включенную в поставку ядра Bossa. Затем скрипт загружает модули в ядро и формирует дерево планировщиков, как показано на диаграмме.

 $ ./setup_test.sh

4.Запустите тестовый скрипт.

$ ./testRR.sh

Скрипт загружает три бесконечных цикла параллельно, каждый цикл печатает число от одного до трех. Исходный текст может быть найден в файлах loop10.c и loop30.c. После запуска программа присоединяется к планировщику кругового обслуживания и затем исполняется.

 We run three loops (1, 2, 3) in parallel. They are
scheduled by the round-robin scheduler with time_slice=30.
1111111111111111111122222222222222222233333333333333333311111111111111111122222
2222222222222333333333333333333331111111111111111111122222222222222222233333333
3333333333111111111111111111222222222222222222223333333333333333333311111111111
11111112222222222222222223333333333333333331111111111111111112222

The round robin scheduling effect can clearly be seen.

We run three loops (1, 2, 3) in parallel. They are scheduled by the round-robin
scheduler with time_slice=10.
11111122222233333311111122222233333311111122222233333311111122222233333311111122
22223333331111112222223333331111112222223333331111112222223333331111112222223333
33111111222222333333111111222222333333111111222222333333111111222222333333111111
22222233333311111122222233333311111122222233333311111122

The round robin scheduling effect can clearly be seen. 


То, что все отлично работает видно из вывода на консоль.

Заключение

В этой статье мы рассмотрели Bossa, framework для разработки политик работы планировщиков. После прочтения статьи вы должны понимать процесс разработки политик работы планировщика, а так же преимущества платформо-зависимого языка. Bossa существенно упрощает разработку, и большинство алгоритмов работы планировщика может быть реализовано всего лишь несколькими сотнями строк кода.
Кроме того, поскольку Bossa упрощает разработку и интеграцию планировщиков в ядро ОС, она может использоваться для обучения студентов работе планировщиков. Экспериментируя с различными политиками работы планировщика, используя Bossa, студенты могут на практике понять, как работает планировщик.
Об авторе: Кристоф Ожие (Christophe Augier) – студент Ecole des Mines de Nantes (Франция), где он изучает операционные системы и компьютерные сети. В качестве магистерской диссертации, он пишет специальный язык для диспетчеров сетевых пакетов.
Большое спасибо Джулии Лоуэлу (Julia Lawall ) и Жильу Мюлле (Gilles Muller) за поддержку в написании этой статьи.

Ссылки

1 The Earliest-Deadline First scheduling policy:
Bossa-версия политики EDF: EDF.bossa [http://x-info.emn.fr/bossa/policies/EDF.bossa]
Исследовательскя работа, описывающая EDF:
Scheduling Algorithms for Multiprogramming in a Hard-Real-Time Environment, [http://portal.acm.org/citation.cfm?id=321743&dl=ACM&coll=portal]
C. L. Liu and James W. Layland
Journal of the ACM (JACM)
Volume 20, Issue 1 (January 1973)

индекс статьи
страница 1 : страница без заголовка
страница 2 : страница без заголовка
страница 3 - текущая : страница без заголовка


Комментарии доступны только авторизованным пользователям, авторизуйтесь или зарегистрируйтесь на сайте здесь

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.