Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_Realtime_2.doc
Скачиваний:
221
Добавлен:
14.02.2015
Размер:
611.33 Кб
Скачать
      1. Облегченные потоки

Начиная с Windows NTверсии 3.51, Service Pack3 в систему была добавлена новая сущность — волокна (fibers).Волокном называется легкий поток, планировку которого осуществляет приложение. С точки зрения перевода слово "волокно" надо рассматривать как некий канал (сравни: оптоволокно), который можно использовать для направления потока. В английском языке появление термина fiberболее понятно, так как threadдословно переводится как "нить". Нить, как известно, состоит из волокон.

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

С точки зрения системы волокна подразумевают индивидуальность потоков, их породивших. Например, если волокно осуществляет доступ к локальной памяти потока, то это будет локальная память именно того потока, который породил волокно. Если волокно вызывает функцию ExitThread,то закроется поток, породивший это волокно.

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

Суммируя сказанное, приведем термины, относящиеся к реализации процессов ОС:

  • Многозадачность. Совместное использование процессора потоками, ожидающими выполнения, и создание иллюзии одновременного выполнения всех потоков.

  • Мультипроцессорная обработка. Исполнение одного и того же кода ОС как на однопроцессорных, так и на многопроцессорных компьютерах. ОС с симметричной мультипроцессорной обработкой выполняет системный код и код пользователя на всех доступных процессорах.

  • Многопоточность. Поддержка нескольких потоков внутри одного процесса.

  • ОС высокого уровня должна поддерживать все перечисленные возможности. И Windows NTэто делает.

Разработка технологии многопотокового программирования началась в середине 80-х годов. Преимуществами многопотокового программирования являются

  • Повышение производительности процессов

  • Процесс может использовать все свободные аппаратные средства многопроцессорной системы, в которой выполняется многопотоковое приложение.

Недостаток многоптокового программирования в том, что необходимо обеспечивать синхронизацию потоков в каждой программе.

      1. Планирование:

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

Давайте рассмотрим пример. Предположим мы используем совместимое с POSIX ядро реального времени, доступный черный ящик и планировщик может устанавливать 16 уровней приоритетов. Программист может захотеть реализовать планирование самого раннего крайнего срока для непериодических задач. Когда первая задача приходит, модуль полиции должен установить приоритет, основанный на крайних сроках всех задач. В этом случае можно установить любой из возможных приоритетов для единственной задачи. Предположим, что мы установили наивысший приоритет. Затем вторая задача приходит с более ранним крайним сроком. Нет проблем. Модуль полиции просто уменьшает приоритет первой задачи и дает второй задаче более высший приоритет. Однако, из-за того, что механизм приоритетов взаимодействует с черным ящиком ядра, модуль полиции должен первым запросить системный вызов, чтобы удалить предыдущую задачу, и затем еще два системных вызова, чтобы вновь вставить две задачи. Кроме того, модуль полиции требуется, чтобы сохранить след всех задач и их крайних сроков, вне ядра, так что он мог переустанавливать приоритеты, когда это будет необходимо. В самом худшем случае новый прибывший должен потребовать убрать все задачи и заново вставить.

Конечно, можно значительно повысить производительность различными методами, такими как дополнительные системные вызовы, которые вставляют или удаляют множества задач или вызов, который просто сдвигает приоритет. Даже с этими дополнительными примитивами взаимодействия, использование схемы с фиксированными приоритетами может быть неэффективным, потому что он не подходит для динамического планирования приоритетов.