КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Лекция №5. Многозадачность в Windows
Многозадачность в Windows. MSDN: Platform SDK documentation/base services/dll processes and threads В Windows имеется 2 способа использования многозадачности: многозадачность на уровне процессов и на уровне потоков. Если требуется изоляция адресного пространства и ресурсов, используется многозадачность на уровне процессов. Пример: системные службы Windows – автономные процессы. Крах системной службы не приводит к краху других процессов. Процесс может использовать несколько нитей для выполнения следующих задач: 1. управление вводом из нескольких окон (IE, который для каждой папки создаёт отдельный поток); 2. управление вводом из нескольких коммуникационных устройств (например, сервер, обслуживающий подключенных клиентов отдельными потоками); 3. различение задач различного приоритета (например, выполнение критичных по времени задач высокоприоритетным потоком); 4. сохранение интерактивности приложения при выполнении фоновой задачи. Реализация многозадачности с использованием одного процесса и нескольких потоков предпочтительна по следующим соображениям:
Win32API обеспечивает альтернативные нитям методы многозадачности: · асинхронный ввод/вывод; · порты завершения ввода/вывода (I/O Completion Port); · асинхронный вызовы процедур (APC); · возможность ожидать множества коммуникационных событий с использованием WaitForMultipeObjects(). Данные способы более быстрые, чем использование нескольких нитей, каждой ожидающей своего события с WaitForSingleObject(). Рекомендации по многозадачности: использовать как можно меньше потоков для одного приложения, т.к. требуются ресурсы для хранения контекста потока, для отслеживания нескольких активных потоков и, обычно, более сложная синхронизация.
Планировщик Windows В документации MSDN не описывается конкретный алгоритм планирования, он может изменяться в разных версиях ОС. Основными средствами, влияющими на алгоритм планирования в API, является класс и уровень приоритета (Class и Level). Класс указывается при создании процесса (используется функция CreateProcess()). Существует 6 классов приоритета: · IDLE_PRIORITY_CLASS – самый низкий уровень приоритета, его имеют хранители экрана, средства сбора диагностики. · BELOW_NORMAL_ PRIORITY_CLASS · NORMAL_ PRIORITY_CLASS – приоритет по умолчанию. · ABOVE_NORMAL_ PRIORITY_CLASS – приоритет по умолчанию. · HIGH_PRIORITY_CLASS – приоритет, непосредственно работающий с оборудованием. · REALTIME_PRIORITY_CLASS – более приоритетен, чем многие системные потоки, работает с диском, клавиатурой и мышью. Класс приоритета определяется и задается с помощью функций GetPriorityClass() и SetPriorityClass(). Типичному процессу нужно гарантировать непрерывное выполнение некоторой операции, для этого кратковременно приоритет повышается, затем понижается. Внутри процесса устанавливаются относительные приоритеты для нитей (уровни приоритета, levels): · THREAD_PRIORITY_IDLE · THREAD_PRIORITY_LOWEST · THREAD_PRIORITY_BELOW_NORMAL · THREAD_PRIORITY_NORMAL · THREAD_PRIORITY_ABOVE _NORMAL · THREAD_PRIORITY_HIGHEST · THREAD_PRIORITY_TIME_CRITICAL Уровень приоритета нити определяется и задается с помощью функций GetThreadPriority() и SetThreadPriority(). Всем нитям по умолчанию назначается нормальный уровень приоритета. Если возникает необходимость задать уровень приоритета при создании нити, то последовательность действий: CreateThread(CREATE_SUSPE NDED) SetThreadPriority(…) ResumeThread(…) Диспетчер системы планирует нити и ничего не знает о процессах, поэтому класс приоритета и уровень комбинируется в базовый приоритет. Windows использует 32 базовых приоритета (от 0 до 31).
Переключение контекста. Windows использует следующую последовательность шагов:
Структуры данных планировщика: Потоки, не являющиеся готовыми:
Причины вытеснения текущего потока:
Динамический приоритет используется для продвижения потоков при наличии более приоритетных. Windows кратковременно повышает приоритеты простаивающих готовых потоков.(Priority Boost) в случае, когда:
Также Windows может увеличить квант времени потока. В любом случае динамический приоритет не может быть меньше базового приоритета. По истечению каждого кванта динамический приоритет уменьшается на 1 до тех пор, пока не достигнет базового приоритета. Priority Boost получают потоки с базовым приоритетом, не превышающим 15.
Дата добавления: 2014-12-07; Просмотров: 633; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |