Многозадачность Прерывания Многопоточность


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


Download 20.61 Kb.
bet3/3
Sana18.06.2023
Hajmi20.61 Kb.
#1565279
1   2   3
Bog'liq
Многозадачные и многопоточные системы План Многозадачност

Вытесняющая многозадачность. 16-и разрядная Windows уже стала поддержи­вать и вытесняющую многозадачность (non-preemptive multitasking). Такой тип многоза­дачности стал возможен благодаря основанной на сообщениях архитектуре Windows. Windows – программа может находиться в памяти и не выполняться до тех пор, пока не получила сообщение. Ранее, эти сообщения часто являлись прямым или косвенным ре­зультатом ввода информации пользователем с клавиатуры или мыши. Сейчас, механизм посылки сообщений широко используется и для обмена данными, инициации какого-либо действия приложения и т.п. При всем при этом, Windows использовала вытесняющую многозадачность для выполнения DOS – программ, а также позволяла некоторым про­граммам, например, для целей мультимедиа, получать аппаратные прерывания от таймера.
Существенным ограничением такого подхода является то, что время, затрачивае­мое программой на обработку сообщения может быть очень большим, а управление опе­рационной системе передается только после обработки сообщения. Частично преодолеть последнее ограничение, можно, опять таки используя таймер для периодической смене выполняемых программ. Другим решением по преодолению невытесняющей многозадач­ности является вызов функции PeekMessage. Обычно программа использует вызов функ­ции GetMessage для извлечения сообщений из очереди. Однако, если в данный момент времени очередь сообщений пуста, то функция GetMessage будет ждать поступления со­общения в очередь, а затем возвратит его. Функция PeekMessage работает иначе – она воз­вращает управление программе даже в том случае, если сообщений в очереди нет.
Таким образом, выполнение работы, требующей больших затрат времени, будет продолжаться до того момента, пока в очереди не появятся сообщения для данной или любой другой программы.



  1. Многопоточность

В многопоточной среде программы могут быть разделены на ча­сти, называемыми потоками выполнения (threads), которые выполняются одновременно. В терминах программы "поток" – это просто функция, которая может также вызывать дру­гие функции программы. Программа начинает выполнятся со своего главного (первич­ного) потока, который в традиционных программах на языке С является функцией main, а в Windows-программах – WinMain. Будучи выполняемой, функция может создавать новые потоки обработки, выполняя системный вызов с указанием функции инициализации по­тока (initial threading function). Операционная система в вытесняющем режиме переклю­чает управление между потоками подобно тому, как она это делает с процессами.


Таким образом, многопоточность есть реализация принципа многозадачности внутри программы. Программная реализация многозадачности Когда пользователь запус­кает программу, Windows создает в памяти компьютера экземпляр программы, называе­мый процессом. Процесс не является точной копией *.ехе – файла, как это было, например в операционной системе ДОС. Процесс содержит в себе копию *.ехе – файла, а также не­которую другую информацию о функционировании данного приложения.
В этой допол­нительной информации хранятся, например, границы выделенной приложению памяти, что помогает аппаратно отслеживать корректности обращения к оперативной памяти со стороны приложения. Так как Windows поддерживает механизм виртуальной памяти, то среди этой информации находятся сведения о расположении сегментов программы. Здесь же содержится командная строка, формируемая при запуске программы. Запустить про­цесс можно как при помощи командной строки системного меню Windows, при помощи программы Проводника, так и программно, из другого приложения.
Это можно выполнить при помощи функций API:

  1. Для 16-битных приложений используется функция WinExec: UINT WinExec( LPCSTR lpCmdLine, // command line UINT uCmdShow// window style );

  2. Первый параметр является командной строкой, в которой указывается имя файла и параметры, указываемые после имени загружаемого файла.

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

  1. Многопоточность в программе реализовать можно несколькими пу­тями. Непосредственное использование системного таймера для указания процедуры, вы­зываемой периодически. Это типичный представитель вытесняющей многозадачности. К достоинствам этого способа можно отнести то, что программа может устанавливать и из­менять период вызова функции.

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

  3. Создание потоков. Данный способ подразумевает определение некоторой проце­дуры потока, которая запускается параллельно основному процессу приложения. Момент окончания выполнения потока контролирует сама поточная процедура.



Download 20.61 Kb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling