Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Вытесняющая и невытесняющая многозадачность

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

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

Понятия «вытесняющая» и «невытесняющая» многозадачность нельзя отождествлять с понятиями приоритетных и бесприоритетных дисциплин планирования процессов. Вытесняющая и невытесняющая многозадачность - это более широкие понятия, чем типы приоритетности. Приоритеты задач могут как использоваться, так и не использоваться и при вытесняющих, и при невытесняющих способах планирования.

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

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

Почти во всех современных операционных системах, ориентированных на высокопроизводительное выполнение приложений (UNIX, Windows NT, OS/2, VAX/VMS), реализована вытесняющая многозадачность.

Нити

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

Для этих целей современные ОС предлагают использовать сравнительно новый механизм многонитевой обработки (multithreading). При этом вводится новое понятие «нить» (thread), а понятие «процесс» в значительной степени меняет смысл.

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

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

Взаимодействие процессов

Разделяемая память

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

- файлами, отображаемыми в памяти;

- уникальными API разделяемой памяти;

- механизмами импорта/экспорта.

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

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

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

Программные каналы

Ряд систем предоставляет более простые в использовании средства, предоставляющие обмен данных одновременно с синхронизацией и реализующие, тем самым, принцип гармонически взаимодействующих процессов по Дийкстре. Одним из наиболее типичных средств такого рода является программный канал или труба (pipe) – основное средство взаимодействия между процессами в ОС семейства Unix.

Труба представляет собой поток байтов, запись и чтение из которого происходит по дисциплине FIFO. Данные, поступающие в программный канал, представляют собой неструктурированную последовательность байтов и после чтения удаляются.

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

Создание программного канала в ОС семейства UNIX осуществляется с помощью системного вызова, который создает трубу и помещает дескрипторы файлов, соответствующие входному и выходному концам трубы, в массив. После открытия программного канала чтение данных из трубы и запись в нее осуществляется теми же самыми системными вызовами, что и работа с обычным файлом. Закрытие процессом программного канала осуществляется также стандартным «файловым» вызовом закрытия. Если все процессы, использующие программный канал, закрывают его, то он автоматически удаляется из системы.

Программный канал, таким образом, представляет собой специальный файл. Существенно, что этот файл отсутствует в таблице каталогов, поэтому обычные, или неименованные, каналы могут использоваться для обмена данными только между родственными процессами (имеющими общего предка).

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

В отличие от неименованных, именованные каналы не удаляются из системы даже если они не используются ни одним процессом. Отсоединение имени от узла файловой системы (удаление именованного канала) производится специальным системным вызовом.

Системы, управляемые событиями

В начале 70-х годов появилась новая архитектура многозадачных систем, довольно резко отличающаяся от вышеописанной модели последовательных процессов. Речь идет о так называемых системах, управляемых событиями (event-driven systems).

Впервые эта архитектура была реализована в экспериментальных настольных компьютерах Alto, разработанных в 1973 году в исследовательском центре PARC фирмы Xerox. Целью эксперимента было создание операционной среды, удобной для создания интерактивных программ.

В системах, управляемых событиями, при каждом движении мыши, нажатии ее кнопки или клавиши на клавиатуре генерируется событие. Кроме того, события могут также генерироваться системным таймером или пользовательскими программами. Существуют также «визуальные» события, которые генерируются, например, при визуализации ранее невидимого окна (или его части) в многооконной среде, такие события, сигнализируют о том, что данному окну необходимо перерисовать часть себя.

Каждое событие представляет собой структуру данных, которая содержит код, обозначающий тип события, а также поля, специфичные для различных типов событий.

Все события помещаются в очередь в порядке их возникновения.

В системе существует понятие обработчика событий. Обработчик событий представляет собой объект, т. е. структуру данных, с которой связано несколько программных модулей – методов. Один из методов вызывается при поступлении события и называется callback (дословно – «вызов назад»). Например, меню является простейшим объектом. При нажатии на кнопку мыши в области этого меню вызывается callback. Он разбирается, какой из пунктов меню был выбран, и вызывает соответствующую функцию обработки этого пункта. Таким образом, вместо последовательно исполняющейся программы, время от времени вызывающей систему для исполнения той или иной функции, мы получаем набор callback'ов, вызываемых системой в соответствии с желаниями пользователя.

Специальная программа (часть ОС), менеджер событий, непрерывно просматривает очередь и передает поступающие события обработчикам.

Менеджеры и обработчики событий широко используются в современных многозадачных ОС. События становятся дополнительным средством синхронизации и передачи данных, удобным для организации пользовательского интерфейса, при этом в других ситуациях программисты могут пользоваться другими средствами взаимодействия. Подобным образом устроены ОС Windows NT и OS/2).

Последнее изменение этой страницы: 2016-07-23

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...