Раздел 13.5 - Другие вопросы многозадачности

Базовая операционная система оказывает серьезное влияние на реализацию многозадачности, а особенно в случае, если она не предоставляет определенных минимальных возможностей (а именно, поддержки нитей). Существует два фактора которые следует иметь ввиду:
  1. В некоторых операционных системах (таких как Microsoft Windows 3.1 и многих старых Unix-системах) нет поддержки нитей (легковесных процессов), а имеется только поддержка обычных процессов (которые иногда называют полновесными процессами). Отличие состоит в том что нити могут использовать общие участки памяти, в то время как процессы в общем случае этого не могут. В системах без поддержки нитей, задача, выполняющая запрос к операционной системе (например для ввода информации), приостанавливает выполнение всех задач Ada до завершения выполнения запроса операционной системой. Так происходит из-за того, что большинство Ada-компиляторов в таких операционных средах размещают все задачи внутри одного процесса операционной системы и эмулируют многозадачность внутри этого процесса. Для операционной системы нет разницы между различными Ada-задачами в контексте одного процесса, поэтому все задачи приостанавливаются. С приобретением операционными системами новых возможностей эта проблема теряет свою актуальность. Для встроенных систем (где Ada имеет полный контроль над системой или работает под управлением операционной системы реального времени) это обычно тоже не является проблемой.
  2. В некоторых операционных системах сложно или нецелесообразно автоматически распределять временные ресурсы между задачами. Возможность автоматического разделения времени между задачами с одинаковым приоритетом называется ``вытесняющей многозадачностью'' или ``квантовнием времени''. Операционные системы с поддержкой этого механизма более удобны для программиста. Поскольку в некоторых операционных системах нет достаточной поддержки такого механима, Ada может выполнять задачу до тех пор, пока эта задача не начнет взаимодействовать с другой задачей или не перейдет в режим ожидания (при помощи оператора delay). Такой подход называется "кооперативная многозадачность", поскольку задачи с одинаковым приоритетом должны взаимодействовать ("кооперироваться") для разделения ресурсов процессора. Большинство программистов предпочитают реализации Ada с поддержкой вытесняющей многозадачности. Если Вам приходится иметь дело с Ada-компилятором, который поддерживает только кооперативную многозадачность, имейте ввиду, что Вам придется вставлять инструкции "delay 0.0" в разные места каждой из задач, чтобы другие задачи тоже могли работать. Ознакомьтесь с документацией на Ваш компилятор; некоторые из них позволяют выбирать между вытесняющей и кооперативной моделями многозадачности. С другой стороны, большинство современных Ada-компиляторов предлагают использовать (более общую) вытесняющую модель многозадачности.

Существует масса вопросов, связанных с многозадачностью, которые в учебнике не затронуты, например:


К этому разделу упражнение отсутствует.

Вы можете перейти к следующему разделу.


Вы можете также:

PREVIOUS Вернуться к предыдущему разделу

OUTLINE Вернуться к содержанию Урока 13

David A. Wheeler ([email protected])

Перевод:   Общая редакция перевода:

Исходная копия этого документа находится по адресу "http://www.adahome.com/Tutorials/Lovelace/s13sf.htm".

Исходная копия перевода размещена на сайте http://www.ada-ru.org