Similar presentations:
Системное программирование РПО 23 2
1. Системное программирование
2.
Прикладное ПО – компьютерные программы, предназначенные длярешения функциональных задач в определенной предметной области.
Это самый многочисленный класс программных продуктов.
Примеры прикладного ПО: текстовые редакторы (Microsoft Word, Libre
Office), табличные редакторы (Microsoft Excel), графические редакторы
(Adobe Photoshop).
Промежуточное
(связующее)
ПО
–
совокупность
программ,
осуществляющих управление программными ресурсами, порожденными
программами и ориентированными на решение широкого класса задач.
Примеры промежуточного ПО: системы управления базами данных
(СУБД), модули управления языком интерфейса информационных систем,
программы сбора и предварительной обработки информации.
3.
Системное ПО – совокупность программ, предназначенных для поддержанияработоспособности системы обработки информации и управления (компьютера и
компьютерных сетей) или повышения эффективности ее использования.
Функции системного ПО:
создание операционной среды функционирования для программ;
автоматизация разработки новых программ;
обеспечение надежной и эффективной работы компьютера и компьютерной сети;
проведение диагностики и профилактики аппаратуры компьютера и компьютерных
сетей;
выполнения
вспомогательных
технологических
архивирование, восстановление после сбоев и т.п.).
процессов
(копирование,
4.
Существуют следующие группы системного ПО:операционные системы (ОС);
интерфейсные оболочки ОС;
системы управления файлами;
системы программирования;
утилиты;
драйверы;
средства сетевого доступа.
5.
Системное программирование – это процесс разработкисистемных программ.
Другой взгляд на системное программирование
разработка программ сложной структуры.
–
6. Классификация системного ПО
Традиционная классификация системного ПО:● управляющее ПО – организует корректное функционирование
всех процессов ОС и устройств компьютера. Этот вид ПО
располагается в основной памяти и представляет собой
резидентные программы ОС. Системное управляющее ПО
поставляется в виде инсталляционных пакетов ОС и
драйверов устройств;
● обрабатывающее
ПО
–
обеспечивает
выполнение
специальных задач и поставляется в виде дистрибутивных
пакетов с программами инсталляции, разворачивающими ПО
на конечном устройстве.
7.
Альтернативная классификация системного ПО:базовое
ПО
–
минимальный
набор
программных
средств,
обеспечивающих работу компьютера и компьютерной сети;
сервисное ПО – программы и программные комплексы, которые
расширяют возможности базового ПО и организуют удобную среду для
работы других программ и пользователя.
Примеры базового ПО:
операционные системы и драйверы в составе ОС;
загрузчики;
интерфейсные оболочки ОС;
системы управления файлами.
8.
Операционнаясистема
–
совокупность
программных
средств,
обеспечивающая управление аппаратной частью компьютера и
прикладными программами, а также их взаимодействием между собой и
пользователем. Примеры ОС: Windows, Linux, Unix, Android, iOS.
Загрузчик –
компьютера.
программа,
обеспечивающая
выбор
ОС
при
запуске
Интерфейсные оболочки ОС предназначены для смены режима
взаимодействия пользователя с прикладными программами и ресурсами
компьютера. Они могут функционировать в текстовом или графическом
режимах. Примеры интерфейсных оболочек: KDE, Gnome.
9.
Системы управления файлами выделяются в отдельную группу системногоПО, однако любая система управления файлами разработана для работы в
конкретной ОС и с конкретной файловой системой. Системы управления
файлами предназначены для организации более удобного доступа к данным,
когда вместо низкоуровневого доступа к данным с указанием конкретных
физических адресов используется логический доступ с указанием имени
файла.
Примеры сервисного ПО:
драйверы специальных устройств, которые поставляются отдельно от
ОС;
программы диагностики работоспособности компьютера;
антивирусные программы;
программы обслуживания дисков;
программы архивирования данных.
10.
Утилиты–
программы,
служащие
для
выполнения
вспомогательных операций обработки данных или обслуживания
компьютеров.
Примеры утилит: CCleaner, 7-Zip, WinRAR, AIDA, Disk Commander.
Система программирования – набор специализированных
программ, которые выступают инструментальными средствами
разработчика для полной поддержки процессов совместной
разработки, доступа к коду, проектирования, разработки, отладки
и тестирования создаваемых программ, их развертывания.
11.
Система программирования включает следующие средства:● редактор текста – программа для ввода и модификации кода
программы;
● транслятор – программа для преобразования программ,
написанных на одном языке программирования, в
программы на другом языке;
● компоновщик – редактор связей, объединяющий отдельные
модули в единые программы, готовые к выполнению;
● отладчик – инструмент для поиска и устранения ошибок;
● библиотеки подпрограмм – дополнительные модули,
упрощающие разработку.
12. Трансляторы
Транслятор – системная программа, преобразующая исходнуюпрограмму на одном языке программирования в программу на другом
языке.
13.
Ассемблер – системная программа, которая преобразует символическиеконструкции в команды машинного языка. Ассемблер осуществляет дословную
трансляцию одной символической команды в одну машинную. Ассемблеры
обеспечивают повышение эффективности программирования за счет того, что
программист легче запоминает и воспринимает мнемоническое обозначение
машинных команд, а не их двоичный код.
Компилятор – системная программа, выполняющая трансляцию программы на
исходном языке программирования в программу на машинном языке. В связи с
тем, что команды исходного языка значительно отличаются от команд
машинного языка, одна команда исходного языка может транслироваться в 510 и более машинных команд. Процесс трансляции с таких языков обычно
называется компиляцией, а исходные языки обычно относятся к языкам
программирования высокого уровня.
14.
Интерпретатор – системная программа, осуществляющая пооператорнуютрансляцию и выполнение исходной программы.
В отличие от компилятора, интерпретатор не порождает на выходе
программу на машинном языке, распознав команду исходного языка, он
тут же выполняет ее. Интерпретатор позволяет начать обработку данных
после написания даже одной команды, что делает процесс разработки и
отладки программ более гибким.Отсутствие выходного машинного кода
позволяет не порождать дополнительные файлы, а сам интерпретатор
можно достаточно легко адаптировать к любым машинным архитектурам. У
интерпретаторов два основных недостатка: первый – относительно низкая
скорость работы интерпретируемых программ, второй – исходный код
программы остается доступен конечным пользователям.
15.
Эмулятор – системная программа, обеспечивающая возможностьбез перекомпиляции выполнять на данном компьютере программу,
которая для данного компьютера не предназначена. Эмуляторы
используются достаточно часто в самых различных целях, например,
для выполнения старых программ на новых компьютерах или для
запуска приложений ОС Windows из ОС MacOS.
Перекодировщик – системная программа, переводящая программы,
написанные на одном машинном языке, в программы на другом
машинном языке.
Макропроцессор – системная программа, обеспечивающая замену
одной последовательности символов другой.
16. Компиляция
Этапы компиляции:1. Предварительная обработка – присоединение исходных файлов, работа
макросов.
2. Анализ – определение структуры и значения исходного кода.
3. Синтез – построение целевого кода.
Выделяются три фазы на этапе анализа:
1. Лексический анализ – переход от последовательности знаков к символам
языка. Лексический анализ похож на процесс чтения человеком текста
программы. На этом этапе происходит обработка пробелов и удаление
комментариев. Лексическому анализатору не важен смысл текста.
17.
2. Синтаксический анализ (разбор) – определение общейструктуры программы с пониманием порядка следования
символов.
Основа
для
работы
синтаксического
анализатора – синтаксические правила (грамматика).
Синтаксический анализатор осуществляет обработку с
привязкой к контексту.
3. Семантический анализ – определение смыслового
значения текста программы и проверка особых свойств
(например, типов переменных и областей их видимости).
18.
Выделяются пять фаз на этапе синтеза:1. Генерация машинно-независимого кода – формирование
промежуточном языке, который не зависит от конечного компьютера;
кода
на
2. Оптимизация машинно-независимого кода – повышение эффективности кода.
3. Распределение памяти – назначение каждой переменной адреса в одной из
областей памяти:
статическая – время жизни переменной связано с временем жизни
программы;
динамическая – время жизни переменной связано с временем жизни
программного блока;
глобальная – время жизни переменной неизвестно.
4. Генерация машинного кода – формирование кода на машинном языке;
5. Оптимизация машинного кода – повышение эффективности целевого кода.
19. Оптимизация программ
Оптимизация – процесс создания эффективного целевого кода.Критерии эффективности:
время выполнения программы;
объем используемой памяти в процессе выполнения программы;
объем (размер) программы;
равномерность загрузки оборудования.
Оптимизацию не требуется проводить в случаях, если:
программа работает «хорошо»: быстро, не использует лишнюю оперативную
память, занимает мало места на жестком диске;
программа обладает малым временем жизни.
20.
Виды оптимизации:● ручная – выполняется программистом на исходном языке
программирования;
● машинно-независимая оптимизация – преобразование
компиляторам программы на промежуточном языке;
● машинно-зависимая
оптимизация
(оптимизация
машинного
кода)
–
преобразование
программы
компилятором на выходном языке.
21.
Машинно-независимая оптимизация заключается, как правило, в выполненииследующих действий.
Подстановка значений констант;
Вычисление выражений;
Удаление недостижимого кода;
Арифметические преобразования;
Устранение избыточных вычислений;
Удаление ненужных присваиваний;
Оптимизация вычисления логических выражений;
Подстановка пода функции вместо ее вызова;
Вынесение инвариантных вычислений из тела цикла;
Замена операций с переменными цикла (индукция);
Замена операций с переменными цикла (элиминация);
Слияние циклов;
Расщепление циклов.
22.
23.
Машинно-зависимая оптимизациявыполнении следующих действий:
заключается,
как
правило,
в
замена медленных команд на быстрые;
замена общих команд на команды, специфичные для текущего
процессора;
распределение регистров;
учет технических особенностей компьютера при распределении
нагрузки.
24. Системы программирования
Системы программирования объединяют в себе следующие компоненты:редакторы текстов с подсветкой синтаксиса;
средства тестирования и отладки;
средства компиляции и поставки (развертывания);
средства документирования;
средства профилирования;
средства организации командной работы;
средства доступа к репозиториям кода;
конструкторы визуальных интерфейсов;
интерактивные инструменты получения справочной информации;
средства работы с источниками данных и серверами;
инструменты реинжиниринга;
диспетчеры пакетов;
эмуляторы;
редакторы ресурсов;
средства рефакторинга;
средства отладки и просмотра в режиме ассемблера.
25.
Функциональные возможности редактора текста с подсветкойсинтаксиса:
● редактирование текста программы: создание, редактирование,
сохранение файлов с текстом программы;
● поддержка многооконной работы с возможностью управления
вкладками;
● настройка сочетания клавиш и шаблонов;
● интеграция с компилятором и средствами статического
анализа кода: дополнение кода, интерактивная подсказка;
всплывающие подсказки; отображение ошибок; навигация по
коду; рефакторинг кода;
● интеграция с отладчиком.
26.
Функциональные возможности средств тестирования и отладки:пошаговое выполнение программы;
выполнение программы до точки останова;
приостановка выполнения программы;
просмотр и изменение значений переменных;
вычисление выражений в текущем контексте;
работа с точками останова;
выдача информации в терминах исходной программы.
27. Архитектура системных программ
Архитектурная модель ПО – принципиальная организация ПО, воплощенная вего элементах, их взаимоотношениях друг с другом и со средой, а также принципы,
направляющие проектирование и эволюцию ПО.
Классификации архитектурных моделей ПО:
одноуровневая – все компоненты программы размещены на одном
компьютере и на нем же выполняются;
двухуровневая архитектура предлагает наличие двух компонентов: клиента и
сервера (к которому подключен клиент).
трехуровневая архитектура предполагает наличие трех компонентов:
клиента, сервера приложений (к которому подключен клиент) и сервера баз
данных (с которым работает сервер приложений).
28.
Организация межпрограммных связей возможна многими способами. Связимогут быть установлены:
на уровне библиотек (для программ, функционирующих на одном
устройстве);
на уровне сервисов, осуществляющих обмен данными по различным
протоколам (для клиент-серверных приложений, для интеграции
серверов);
на уровне данных (совместный доступ к данным);
через различные технологии интеграции (ESB, CORBA, COM, DCOM,
ActiveX и др.).
29.
Разработка СПО может быть значительно облегчена за счетиспользования библиотек подпрограмм:
● библиотеки
функций:
библиотеки
для
расширения
возможностей языков программирования; библиотеки для
решения задач в конкретной предметной области;
● библиотеки классов – аналогичны библиотекам функций, но
ориентированы
на
объектно-ориентированное
программирование;
● библиотеки
компонентов
–
библиотеки
готовых
откомпилированных программных модулей, предназначенных
для использования в качестве составных частей программ.
30.
Динамически подключаемые библиотеки (DLL)подключаются к программе не во время компиляции
программы, а непосредственно в ходе её выполнения.
На этапе компоновки программы редактор связей
формирует таблицу точек вызова функций DLL для
последующей операции динамического связывания.
Таким
образом,
процесс
полной
компоновки
завершается уже на этапе выполнения целевой
программы.
31.
Преимущества такого подхода:● не требуется включать в программу код часто используемых
функций, что существенно сокращает объем кода;
● различные программы, выполняемые в некоторой ОС, могут
пользоваться кодом одной и той же библиотеки;
● изменения и улучшения функций библиотек не требуют
перекомпиляции программы.
При использовании диспетчера пакетов нет необходимости включать
сторонние библиотеки подпрограмм в исходный код и хранилище кода – они
будут загружены при сборке программы.
32. Особенности выполнения программ
Однопоточный последовательный процесс имеет только один поток управления,который выполняется в том же адресном пространстве, что и процесс, породивший его.
Многопоточный процесс имеет несколько параллельно выполняющихся потоков, у
каждого из которых выделен свой стек и обеспечивается хранение собственных
значений регистров. Потоки работают в общей основной памяти и используют
адресное пространство процесса, породившего их.
Выполнение программы в многопоточном режиме дает следующие преимущества:
увеличение скорости за счет на использования «облегченных» потоков,
работающих в общем пространстве виртуальной памяти;
сокращение объема используемой памяти за счет использования потоками общих
ресурсов;
сокращение времени на смену контекста потока за счет использования
«облегченных» потоков.
33.
Контекст потока – структура данных, описывающая состояние потока намомент последнего исполнения потока:
● программный счетчик, регистр состояния и содержимое регистров
процессора;
● указатели на стек ядра и пользовательский стек;
● указатели на адресное пространство потока.
Контекст потока необходимо сохранять и восстанавливать при
переключении потоков или при возникновении других событий,
влияющих на его выполнение. Контекст потока, как правило,
сохраняется в текущем стеке ядра потока.
34.
Стек – структура данных, организовывается по принципу LIFO (Last In –First Out). Доступ в стеке всегда есть только к последнему добавленному
в стек элементу. В оперативной памяти каждому потоку выполнения
выделяется определенный размер стека, т.е. размер стека –
фиксированная
величина.
Превышение
лимита
приводит
к
переполнению стека – StackOverflowException.
Куча – хранилище данных, расположенное в оперативной памяти,
которое допускает динамическое выделение памяти. Куча обеспечивает
произвольный доступ к любому элементу, но каждый раз требуется
вычислять физическое расположение данных в куче по указателю и
типу данных.
35.
ОС обеспечивает управление ресурсами (память, файлы, процессорное время,оборудование). Будем называть ресурсы компьютера, выделяемые ОС, ресурсами ОС или
объектами ядра ОС.
Действия ОС по управлению ресурсами ОС:
создание и удаление;
планирование ресурсов;
обеспечение взаимодействия;
разрешение ошибочных и тупиковых ситуаций.
Объекты ядра представляет собой блок памяти, содержащий имя объекта, описатель или
дескриптор объекта,
класс защиты, счётчик количества пользователей и другую
информацию.
Примеры объектов ядра ОС Windows:
процесс, поток;
файл;
файл в памяти;
событие, семафор, мьютекс;
канал, сокет и т.д.
36.
ОС ведет учет объектов и управляет ими. Пользовательможет запросить информацию об объекте. Объекты
можно создавать, уничтожать, открывать и закрывать
посредством системных вызовов ОС по просьбе внешней
программы.
Созданные
объекты
закрепляются
(принадлежат) создавшим их процессам. При порождении
дочернего процесса, объекты ядра (как правило)
наследуются из родительского, при этом создается копия
объекта, принадлежащая уже дочернему процессу.
37.
Профайлинг(профилирование)
программы
–
сбор
характеристик работы программы, проводимый с целью анализа
работы и оптимизации программы.
Характеристики работы программы могут быть аппаратными
(время работы, используемая память) или программными
(особенности выполнения и частота вызовов функций).
Профайлинг программ используется, чтобы определить те
участки программы, которые работают неэффективно и могут
быть оптимизированы.
38. Управление процессами
Процесс - это выполнение последовательной программы на процессорекомпьютера.
Компьютерная
программа
является
пассивной
совокупностью инструкций, в то время как процесс представляет собой
непосредственное выполнение этих инструкций.
В многозадачных операционных системах процесс может находиться в
одном из трех основных состояний. Это «выполнение», «ожидание»,
«готовность».
«Выполнение» - активное состояние процесса. В данном состоянии
процесс обладает всеми необходимыми ресурсами и непосредственно
выполняется процессором.
39.
«Ожидание» - пассивное состояние процесса. Процесс заблокировани не может выполняться по своим внутренним причинам. Такими
причинами могут являться: ожидание завершения операции вводавывода; получение сообщения от другого процесса; освобождение
необходимого для продолжения вычислений ресурса.
«Готовность» - также пассивное состояние процесса. В этом
состоянии процесс заблокирован в связи с внешними причинами, по
инициативе операционной системы. Процесс имеет все требуемые
для выполнения ресурсы, однако процессор занят выполнением
другого процесса.
40.
Информационные структуры, которые используются для управления исполнениемпроцессов, называются контекст и дескриптор. Программный код только тогда начнет
выполняться, когда для него операционной системой будет создан процесс. Создание
процесса состоит из трех этапов: создания дескриптора и контекста процесса;
включения дескриптора нового процесса в очередь готовых процессов; загрузки
кодового сегмента процесса в оперативную память.
Состояние операционной среды состоит из значений регистров и программного
счетчика, режима работы процессора, указателей на открытые файлы, информации о
незавершенных операциях ввода-вывода, кодов ошибок, выполняемых данным
процессом системных вызовов. Эта информация называется контекстом процесса.
Контекст является зависимой от аппаратуры структурой данных.
Операционной системе для реализации планирования процессов требуется
дополнительная информация: идентификатор процесса, состояние процесса, данные о
степени привилегированности процесса, данные о нахождении процесса в очередях,
указатель на контекст процесса. Эта информация называется дескриптором процесса.
41.
Управление процессами включает в себя решение следующих задач:определение момента времени для смены выполняемого процесса; выбор
процесса на выполнение из очереди готовых процессов; переключение
контекстов между вновь запускаемым и снимаемым с исполнения процессом.
Последняя задача решается на аппаратном уровне. То, каким образом
решаются первые две задачи, определяется алгоритмом планирования.
На планирование можно повлиять двумя способами: можно управлять
длительностью исполнения процессов, воздействуя на переход между
состоянием «выполнение» - «готовность». Алгоритмы, использующие данный
подход – это алгоритмы, основанные на квантовании. Можно управлять
выбором готового процесса на исполнение, воздействуя на переход
«готовность» - «выполнение». Этот подход используют алгоритмы,
основанные на приоритетах.
42.
Кванты, выделяемые процессам, могут быть одинаковыми длявсех процессов или различными. Кванты, выделяемые одному
процессу, могут быть фиксированной величины или изменяться
пока процесс исполняется. Процессы, которые не полностью
использовали выделенный им квант (например, из-за ухода на
выполнение операций ввода-вывода), могут получить или не
получить компенсацию в виде привилегий при последующем
обслуживании. По-разному может быть организована очередь
готовых процессов: циклически, по правилу «первый пришел –
первый обслужен» (FIFO) или по правилу «последний пришел –
первый обслужен» (LIFO).
43.
Приоритет – это число, характеризующее степень привилегированностипроцесса. Приоритет может выражаться натуральными, целыми или
вещественными числами. Чем выше привилегии процесса, тем меньше
времени он будет проводить в очередях. Приоритет может назначаться
директивно администратором системы в зависимости от важности работы или
внесенной платы, либо вычисляться самой операционной системой по
определенным правилам.
Существует две разновидности приоритетных алгоритмов: алгоритмы,
использующие относительные приоритеты, и алгоритмы, использующие
абсолютные приоритеты. В обоих случаях выбор процесса на выполнение из
очереди готовых осуществляется одинаково: выбирается процесс, имеющий
наивысший приоритет.
44.
В зависимости от того, кто является инициатором перехода из состояния «выполнение» всостояние «готовность» различают три вида многозадачности.
Вытесняющая многозадачность (preemptive multitasking) - это такой способ, при
котором решение о переключении процессора с выполнения одного процесса на
выполнение другого процесса принимается планировщиком операционной системы, а
не самой активной задачей.
Невытесняющая многозадачность (non-preemptive multitasking) - это способ
планирования процессов, при котором операционная система не является инициатором
переключения контекста с текущего процесса на новый процесс. Такое переключение
может осуществляться по инициативе пользователя с использованием программыпереключателя на фоновый процесс или по инициативе исполняющегося процесса.
Вид многозадачности называется кооперативной или совместной многозадачностью
(cooperative multitasking), когда текущий процесс самостоятельно отдает управление
планировщику операционной системы для того, чтобы тот выбрал из очереди другой,
готовый к выполнению процесс.
45.
Важным аспектом реализации современных многозадачных операционных систем является наличиепотоков выполнения или нитей (thread). Как отмечалось, процессы - это сущности, являющиеся
единицами планирования и единицами выделения ресурсов. Концепция потоков позволяет
определить не одну, а несколько единиц планирования внутри пула ресурсов, выделенных процессу.
Каждый поток исполнения имеет собственный программный счетчик, стек, регистры, состояние. Потоки
разделяют адресное пространство процесса, в котором они исполняются; глобальные переменные;
открытые файлы; объекты, адресуемые через таблицу описателей объектов ядра процесса;
статистическую информацию.
Существует несколько моделей реализации многопоточности в зависимости от того, как системные
потоки, реализуемые в ядре операционной системы, соотносятся с пользовательскими потоками
внутри процесса.
Потоки выполнения, созданные пользователем в модели потоков ядра (1:1), соответствуют потокам
ядра. Это простейший возможный вариант реализации многопоточности.
В модели пользовательских потоков (N:1) предполагается, что все потоки выполнения уровня
пользователя отображаются на поток уровня ядра, и ядро ничего не знает о составе прикладных
потоков выполнения.
46.
В гибридной модели (M:N) некоторое число M прикладныхпотоков выполнения отображаются на некоторое число N
сущностей ядра или «виртуальных процессоров». Модель
является компромиссной между моделью уровня ядра (1:1) и
моделью уровня пользователя.
47. Многозадачность в операционной системе Windows
Для управления приложением, состоящим из нескольких процессов, в Windows предусмотреныспециальные объекты – работы (job objects). Работа позволяет рассматривать группу процессов
как целое. Операция, применяемая к работе, влияет на все процессы, связанные с ней. Например,
можно установить групповой приоритет, размер рабочей области, или одновременно удалить все
процессы, ассоциированные с работой.
Многозадачность на уровне потоков исполнения может использоваться при выполнении
следующих задач.
1. Управление вводом из нескольких окон. Примером является оконный менеджер, который для
каждой папки создаёт отдельный поток.
2. Управление вводом из нескольких коммуникационных устройств. Данный подход
применяется в многопоточных серверах в интернете. Каждого подключенного клиента
обслуживает отдельный поток. Использование потоков позволяет упростить архитектуру
программы сервера за счет применения блокирующих операций ввода-вывода с сохранением
эффективности приложений, построенных на асинхронных операциях ввода-вывода.
48.
3. Разделение задач различного приоритета. Может потребоваться для выполнениявысокоприоритетным потоком критичных по длительности счета задач. Например, такой поток
может заниматься сохранением телеметрической информации. Основной поток может
осуществлять графическое отображение этой информации на терминале.
4. Сохранение интерактивности приложения при выполнении фоновой задачи. При
выполнении длительных расчетов возникает необходимость в прерывании вычислений, ввода
или корректировки параметров. Для этого вычисления организуют в фоновом
низкоприоритетном потоке. Когда пользователь активирует элементы графического
интерфейса, более приоритетный поток GUI немедленно прерывает вычисления и
обрабатывает команды пользователя.
5. Использование преимуществ многопроцессорных систем для ускорения вычислений.
Требуется разделить программу на несколько потоков, если разрабатывается ресурсоемкое
приложения, которому необходимо использовать все вычислительные ресурсы современных
многоядерных и многопроцессорных систем. Обычная однопоточная программа не сможет
выполняться на нескольких ядрах и эффективно использовать возможности современной
аппаратуры.
49.
Потоковый пул – это группа потоков, которые совместно обрабатывают очередь из заданий, сообщенийтаймера, запланированных асинхронных событий (например, завершение ввода-вывода). При этом
достигается уменьшение числа необходимых потоков и не требуется ручное управление очередью заданий.
Класс указывается при создании процесса с использованием функции CreateProcess. Существует 6 классов
приоритета:
IDLE_PRIORITY_CLASS – самый низкий класс приоритета, его имеют хранители экрана, средства сбора
диагностики, средства индексирования и другие процессы фонового режима;
BELOW_NORMAL_PRIORITY_CLASS – приоритет ниже, чем приоритет по умолчанию;
NORMAL_PRIORITY_CLASS – приоритет по умолчанию;
ABOVE_NORMAL_PRIORITY_CLASS – приоритет выше, чем по умолчанию;
HIGH_PRIORITY_CLASS – приоритет процессов, непосредственно работающих с оборудованием, является
приоритетом реального времени;
REALTIME_PRIORITY_CLASS – приоритет реального времени, который более приоритетен, чем системные
потоки, работающие с диском, клавиатурой и мышью.
Класс приоритета определяется с помощью функции GetPriorityClass () и задается с помощью функции
SetPriorityClass().
50.
Внутри процесса устанавливаются относительные приоритеты для его потоков. Ониназываются уровнями приоритета или приоритетами потока:
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().
51.
Старшие приоритеты от 16 до 31 относятся к приоритетам реального времени.Младшие приоритеты относятся к приоритетам разделения времени.
Приоритет 0 не назначается потокам пользователя, он зарезервирован за потоком
обнуления страниц. Этот поток отвечает за очистку страниц в оперативной памяти,
которые переходят от одного процесса к другому.
В планировщике имеется 32 очереди потоков, в которые они попадают согласно
своим приоритетам.. Обслуживание, то есть назначение квантов процессорного
времени внутри каждой очереди, осуществляется по принципу карусели (roundrobin). Кванты времени получают потоки, находящиеся в непустой очереди
наивысшего приоритета. Для переключения контекста между потоками Windows
использует следующую последовательность шагов:
52.
- сохранить контекст только что завершившегося потока;- поместить этот поток в очередь соответствующего приоритета;
- найти очередь наибольшего приоритета, содержащую готовые потоки;
- удалить дескриптор потока из головы этой очереди, загрузить контекст, приступить к
исполнению.
Некоторые потоки не находятся в структурах данных планировщика, то есть не
являются готовыми. Такими потоками являются потоки, созданные флагом
CREATE_SUSPENDED; остановленные командой SuspendThread(); ожидающие события
синхронизации или завершения ввода-вывода.
Причины вытеснения текущего потока в планировщике Windows – истечение кванта
времени; появление более приоритетного готового потока; переход исполняющегося
потока к ожиданию события или завершения ввода-вывода.
53.
В операционной системе Windows имеется возможность управлять назначениемпотоков на конкретный процессор. Для управления таким назначением используются
два атрибута.
Атрибут thread affinity определяет привязку потока к определенной группе
процессоров. Этот атрибут представляет собой битовую маску, его указание
вынуждает поток исполняться на указанном подмножестве процессоров. Для
установки битовых масок привязки к процессорам используются функции
SetThreadAffinityMask() и SetProcessAffinityMask(). Для считывания значения битовых
масок привязки к процессорам используются функции GetProcessAffinityMask() и
GetThreadAffinityMask().
Жесткая привязка потоков к процессорам может снизить производительность. Для
рекомендации планировщику назначать, по возможности, поток на процессор
имеется еще один атрибут – идеальный процессор (ideal processor). Чтение и
установка этого атрибута выполняется функциями GetThreadIdealProcessorEx() и
SetThreadIdealProcessor().
software