Главная / Операционные системы /
Основы организации операционных систем Microsoft Windows / Тест 3
Упражнение 1:
Номер 1
К основным системным механизмам ОС относят:
Ответ:
(1) системные вызовы
(2) аппаратные прерывания
(3) исключительные ситуации
(4) программные прерывания
(5) системные сервисы
Номер 2
Интерфейс между прикладной программой и операционной системой реализуется при помощи:
Ответ:
(1) системных сервисов
(2) аппаратных прерываний
(3) системных вызовов
Номер 3
Переход из режима пользователя в режим ядра осуществляется при обработке:
Ответ:
(1) системного вызова
(2) исключительной ситуации
(3) аппаратного прерывания
Упражнение 2:
Номер 1
Отличие системного вызова от обычного вызова процедуры состоит…
Ответ:
(1) в том, что при обработке системного вызова процессор переходит в режим ядра
(2) в том, что первый — синхронное событие
(3) в количестве передаваемых параметров
Номер 2
Для организации связи между периферийными устройствами и центральным процессором используются…
Ответ:
(1) синхронные события
(2) прерывания
(3) исправимые исключительные ситуации
Номер 3
Типовая реакция системы на отсутствие нужной информации в оперативной памяти состоит в…
Ответ:
(1) завершении программы, затребовавшей эту информацию
(2) исправлении данной ситуации путем подкачки необходимой информации из внешней памяти
(3) генерации аппаратного прерывания
Упражнение 3:
Номер 1
Организация ввода с клавиатуры предполагает обработку:
Ответ:
(1) аппаратного прерывания, поскольку клавиатура — это часть аппаратуры
(2) системного вызова, поскольку для ввода обычно используются команды типа scanf или read, то есть синхронные события
(3) исправимой исключительной ситуации, так как при этом происходит подкачка недостающей информации
Номер 2
При помощи операторовtry
иexcept
можно:
Ответ:
(1) сгенерировать исключительную ситуацию
(2) «исправить» неисправимую исключительную ситуацию
(3) вернуть управление программе, которая сгенерировала исключительную ситуацию
Упражнение 4:
Номер 1
Сохранение состояния текущего потока с его последующим восстановлением характерно для обработки:
Ответ:
(1) аппаратного прерывания
(2) системного сервиса
(3) исправимой исключительной ситуации
(4) модификации вектора прерываний
Номер 2
Вектор прерываний (таблица IDT) ставит адрес процедуры обработки в соответствие номеру:
Ответ:
(1) прерывания
(2) исключительной ситуации
(3) системного вызова
Номер 3
Номер события, подлежащего обработке, определяется:
Ответ:
(1) ядром
(2) контроллером прерываний
(3) вектором прерваний
Номер 4
После прохождения первичной обработки вторичная обработка прерывания обеспечивается…
Ответ:
(1) диспетчером системных сервисов
(2) диспетчером исключений
(3) драйвером соответствующего устройства
Упражнение 5:
Номер 1
IRQL ((interrupt request levels) приоритеты прерываний задаются …
Ответ:
(1) ядром системы
(2) с помощью уровня абстрагирования от оборудования
(3) с помощью вектора прерываний
Номер 2
Диспетчер Plug and Play назначает IRQL (interrupt request levels):
Ответ:
(1) прерываний
(2) системных сервисов
(3) исключительных ситуаций
Номер 3
Ядро назначает IRQLs (interrupt request levels) приоритеты:
Ответ:
(1) прерываниям
(2) системным сервисам
(3) исключительным ситуациям
Упражнение 6:
Номер 1
В двухуровневой системе планирования ОС Windows приоритеты высшего уровня определяются:
Ответ:
(1) источником события
(2) планировщиком
(3) вектором прерываний
Номер 2
В двухуровневой системе планирования ОС Windows приоритеты низшего уровня контролируются…
Ответ:
(1) планировщиком
(2) слоем абстрагирования от оборудования
(3) диспетчером Plug and Play
Упражнение 7:
Номер 1
Программным прерыванием в терминологии Microsoft называется…
Ответ:
(1) системный вызов, так как его реализация связана с выполнением команды «int
»
(2) асинхронный вызов процедуры (APC)
(3) отложенный вызов процедуры
Номер 2
Программные прерывания (APC и DPC) выполняются на …
Ответ:
(1) нулевом уровне IRQL наравне с кодом пользовательского потока
(2) IRQL уровнях, соответствующих аппаратным прерываниям
(3) уровнях 1 и 2, предназначенных для асинхронного и отложенного вызовов процедур
Номер 3
Планирование в ОС Windows осуществляется на…
Ответ:
(1) нулевом уровне IRQL наравне с кодом пользовательского потока
(2) IRQL уровнях, соответствующих аппаратным прерываниям
(3) уровне 2, предназначенном для отложенного вызовов процедур
В
разных ОС процессы реализуются
по-разному. Эти различия заключаются
в том, какими структурами данных
представлены процессы, как они именуются,
какими способами защищены друг от друга
и какие отношения существуют между
ними. Процессы Windows NT имеют следующие
характерные свойства:
Процессы
Windows NT реализованы в форме объектов, и
доступ к ним осуществляется посредством
службы объектов.
Процесс
Windows NT имеет многонитевую организацию.
Как
объекты-процессы, так и объекты-нити
имеют встроенные средства синхронизации.
Менеджер
процессов Windows NT не поддерживает между
процессами отношений типа «родитель-потомок».
В
любой системе понятие «процесс»
включает следующее:
исполняемый
код,
собственное
адресное пространство, которое
представляет собой совокупность
виртуальных адресов, которые может
использовать процесс,
ресурсы
системы, такие как файлы, семафоры и
т.п., которые назначены процессу
операционной системой.
хотя
бы одну выполняемую нить.
Адресное
пространство каждого процесса защищено
от вмешательства в него любого другого
процесса. Это обеспечивается механизмами
виртуальной памяти. Операционная
система, конечно, тоже защищена от
прикладных процессов. Чтобы выполнить
какую-либо процедуру ОС или прочитать
что-либо из ее области памяти, нить
должна выполняться в режиме ядра.
Пользовательские процессы получают
доступ к функциям ядра посредством
системных вызовов. В пользовательском
режиме выполняются не только прикладные
программы, но и защищенные подсистемы
Windows NT.
В
Windows NT процесс — это просто объект,
создаваемый и уничтожаемый менеджером
объектов. Объект-процесс, как и другие
объекты, содержит заголовок, который
создает и инициализирует менеджер
объектов. Менеджер процессов определяет
атрибуты, хранимые в теле объекта-процесса,
а также обеспечивает системный сервис,
который восстанавливает и изменяет
эти атрибуты.
В
число атрибутов тела объекта-процесса
входят:
Идентификатор
процесса — уникальное значение, которое
идентифицирует процесс в рамках
операционной системы.
Токен
доступа — исполняемый объект, содержащий
информацию о безопасности.
Базовый
приоритет — основа для исполнительного
приоритета нитей процесса.
Процессорная
совместимость — набор процессоров, на
которых могут выполняться нити процесса.
Предельные
значения квот — максимальное количество
страничной и нестраничной системной
памяти, дискового пространства,
предназначенного для выгрузки страниц,
процессорного времени — которые могут
быть использованы процессами пользователя.
Время
исполнения — общее количество времени,
в течение которого выполняются все
нити процесса.
Объект-нить
имеет следующие атрибуты тела:
Идентификатор
клиента — уникальное значение, которое
идентифицирует нить при ее обращении
к серверу.
Контекст
нити — информация, которая необходима
ОС для того, чтобы продолжить выполнение
прерванной нити. Контекст нити содержит
текущее состояние регистров, стеков и
индивидуальной области памяти, которая
используется подсистемами и библиотеками.
Динамический
приоритет — значение приоритета нити
в данный момент.
Базовый
приоритет — нижний предел динамического
приоритета нити.
Процессорная
совместимость нитей — перечень типов
процессоров, на которых может выполняться
нить.
Время
выполнения нити — суммарное время
выполнения нити в пользовательском
режиме и в режиме ядра, накопленное за
период существования нити.
Состояние
предупреждения — флаг, который показывает,
что нить должна выполнять вызов
асинхронной процедуры.
Счетчик
приостановок — текущее количество
приостановок выполнения нити.
Как
видно из перечня, многие атрибуты
объекта-нити аналогичны атрибутам
объекта-процесса. Весьма сходны и
сервисные функции, которые могут быть
выполнены над объектами-процессами и
объектами-нитями: создание, открытие,
завершение, приостановка, запрос и
установка информации, запрос и установка
контекста и другие функции.
В
Windows NT реализована вытесняющая
многозадачность, при которой операционная
система не ждет, когда нить сама захочет
освободить процессор, а принудительно
снимает ее с выполнения после того, как
та израсходовала отведенное ей время
(квант), или если в очереди готовых
появилась нить с более высоким
приоритетом. При такой организации
разделения процессора ни одна нить не
займет процессор на очень долгое время.
В
ОС Windows NT нить в ходе своего существования
может иметь одно из шести состояний
(рисунок 1.3). Жизненный цикл нити
начинается в тот момент, когда программа
создает новую нить. Запрос передается
NT executive, менеджер процессов выделяет
память для объекта-нити и обращается
к ядру, чтобы инициализировать объект-нить
ядра. После инициализации нить проходит
через следующие состояния:
3.
Рис.
1.3. Граф состояний нити
Готовность.
При поиске нити на выполнение диспетчер
просматривает только нити, находящиеся
в состоянии готовности, у которых есть
все для выполнения, но не хватает только
процессора.
Первоочередная
готовность (standby).
Для каждого процессора системы выбирается
одна нить, которая будет выполняться
следующей (самая первая нить в очереди).
Когда условия позволяют, происходит
переключение на контекст этой нити.
Выполнение.
Как только происходит переключение
контекстов, нить переходит в состояние
выполнения и находится в нем до тех
пор, пока либо ядро не вытеснит ее из-за
того, что появилась более приоритетная
нить или закончился квант времени,
выделенный этой нити, либо нить завершится
вообще, либо она по собственной инициативе
перейдет в состояние ожидания.
Ожидание.
Нить может входить в состояние ожидания
несколькими способами: нить по своей
инициативе ожидает некоторый объект
для того, чтобы синхронизировать свое
выполнение; операционная система
(например, подсистема ввода-вывода)
может ожидать в интересах нити; подсистема
окружения может непосредственно
заставить нить приостановить себя.
Когда ожидание нити подойдет к концу,
она возвращается в состояние готовности.
Переходное
состояние.
Нить входит в переходное состояние,
если она готова к выполнению, но ресурсы,
которые ей нужны, заняты. Например,
страница, содержащая стек нити, может
быть выгружена из оперативной памяти
на диск. При освобождении ресурсов нить
переходит в состояние готовности.
Завершение.
Когда выполнение нити закончилось, она
входит в состояние завершения. Находясь
в этом состоянии, нить может быть либо
удалена, либо не удалена. Это зависит
от алгоритма работы менеджера объектов,
в соответствии с которым он и решает,
когда удалять объект. Если executive имеет
указатель на объект-нить, то она может
быть инициализирована и использована
снова.
Диспетчер
ядра использует для определения порядка
выполнения нитей алгоритм, основанный
на приоритетах, в соответствии с которым
каждой нити присваивается число —
приоритет, и нити с более высоким
приоритетом выполняются раньше нитей
с меньшим приоритетом. В самом начале
нить получает приоритет от процесса,
который создает ее. В свою очередь,
процесс получает приоритет в тот момент,
когда его создает подсистема той или
иной прикладной среды. Значение базового
приоритета присваивается процессу
системой по умолчанию или системным
администратором. Нить наследует этот
базовый приоритет и может изменить
его, немного увеличив или уменьшив. На
основании получившегося в результате
приоритета, называемого приоритетом
планирования, начинается выполнение
нити. В ходе выполнения приоритет
планирования может меняться.
Windows
NT поддерживает 32 уровня приоритетов,
разделенных на два класса — класс
реального времени и класс переменных
приоритетов. Нити реального времени,
приоритеты которых находятся в диапазоне
от 16 до 31, являются более приоритетными
процессами и используются для выполнения
задач, критичных ко времени.
Каждый
раз, когда необходимо выбрать нить для
выполнения, диспетчер прежде всего
просматривает очередь готовых нитей
реального времени и обращается к другим
нитям, только когда очередь нитей
реального времени пуста. Большинство
нитей в системе попадают в класс нитей
с переменными приоритетами, диапазон
приоритетов которых от 0 до 15. Этот класс
имеет название «переменные приоритеты»
потому, что диспетчер настраивает
систему, выбирая (понижая или повышая)
приоритеты нитей этого класса.
Алгоритм
планирования нитей в Windows NT объединяет
в себе обе базовых концепции — квантование
и приоритеты. Как и во всех других
алгоритмах, основанных наквантовании,
каждой нити назначается квант, в течение
которого она может выполняться. Нить
освобождает процессор, если:
блокируется, уходя в состояние ожидания;
завершается; исчерпан квант; в очереди
готовых появляется более приоритетная
нить.
Использование динамических
приоритетов,
изменяющихся во времени, позволяет
реализовать адаптивное планирование,
при котором не дискриминируются
интерактивные задачи, часто выполняющие
операции ввода-вывода и недоиспользующие
выделенные им кванты. Если нить полностью
исчерпала свой квант, то ее приоритет
понижается на некоторую величину. В то
же время приоритет нитей, которые
перешли в состояние ожидания, не
использовав полностью выделенный им
квант, повышается. Приоритет не
изменяется, если нить вытеснена более
приоритетной нитью.
Для
того, чтобы обеспечить хорошее время
реакции системы, алгоритм планирования
использует наряду с квантованием
концепцию абсолютных
приоритетов.
В соответствии с этой концепцией при
появлении в очереди готовых нитей
такой, у которой приоритет выше, чем у
выполняющейся в данный момент, происходит
смена активной нити на нить с самым
высоким приоритетом.
В
многопроцессорных системах при
диспетчеризации и планировании нитей
играет роль их процессорная совместимость:
после того, как ядро выбрало нить с
наивысшим приоритетом, оно проверяет,
какой процессор может выполнить данную
нить и, если атрибут нити «процессорная
совместимость» не позволяет нити
выполняться ни на одном из свободных
процессоров, то выбирается следующая
в порядке приоритетов нить.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Рассмотрим, как в системе Windows осуществляется планирование потоков для их выполнения на центральном процессоре. Также посмотрим на приоритеты процессов и потоков.
Планирование потоков в системе
В Windows всегда выполняется хотя бы один поток с самым высоким приоритетом. Если в системе много ядер, то Windows делит все ядра на группы по 64 ядра. Каждому процессу даётся доступ к определённой группе ядер. Следовательно потоки этих процессов могут видеть только свою группу ядер.
Поток выполняется на процессоре определённое время, затем уступает место другому потоку. Кстати, максимальное время на которое поток может занять процессор называется квантом. Причем время кванта можно настроить, выбрав короткие или длинные кванты. Как это сделать, я покажу ниже в этой статье, так что читайте дальше.
Поток может не отработать весь свой квант, так как если другой поток готов к выполнению и имеет более высокий приоритет, то он вытеснит первый поток.
В системе существует планировщик, который и занимается управлением потоками. Именно он решает какой поток будет выполняться на процессоре следующим. Причем планировщик работает в режиме ядра.
Так как процессор постоянно обрабатывает разные, несвязанные между собой потоки, то он должен запоминать на каком результате он остановился выполняя определённый поток. Такое запоминание предыдущего потока и переключение на новый называют – переключением контекста.
Планирование осуществляется на уровне потоков, а не процессов. Например, Процесс_А имеет 10 потоков, а Процесс_Б – 2 потока. Тогда процессорное время распределился между этими 12 потоками равномерно.
Приоритеты потоков
Планирование потоков полагается на их приоритеты. Windows использует 32 уровня приоритета для потоков от 0 до 31:
- 16 — 31 — уровни реального времени;
- 1 — 15 — обычные динамические приоритеты;
- 0 — зарезервирован для потока обнуления страниц.
Вначале поток получает свой Базовый приоритет, который наследуется от приоритета процесса:
- реального времени (24),
- высокий (13),
- выше среднего (10),
- обычный (8),
- ниже среднего (6),
- низкий (4).
Дальше назначается относительный приоритет который увеличивает или уменьшает приоритет потока:
- критический по времени (+15),
- наивысший (+2),
- выше среднего(+1),
- обычный (0),
- ниже среднего (-1),
- самый низкий (-2),
- уровень простоя (-15).
После получения базового приоритета и корректировки относительным приоритетом получается динамический приоритет:
Базовый приоритет ⇨
Относительный приоритет ⇩ |
Реального времени (24) |
Высокий (13) |
Выше среднего (10) |
Обычный (8) |
Ниже среднего (6) |
Низкий (4) |
Критический по времени (+15 но не выше 15 если это не поток реального времени и не выше 31 если поток реального времени) |
31 | 15 | 15 | 15 | 15 | 15 |
Наивысший (+2) | 26 | 15 | 12 | 10 | 8 | 6 |
Выше среднего (+1) | 25 | 14 | 11 | 9 | 7 | 5 |
Обычный (0) | 24 | 13 | 10 | 8 | 6 | 4 |
Ниже среднего (-1) | 23 | 12 | 9 | 7 | 5 | 3 |
Самый низкий (-2) | 22 | 11 | 8 | 6 | 4 | 2 |
Уровень простоя (-15 но не ниже 1 если это не поток реального времени и не ниже 16 если это поток реального времени) |
16 | 1 | 1 | 1 | 1 | 1 |
Изменить базовый приоритет процесса можно из “Диспетчера задач” на вкладке “Подробности“, или в “Process Explorer“. Однако, это не поменяет относительный приоритет потока.
Приоритеты отдельных потоков можно посмотреть в программе “Process Explorer“. Но изменять их нет смысла, так как только разработчик данной программы понимает как лучше расставить приоритеты потокам.
Получается что относительный приоритет у потока Notepad.exe равен 2, так как динамический приоритет больше базового на 2.
Состояния потоков
Поток может находиться в следующих состояниях:
- Готов (Ready) — поток готов к выполнению и ожидает процессор.
- Готов с отложенным выполнением (Deferred ready) — поток выбран для выполнения на конкретном ядре и ожидает именно это ядро.
- В повышенной готовности (Standby) — поток выбран следующим для выполнения на конкретном ядре. Как только сможет процессор выполнит переключение контекста на этот поток.
- Выполнение (Running) — выполняется на процессоре пока не истечет его квант времени, или пока его не вытеснит поток с большем приоритетом.
- Ожидание (Waiting) — поток ждет каких-то ресурсов.
- Переходное состояние (Transition) — готов к выполнению, но стек ядра выгружен из памяти, как только стек загрузится в память поток перейдет в состояние Готов.
- Завершение (Terminated) — поток выполнил свою работу и завершился сам, или его завершили принудительно.
- Инициализация (Initializated) — состояние при создании потока.
Кванты времени
Как я уже говорил квант времени выполнения потока может быть длинным или коротким. В настольных системах по умолчанию квант времени короткий, чтобы различные приложения быстро уступали друг другу место. В серверных системах по умолчанию длинный квант времени, чтобы серверные службы реже переключали контекст процессора.
Итак, теперь я вам покажу как переключить систему на работу с длинным или коротким квантом. Длительность кванта времени настраивается тут: “Свойства системы” / “Дополнительные параметры системы” / “Дополнительно” / “Быстродействие” / “Параметры” / “Дополнительно”:
- Программ – короткий квант времени;
- Служб – длинный квант времени.
На серверной системе можно выбрать “программ” если это сервер терминалов или просто настольный компьютер с установленной серверной системой.
На десктопной системе можно выбрать “служб” если вы запускаете какую-то длительную компиляцию или рендерите видео, а потом вернуть обратно в состояние “программ“.
Изменение приоритета планировщиком
Планировщик Windows периодически меняет текущий приоритет потоков. Делается это например для:
- повышения приоритета, если поток слишком долго ожидает выполнение (предотвращает зависание программы);
- повышения приоритета, если происходит ввод из пользовательского интерфейса (сокращение времени отклика);
- повышения приоритета, после завершения операции ввода/вывода (чтобы потоки ждущие ввод/вывод быстрее выполнялись). При ждать могут:
- диск, cd-rom, параллельный порт, видео — повышение на 1 пункт;
- сеть, почтовый слот, именованный канал, последовательный порт — повышение на 2 пункта;
- клавиатура или мышь — повышение на 6 пунктов;
- звуковая карта — повышение на 8 пунктов.
- когда поток ожидает ресурс, который занят другим потоком, то система может повысить приоритет потока который занял нужный ресурс, чтобы он быстрее выполнил свою работу и освободил этот ресурс;
- повышается приоритет у потоков которые на первом плане, а свёрнутые приложения работают с низким приоритетом.
Эксперимент
Позвольте продемонстрировать следующий эксперимент, который покажет как посмотреть за повышением и понижением динамического приоритета:
- Запустите программу «Блокнот».
- Запустите «Системный монитор».
- Щелкните на кнопке панели инструментов «Добавить» (Add Counter).
- Выберите объект «Поток» (Thread), а затем выберите счетчик «Текущий приоритет» (Priority Current).
- В поле со списком введите «Notepad», а затем щелкните на кнопке «Поиск» (Search).
- Найдите строку «Notepad/0». Выберите ее, щелкните на кнопке «Добавить» (Add), а затем щелкните на кнопке «ОК».
- Как только вы щелкните мышкой по блокноту, то заметите в Системном мониторе, что приоритет у потока «Блокнот» поднялся до 12, если свернуть блокнот то приоритет вновь упадет до 10.
Поток простоя — idle
К вашему сведению процессор всегда обрабатывает какой-нибудь поток. Когда кажется что процессор ничем не занят, на самом деле запускается специальный поток idle (поток простоя). Притом, на каждое ядро процессора существует свой собственный поток простоя. В общем-то все потоки простоя принадлежат процессу простоя. Поток простоя имеет самый низкий приоритет (1), поэтому выполняется только тогда — когда полезных потоков нет.
Групповое планирование
Планирование потоков на базе потоков отлично работает, но не способно решить задачу равномерного распределения процессорного времени между несколькими пользователями на терминальном сервере. Потому в Windows Server 2012 появился механизм группового планирования.
Термины группового планирования:
- поколение — период времени, в течении которого отслеживается использование процессора;
- квота — процессорное время, разрешенное группе на поколение (исчерпание квоты означает, что группа израсходовала весь свой бюджет);
- вес — относительная важность группы от 1 до 9 (по умолчанию 5);
- справедливое долевое планирование — вид планирования, при котором потокам исчерпавшим квоту могут выделяться циклы простоя;
- ранг — приоритет групповой политики, 0 — наивысший, чем больше процессорного времени истратила группа, тем больше будет ранг, и с меньшей вероятностью получит процессорное время (ранг всегда превосходит приоритет) (0 ранг у потоков которые: не входят ни в одну группу, не израсходовали квоту, потоки с приоритетами реального времени).
Где же применяется групповое планирование? Например его использует механизм DFSS для справедливого распределения процессорного времени между сеансами на машине. Этот механизм включается по умолчанию при установке роли служб терминалов.
Помимо DFSS групповое планирование применяется в объектах Jobs (Задания), так мы можем ограничить Задание по % потребления CPU, например задание будет потреблять не больше 20% процессорного времени.
Вернуться к оглавлению
Сводка
Имя статьи
Планирование потоков Windows
Описание
Рассмотрим, как в Windows осуществляется планирование потоков для их выполнения на центральном процессоре. Также посмотрим на приоритеты процессов и потоков
В системе виртуальной памяти ОС Windows одна таблица страниц отводится для:
Какие особенности ОС Windows 95 являются преимуществом в сравнении с ОС Windows 3.1?
Вся необходимая информация для формирования маркера доступа находится в…
Список прав доступа к файлу может содержать список…
Является ли завершение потока основанием для запуска процедуры планирования?
Идентификатор безопасности SID является…
Критическая секция — это:
Маркер доступа содержит…
Предположим, что в одном из потоков процесса сформирован специальный маркер доступа для доступа к объекту. Значит, после открытия объекта остальные потоки процесса…
Ведение протокола при выполнении файловых операций дает возможность…
Доступ к байтам файлов под управлением ОС Windows осуществляется …
В файловой системе NTFS данные каталога…
Механизм сторожевых страниц используется для описания динамически меняющих свой размер регионов, таких, как…
Значение счетчика ссылок на объект, равное нулю, предполагает, что:
Потоковая модель передачи данных может быть обеспечена путем организации передачи данных через:
Для защиты системных файлов от пользователя с административными правами в системе…
В ОС Windows матрица доступа в силу ее большого размера и разреженности хранится в виде набора…
В файловой системе NTFS расположение файловых блоков на диске описывается в виде совокупности серий. Какое минимальное количество серий необходимо для описания расположения блоков файла размером 1 Мб?
При завершении процесса соответствующий объект ядра «process«…
В объектно-ориентированной схеме ОС Windows присутствует…
В ОС Windows можно организовать синхронный режим работы с отдельными файлами, задаваемый при открытии файла. При этом все изменения в файле немедленно сохраняются на диске. Подобный способпозволяет …
На многопроцессорном компьютере в состоянии исполнения может находиться…
Рабочим набором в ОС Windows называется…
Реализована ли в ОС Windows модель передачи данных, в рамках которой один из потоков записывает в промежуточный объект n байт, другой записывает m байт, а третий считывает k байт, где m+n>k ?
Каждая привилегия в отношении системы специфицируется:
Функция SetLastError …
Для асинхронного чтения данных из файла текущая позиция в файле, начиная с которой будет происходить чтение…
Дескриптор защиты в системе безопасности ОС Windows является принадлежностью…
К способам межпроцессного обмена, реализованного в ОС Windows, можно отнести:
Может ли существующий файл быть открытым для чтения с помощью функции CreateFile ?
Что такое мультипрограммная вычислительная среда?
Сохранение состояния программы при переключении процессора с одной программы на другую осуществляется в операционных системах:
Первоначальная деградация операционных систем на этапе четвертого поколения вычислительных машин повлекла за собой отказ от:
Производительность монолитных операционных систем…
Невытесняющая многозадачность, реализованная в ОС Windows 3.1, по сравнению с вытесняющей многозадачностью, реализованной в последующих версиях ОС Windows, является:
Ради чего корпорация MS пожертвовала модульностью и гибкостью архитектуры микроядра?
Для обращения к сервисам ОС Windows стандартное приложение должно прибегнуть к…
К консольным приложениям ОС MS Windows относятся:
Переносимости программ от одной версии ОС Windows другой способствует:
Стандарт Unicode используется для:
Для правильной обработки в программе ошибки «деление на ноль» целесообразно…
Для наблюдения за состоянием выполняющегося потока целесообразно применить…
Интерфейс между прикладной программой и операционной системой реализуется при помощи:
Отличие системного вызова от обычного вызова процедуры состоит…
При помощи операторов try и except можно:
Сохранение состояния текущего потока с его последующим восстановлением характерно для обработки:
Диспетчер Plug and Play назначает IRQL (interrupt request levels):
В двухуровневой системе планирования ОС Windows приоритеты низшего уровня контролируются…
Планирование в ОС Windows осуществляется на…
Проверка прав доступа к файлу проверяется:
Через Win32 функции экспортируются:
Объекты разрушаются при…
Win32-функция, создающая объект, возвращает приложению:
Реализация многозадачной операционной системы, в которой не поддерживаются потоки, предполагает периодическое сохранение и последующее восстановление:
Основной структурой, описывающей поток, является:
Для создания процесса библиотека kernel32.dll…
Сохранение контекста потока …
Поток может быть вытеснен:
Комбинация класса приоритета потока и класса приоритета процесса позволяет назначить значение 6 в качестве базового приоритета потока…
Какое из утверждений является правильным:
Накладные расходы на диспетчеризацию (переключение) потоков…
Применение жесткой привязки потока к процессору может повысить эффективность…
В ОС Windows файлы представляют собой неструктурированную последовательность байтов. Можно ли обмениваться через файл типизированными сообщениями?
Традиционно для коммуникаций используются разделяемые ресурсы, имена которых известны общающимся сторонам. С ресурсом обычно связан именованный объект. Можно ли файл считать таким ресурсом ввиду того, что объект «открытый файл» является неименованным?
Может ли интерфейс программного канала совпадать с интерфейсом обычного файла?
Функция ReadFile предназначена для чтения данных из:
Именованные каналы имеют уникальные имена в рамках:
Какое из перечисленных утверждений является правильным?
Одним из решений проблемы синхронизации является использование переменной замка (lock). При этом вхождение в критическую секцию осуществляется при помощи операций while(lock); и lock=1;. Недостатком данного решения является:
Атомарность (непрерывность) выполнения нескольких операций может быть обеспечена путем использования:
Использование спин-блокировки:
Для решения проблем синхронизации обычно используются семафоры, события, мьютексы. Можно ли для решения задач синхронизации использовать такие объекты, как потоки, процессы, файлы?
Отличие мьютекса от семафора состоит в том, что …
Связывание виртуального и физического адресов в ОС Windows обычно осуществляется на этапе…
Таблица страниц позволяет найти…
Регионы в виртуальной памяти создаются:
Может ли прикладная программа, находясь в непривилегированном режиме, модифицировать виртуальную ячейку памяти по адресу 0xA7777777 ?
Для того чтобы иметь возможность записать информацию по некоторому виртуальному адресу, необходимо:
Для приведения в соответствие содержимого файла на диске с содержимым его проекции в памяти используется …
Установленный бит V(Valid) в строке таблицы страниц PTE означает, что…
Наличие ассоциативной (TLB) памяти позволяет решить задачу:
Прототипные таблицы страниц используются для …
В системных файлах выгрузки могут находиться…
В результате страничных нарушений (page faults) может произойти…
Для региона файла, отображаемого в память…
В ОС Windows файл представляет собой…
Функция CreateFile используется для…
В ОС Windows …
Для синхронного чтения данных из файла текущей позиция в файле, начиная с которой будет происходить чтение…
В каждый конкретный момент файл может быть открыт для чтения …
Размер кластера диска равен…
В файловой системе NTFS данные файла…
Каждому файлу на NTFS диске …
Для поиска всех файлов с расширением «.doc» в каталоге достаточно применить…
Иерархическая файловая система на NTFS диске является…
Совместный доступ к файлу возможен…
Сделать работу с файлами более производительной можно за счет:
Управление ролевым доступом предполагает…
Маркер доступа является принадлежностью…
В состав учетной записи пользователя входит…
Генерация идентификатора безопасности пользователя SID осуществляется…
Создание дескриптора защиты файла осуществляется в момент…
Стандартные (по умолчанию) атрибуты защиты объекта должны быть сформированы…
Каналы утечки в системах с дискреционным доступом…
В системе защиты ОС Windows процедура входа в систему Winlogon …
Администратор системы…
Сколько привилегий обычно содержит учетная запись пользователя с административными правами в ОС Windows 2000 непосредственно после ее создания?
Процедура аутентификации пользователя обычно инициируется…
Чтобы сформировать новый маркер доступа, можно…
Система аудита заключается в…
Может ли поток, которому выделена память в стандартной куче процесса, получить случайно доступ к данным того процесса, которому эта страница принадлежала ранее?
Системный каталог dllcache предназначен для…
Механизм перевоплощения позволяет…
Для того чтобы не допустить повторное использование объектов, необходимо…
В двухуровневой системе планирования ОС Windows приоритеты высшего уровня определяются:
Иерархия процессов, например, отношения «родительский-дочерний», в ОС Windows…
Разделяемые страницы обычно используются…
Для быстрого поиска файла по имени в файловой системе NTFS каталог, содержащий большое число файлов, организован в виде…
Основные подсистемы в составе современных операционных систем сформировались:
Хранение файла на диске организовано в виде:
Функция LsaRemoveAccountRights позволяет отозвать привилегию из:
Применив комбинацию клавиш «ctrl+alt+del», пользователь может…
Какие особенности архитектуры ранних версий ОС Windows позволили обеспечить ее переносимость на разные аппаратные платформы?
В некоторый момент времени t анализ системы дискреционного доступа показал, что состояние системы безопасно. Это означает, что…
Использование 16-разрядного кода для хранения символа позволяет:
Обновление буфера ассоциативной памяти осуществляется…
Процедура планирования не запускается, если:
IRQL ((interrupt request levels) приоритеты прерываний задаются …
Использование слоя абстрагирования приоритетов позволяет:
После прохождения первичной обработки вторичная обработка прерывания обеспечивается…
В чем смысл реализации многозадачности в ОС?
Объекты могут быть закрыты только:
Win32-функции EnterCriticalSection и LeaveCriticalSection …
Приоритет потока обычно повышается:
Смысл использования комбинации клавиш «ctrl+alt+del» состоит в том, что она…
Для обмена сообщениями традиционно используют почтовые ящики. Если в сообщении указан адрес получателя, то это является вариантом:
Бесполезной с точки зрения пользователя, обусловленной особенностями реализации, можно считать деятельность, связанную с выполнением:
Спин-блокировкой называется:
Вытесняющее приоритетное планирование, реализованное в ОС Windows, означает, что не может быть вытеснен поток:
В каких операционных системах наиболее остро стоит проблема синхронизации прикладных программ:
Почему важно, чтобы ядро многозадачной ОС было реентерабельным?
Система контекстной помощи разработчика в компиляторе Visual Studio…
Многочисленные счетчики производительности, входящие в состав штатных инструментальных средств ОС Windows…
Переход из режима пользователя в режим ядра осуществляется при обработке:
Типовая реакция системы на отсутствие нужной информации в оперативной памяти состоит в…
Организация ввода с клавиатуры предполагает обработку:
Номер события, подлежащего обработке, определяется:
Программным прерыванием в терминологии Microsoft называется…
Объекты ядра в ОС Windows используются для управления:
Объекты ядра отличаются от объектов управления окнами и графикой…
Структура данных, содержащая информацию об объекте, формируется …
Если счетчик ссылок на объект, описывающий открытый файл, имеет значение, большее единицы, то это может означать, что:
Для создания процесса используется Win32-функция…
Информация о дескрипторе созданного процесса имеется…
На однопроцессорном компьютере под управлением ОС Windows одновременно несколько потоков может находиться в состоянии…
В ОС Windows …
Планирование потоков осуществляется…
Поток, квант времени которого истек, может…
В результате реализации потоков реального времени в ОС Windows появляется возможность:
Сегменты разделяемой памяти, используемые для коммуникаций прикладных программ, …
Буфер для хранения информации в стандартном программном канале ОС Windows…
Операция чтения из файла является более медленной по сравнению с операцией чтения из анонимного канала потому, что при этом используется:
С помощью именованного канала может быть реализована:
Одним из решений проблемы синхронизации является использование переменной замка (lock). При этом вхождение в критическую секцию осуществляется при помощи операций while(lock); и lock=1;. Для корректного использования переменной замка необходимо:
Атомарность выполнения Interlocked-функций реализуется за счет:
Число циклов, которое проводит поток в состоянии активного ожидания:
Может ли прикладная программа, находясь в непривилегированном режиме, модифицировать виртуальную ячейку памяти по адресу 0x77777777 ?
Для выделения памяти в куче используется функция …
Сброшенный бит V(Valid) в строке таблицы страниц PTE может означать, что соответствующая страница…
Информация о состоянии страниц физической памяти хранится в…
Изменение рабочего набора может быть следствием…
При нехватке оперативной памяти в ОС Windows принято выталкивать на диск страницу…
В результате успешного применения функции CreateFile…
Имя файла может быть задано в стандарте…
В ОС Windows файловая система …
Механизм точек повторного анализа в файловой системе NTFS используется для организации…
В файловой системе NTFS совместный доступ к файлу, то есть одновременное открытие файла несколькими потоками…
Применение функции FlushFileBuffers позволяет…
Журналирование позволяет…
Понятие «объект» связывают с семафорамми, каналами, файлами потому, что…
Для удаления учетной записи можно использовать…
Идентификатор безопасности SID…
При формировании входящего в состав дескриптора защиты списка прав доступа…
В соответствии с политикой безопасности, лежащей в основе системы защиты ОС Windows …
Для того чтобы добавить новую привилегию в маркер доступа процесса, достаточно…
Наиболее вероятным следствием попытки удаления администратором файла c расширением .exe из каталога %systemroot%system32 будет…
Сегменты разделяемой памяти создаются с использованием…
Поток, завершивший операцию ввода-вывода, может быть переведен…
Инструментальные средства изучения ОС Windows могут:
Для описания регионов в виртуальном адресном пространстве в ОС Windows используются:
В операционной системе, поддерживающей потоки, каждый поток выполняется:
Для учета свободных и занятых блоков в файловой системе NTFS используется…
В ОС Windows:
Функция WaitForSingleObject …
Может ли прикладная программа создать регион, расположенный между виртуальными адресами 0x11111111 и 0x22222222 ?
Известно, что программирование в 16-разрядных системах, например, в MS-DOS, осуществлялось с активным использованием так называемых «длинных» указателей (long pointer) с префиксом LP. Использование префикса LP для некоторых типов данных в Win32-приложениях…
Функция LookUpAccountName позволяет получить…
Если один из процессов записывает данные в файл, а другой их считывает, то это…
Матрица доступа описывает состояние прав доступа при…
Оптимальным способом завершения процесса следует считать:
Учетная запись пользователя может быть создана…
Обработка ошибок позволяет:
Если значение счетчика ссылок на объект, описывающий открытый файл, стало равным нулю, то:
Ядро назначает IRQLs (interrupt request levels) приоритеты:
Коммуникационный канал в ОС Windows может использоваться…
Для связи символьного имени файла с блоками диска в файловой системе NTFS запись о файле в каталоге…
В привилегированном режиме работы процессора работает:
Преимущество использования DLL по сравнению со статической линковкой состоит в том, что
Известно, что совокупность системных вызовов ОС Windows изменяется от версии к версии. Поэтому разработчики добиваются выполнения стандартного приложения на всех версиях системы…
Для получения информации об особенностях использования конкретной Win32-функции разработчик приложения должен прибегнуть к помощи…
К основным системным механизмам ОС относят:
Для организации связи между периферийными устройствами и центральным процессором используются…
Вектор прерываний (таблица IDT) ставит адрес процедуры обработки в соответствие номеру:
Программные прерывания (APC и DPC) выполняются на …
ОС Windows называют объектно-ориентированной средой, в которой…
Объект представляет собой:
При помощи Win32-функций можно:
Основной структурой, описывающей процесс, является:
Вытеснение потока — это:
Если для одного из потоков установлен класс приоритета THREAD_PRIORITY_ABOVE_NORMAL (выше нормы), а для другого — THREAD_PRIORITY_BELOW_NORMAL (ниже нормы), означает ли это, что:
Характерное значение величины кванта времени в современных ОС составляет…
На многопроцессорных комплексах в ОС Windows может быть реализована…
Может ли файл быть разделяемым ресурсом ввиду того, что при создании файла пользователь, как правило, не устанавливает атрибутов защиты?
Анонимные каналы функционируют в пределах:
Проблема синхронизации обычно решается…
Одним из решений проблемы синхронизации является использование переменной замка (lock). При этом вхождение в критическую секцию осуществляется при помощи операций while(lock); и lock=1;.Непрерывность (атомарность) выполнения этих операций:
Удобство использования Interlocked-функций для задач синхронизации обеспечивается…
Для синхронизации потоков различных процессов принято использовать:
В состав параметров синхронизирующей функции WaitForSingleObject входит описатель объекта. Для того чтобы воспользоваться данной функцией, поток может:
Для синхронизации потоков, использующих одну и ту же кучу процесса, …
Установка бита V(Valid) в строке таблицы страниц PTE происходит…
Системные страничные файлы выгрузки хранят…
Система каталогов файлов реализована для …
Размер кластера целесообразно сделать…
Битовый вектор, используемый для описания свободных и занятых блоков диска в файловой системе NTFS…
Если в составе атрибутов файла присутствует флаг FILE_ATTRIBUTE_REPARSE_POINT, то это означает, что данный файл…
Может ли субъект иметь дескриптор защиты?
Привилегии конкретного пользователеля ОС Windows…
Изменить системное время может…
База данных PFN (page frame number) используется для:
Система именования файлов, принятая в ОС Windows, поддерживает уникальность имени файла…
В ОС Windows данные файла, представляющие собой неструктурированную последовательность байтов…
Возможность выполнения каждого действия несколькими способами делает ОС Windows более…
Обычно при многопроцессорное планирование для загрузки выбирается процессор, на котором поток выполнялся последний раз. Это связано с тем, что…
В чем состоят преимущества монолитного дизайна операционных систем перед микроядерным?
Список прав доступа SACL необходим для решения задач…
Список прав доступа может храниться в составе…
Для пользовательского кода и данных 32-разрядной версии ОС Windows отводится:
Что можно сказать по поводу реализации в операционной системе MS-DOS подсистемы планирования загрузки процессора:
Какие изменения в архитектуре ОС Windows позволили добиться повышения производительности?
При передаче страниц памяти регионам в адресном пространстве процесса…
Что можно сказать о реализации подсистемы планирования программ, сформировавшейся в период третьего поколения компьютеров, в операционных системах четвертого поколения:
В чем состоят преимущества микроядерного дизайна операционных систем перед монолитным?
Для описания обычной 8-разрядной символьной переменной в ОС Windows можно использовать тип:
Наличие объектов дает компании Microsoft возможность:
Атрибуты защиты имеются у объектов
В операционной системе, поддерживающей потоки, предполагается периодическое сохранение и последующее восстановление:
Запуск нового потока на компьютере под управлением ОС Windows предполагает его инициализацию и переход в состояние…
Анонимный канал реализован
ОС Windows поддерживает набор примитивов для организации межпроцессного взаимодействия, тогда как аналогичные функции для организации взаимодействия потоков отсутствуют. Из этого следует, что организовать взаимодействие потоков в ОС Windows…
Эффективное время доступа к памяти является близким к времени доступа к оперативной памяти:
Структурную обработку исключений менеджер памяти использует для работы со страницами региона…
Для задания атрибутов файла используется функция…
В ОС Windows операция чтения из файла …
Функция LockFile используется для…
Для того чтобы лишить пользовательское приложение конкретной привилегии в отношении системы, достаточно…
Потоки одного процесса…
Для правильной организации регистрации пользователя в системе целесообразно…
Наиболее важным с точки зрения задач синхронизации является:
Применение спин-блокировки на многпроцессорных комплексах:
Задание величины кванта времени…
Для отображения файла в память ему выделяются…
Текущее значение приоритета…
В рамках системы защиты ОС Windows каждый поток снабжается…
Введение типа данных TCHAR …
Для выполнения приложений в среде ОС Windows…
Преимущество программной поддержки сегментации по сравнению с аппаратной состоит в:
Организация таблицы страниц в виде двух уровней необходима для…
Общепринятые расширения имен файлов (.c, .doc, .txt и др.) система использует для…
Система контроля доступа, реализованная в ОС Windows…
В ОС Windows реализована система управления…
Функция LsaAddAccountsRights позволяет добавить привилегию в:
В файл-журнал для проведения возможных восстановительных операций заносятся…
Чтобы сведения о попытке пользователя получить доступ к файлу попали в протокол аудита, необходимо:
Может ли виртуальный адрес иметь значение большее, чем 0xFFFFFFFF ?
Прежде чем осуществить запись в файл при помощи функции WriteFile, этот файл должен быть
Регион куча создается:
Главное отличие штатной интерактивной процедуры аутентификации от троянского коня заключается…
Готовые к выполнению потоки в системе ОС Windows могут находиться в состоянии…
Минимальное значение базового приоритета пользовательского потока может быть равно:
Размер виртуального адресного пространства ОС Windows …
Описатель (handle) объекта необходим:
Аннотация: Алгоритмы планирования. Состояния потоков. Кванты. Приоритеты.
Алгоритм планирования в Windows. Динамическое повышение приоритета.
Если операционная система поддерживает многопоточность, она может распределять процессорное время либо между процессами, либо между потоками. В операционной системе Windows процессор предоставляется потокам, иначе говоря, осуществляется планирование на уровне потоков.
Таким образом, если один процесс имеет пять потоков, а второй – десять, то первый процесс будет занимать процессор в два раза больше времени, чем второй (при условии, конечно, что все потоки имеют равный приоритет и выполняют примерно одинаковую работу).
Алгоритмы планирования
Существуют разные алгоритмы планирования. Рассмотрим основные виды.
1. Вытесняющие/невытесняющие алгоритмы.
В случае вытесняющего алгоритма операционная система в любой момент времени может прервать выполнение текущего потока и переключить процессор на другой поток. В невытесняющих алгоритмах поток, которому предоставлен процессор, только сам решает, когда передать управление операционной системе.
2. Алгоритмы с квантованием.
Каждому потоку предоставляется квант времени, в течение которого поток может выполняться на процессоре. По истечении кванта операционная система переключает процессор на следующий поток в очереди. Квант обычно равен целому числу интервалов системного таймера1Системный таймер – электронное устройство на материнской плате или в процессоре, которое вырабатывает сигнал прерывания через строго определенные промежутки времени (интервал системного таймера)..
3. Алгоритмы с приоритетами.
Каждому потоку назначается приоритет (priority) – целое число, обозначающее степень привилегированности потока. Операционная система при наличии нескольких готовых к выполнению потоков выбирает из них поток с наибольшим приоритетом.
В Windows реализован смешанный алгоритм планирования – вытесняющий, на основе квантования и приоритетов.
Состояния потоков
За время своего существования поток может находиться в нескольких состояниях. Перечислим основные состояния:
- Готовность (Ready) – поток готов к выполнению и ждет своей очереди занять процессор.
- Выполнение (Running) – поток выполняется на процессоре.
- Ожидание (Waiting) – поток не может выполняться, поскольку ждет наступление некоторого события (например, завершения операции ввода-вывода или сообщения от другого потока)
Кроме основных существует ещё несколько состояний – Инициализация (Init), Завершение (Terminate), Состояние простоя (Standby), Переходное состояние (Transition), Состояние отложенной готовности (Deferred ready). Подробнее о них можно узнать в [5; 2].
На рис.9.1 показаны основные состояния потока, возможные переходы между состояниями и условия переходов.
Рис.
9.1.
Состояния потока
Кванты
В Windows имеется два базовых размера кванта – 2 интервала системного таймера и 12 интервалов. Если квант времени короткий, то потоки будут переключаться быстрее и «отзывчивость» (responsiveness) системы улучшится – это важное свойство для пользователя, поэтому в клиентских системах Windows по умолчанию используются короткие кванты. При этом производительность системы в целом снижается, поскольку потоки не будут успевать выполнять свои задачи в течение выделенного кванта, а частые переключения создадут высокие накладные расходы (служебные операции системы при смене потоков). Вследствие этого в серверных версиях Windows по умолчанию применяются длинные кванты.
Длительность интервала системного таймера (в сотнях наносекунд) хранится в переменной KeMaximumIncrement (для x86 – файл basentosexi386splocks.asm, строка 140; для x64 – файл basentosexamd64hifreqlk.asm, строка 147) и устанавливается функцией KeSetTimeIncrement (файл basentoskemiscc.c, строка 711 на основе значения, предоставляемого HAL.
Каждый процесс хранит величину кванта в поле QuantumReset структуры KPROCESS (файл basentosincke.h, строка 1029). Значение в этом поле равно количеству интервалов таймера, умноженному на 3. Например, для длинных квантов (12 интервалов) значение QuantumReset будет равно 36. Таким образом, при каждом срабатывании таймера (возникает прерывание) система уменьшает квант выполняющегося потока на 3 единицы.
Умножение на три введено для того чтобы можно было в разной степени уменьшать квант в двух различных ситуациях – срабатывании таймера (квант уменьшается на 3 единицы) и выходе из состояния ожидания (квант уменьшается на единицу). Уменьшение кванта при выходе потока из состояния ожидания применяется чтобы избежать ситуации бесконечно выполняющегося потока: если при каждом срабатывании таймера поток находится в состоянии ожидания, а при выходе из ожидания значение кванта не изменяется, то теоретически поток может выполняться бесконечно. Поэтому при выходе из состояния ожидания текущее значение его кванта уменьшается на единицу.
Значение кванта может быть изменено пользователем. Например, на Windows 7 нужно проделать следующее: Компьютер – Свойства – Дополнительные параметры системы – вкладка «Дополнительно» – раздел «Быстродействие» – Параметры – вкладка «Дополнительно» – раздел «Распределение времени процессора». Можно выбрать короткие кванты («Оптимизировать работу программ») или длинные («Оптимизировать работу служб, работающих в фоновом режиме») (рис.9.2).
Рис.
9.2.
Изменение величины кванта в Windows 7number
За изменение величины кванта отвечает функция KeSetQuantumProcess (файл basentoskeprocobj.c, строка 1393).
Кроме длинных и коротких квантов в Windows реализовано динамическое увеличение размера кванта для потоков активного процесса (т.е. того процесса, окно которого в настоящий момент активно). За повышение кванта (и приоритета) отвечает функция PspComputeQuantumAndPriority (файл basentospspsquery.c, строка 4415). Более подробную информацию о динамическом увеличении кванта см. [5, стр. 361].
Приоритеты
В операционной системе Windows имеется 32 уровня приоритета – от 0 до 31 (рис.9.3).
Рис.
9.3.
Приоритеты в Windows
Приоритеты назначаются процессам и потокам. У процесса имеется единственный приоритет, который называется базовым. Значение этого приоритета хранится в поле BasePriority структуры KPROCESS (файл basentosincke.h, строка 1028). В WinAPI для работы с базовым приоритетом процесса используются классы приоритета (например, REALTIME, NORMAL и т. д.); соответствие классов приоритета числовым значениям показано на рис.9.3. Например, при создании процесса можно указать класс приоритета в качестве параметра WinAPI-функции CreateProcess, иначе будет установлен приоритет по умолчанию (см. лекцию 6 «Процессы и потоки», раздел «Создание процесса»). В дальнейшем класс приоритета процесса можно изменить при помощи WinAPI-функции SetPriorityClass.
В WRK структура PROCESS_PRIORITY_CLASS и значения соответствующих констант (заметьте, что эти значения не совпадают с числовыми значениями приоритетов) определены в файле publicsdkincntpsapi.h (строка 399). Класс приоритета процесса хранится в поле PriorityClass структуры EPROCESS (см. лекцию 7 «Процессы и потоки», раздел «Структуры данных для процессов и потоков»). Таким образом, если, например, процессу назначен класс приоритета High, то в поле PriorityClass запишется число 3 (значение константы PROCESS_PRIORITY_CLASS_HIGH), в поле BasePriority – значение 13 (соответствующее числовое значение приоритета).
Поток имеет два значения приоритета – базовый и текущий. При создании потока базовый приоритет потока принимается равным базовому приоритету процесса-владельца. Можно изменить базовый приоритет потока при помощи WinAPI-функции SetThreadPriority. Параметрами этой функции являются дескриптор потока и относительный приоритет, который определяет смещение базового приоритета (таблица 7.1).
Относительный приоритет | Смещение для динамических приоритетов | Смещение для приоритетов реального времени |
---|---|---|
Time Critical | Базовый приоритет = 15 | Базовый приоритет = 31 |
Highest | +2 | +2 |
Above Normal | +1 | +1 |
Normal | 0 | 0 |
Below Normal | –1 | –1 |
Lowest | –2 | –2 |
Idle | Базовый приоритет = 1 | Базовый приоритет = 16 |
Пример. Имеется процесс с базовым приоритетом Below Normal (6). Поток, принадлежащий этому процессу, имеет такой же базовый приоритет. Вызов функции SetThreadPriority с параметром Highest сделает базовый приоритет потока равным 8, а с параметром Time Critical – равным 15.
Текущий приоритет потока при создании потока равен базовому, но в дальнейшем может динамически повышаться и понижаться операционной системой (эта процедура будет рассмотрена далее). Заметим, что для потоков с базовым приоритетом Real Time текущий приоритет не изменяется и всегда равен базовому.
Базовый приоритет потока хранится в поле BasePriority, а текущий – в поле Priority структуры KTHREAD (файл basentosincke.h, строки 1123 и 1237).
Содержание
- Алгоритмы планирования операционной системы
- First Come First Serve (FCFS)
- Кратчайшая работа следующая (SJN)
- Простая модель планировщика ОС
- Планирование потоков
- Алгоритмы планирования
- Состояния потоков
- Кванты
- Приоритеты
- Обзор алгоритмов планирования в windows
Алгоритмы планирования операционной системы
Планировщик процессов планирует различные процессы, которые должны быть назначены ЦПУ на основе определенных алгоритмов планирования. Существует шесть популярных алгоритмов планирования процессов, которые мы собираемся обсудить в этой главе:
First Come First Serve (FCFS)
Время ожидания каждого процесса выглядит следующим образом —
Процесс | Время ожидания: Время обслуживания — Время прибытия |
---|---|
P0 | 0 — 0 = 0 |
P1 | 5 — 1 = 4 |
P2 | 8 — 2 = 6 |
P3 | 16 — 3 = 13 |
Среднее время ожидания: (0 + 4 + 6 + 13) / 4 = 5,75
Кратчайшая работа следующая (SJN)
Это не упреждающий, упреждающий алгоритм планирования.
Лучший подход для минимизации времени ожидания.
Легко реализовать в пакетных системах, где необходимое время процессора известно заранее.
Невозможно реализовать в интерактивных системах, где необходимое время ЦП неизвестно.
Процессор должен заранее знать, сколько времени займет процесс.
Это не упреждающий, упреждающий алгоритм планирования.
Лучший подход для минимизации времени ожидания.
Легко реализовать в пакетных системах, где необходимое время процессора известно заранее.
Невозможно реализовать в интерактивных системах, где необходимое время ЦП неизвестно.
Процессор должен заранее знать, сколько времени займет процесс.
Дано: таблица процессов и время их прибытия, время выполнения
Процесс | Время прибытия | Время исполнения | Время обслуживания |
---|---|---|---|
P0 | 5 | ||
P1 | 1 | 3 | 5 |
P2 | 2 | 8 | 14 |
P3 | 3 | 6 | 8 |
Время ожидания каждого процесса выглядит следующим образом —
Процесс | Время ожидания |
---|---|
P0 | 0 — 0 = 0 |
P1 | 5 — 1 = 4 |
P2 | 14 — 2 = 12 |
P3 | 8 — 3 = 5 |
Среднее время ожидания: (0 + 4 + 12 + 5) / 4 = 21/4 = 5,25
Источник
Простая модель планировщика ОС
Не так давно пытался найти здесь какую-нибудь информацию о планировщике Windows и к своему удивлению не нашёл ничего конкретного о планировщиках вообще, поэтому решил запостить вот этот пример планировщика, надеюсь кому-то он окажется полезен. Код написан на Turbo Pascal со вставками ассемблера 8086.
Что собственно планирует планировщик?
Алгоритмы планирования
Критические секции
C процессорным временем или стеком вроде бы всё просто, а что если потоку требуется например напечатать на принтере котёнка? А что если таких потоков два? При невытесняющей многозадачности всё пройдёт как по маслу: один поток отпечатает котёнка, завершится и отдаст управление планировщику, который позволит печатать второму потоку. Но если многозадачность вытесняющая, планировщик может переключить потоки в момент, когда те ещё не завершили печать и получится что-то вроде этого:
Чтобы такого не происходило вводится механизм критических секций. Поток, которой хочет занять некий неразделяемый ресурс, сообщает об этом планировщику. Если ресурс ещё не занят другим потоком — планировщик разрешает потоку продолжить работу, а сам помечает ресурс, как занятый. Если же ресурс занят — поток помещается в очередь, где он ожидает, когда тот освободится. По завершении работы с таким ресурсом поток должен сообщить планировщику о том что ресурс теперь могут использовать другие потоки. Эти два действия: попытка захватить ресурс и сообщение о прекращении работы с ним называются критическими скобками. Кстати при неумелой их расстановке может возникнуть ситуация взаимной блокировки потоков, которая не всегда хорошо и быстро диагностируется и может вызвать неиллюзорный батхёрт у разработчика и пользователя уже после релиза продукта.
Взаимная блокировка
Допустим у нас есть неразделяемые ресурсы А и Б и потоки Х, Y, которые хотят задействовать эти ресурсы. Если некий криворукий недостаточно компетентный программист расставит критические скобки вот так:
…
Поток X
Занять Ресурс(А)
Занять Ресурс(Б)
…
Отдать Ресурс(А)
Отдать Ресурс(Б)
Поток Y
Занять Ресурс(Б)
Занять Ресурс(А)
…
Отдать Ресурс(Б)
Отдать Ресурс(А)
через некоторое время возникнет вот такая ситуация:
Сладенькое
Ну и собственно то ради чего это всё писалось. Как уже было сказано код нашего планировщика будет выполнен на языке Turbo Pascal.
Механизм критических секций реализован в процедурах EnterCritical(), LeaveCritical(). Вспомним ещё раз: чтобы войти в критическую секцию — нужно проверить не занята ли она, и по результату — либо занять её и разрешить потоку ей пользоваться, либо поставить поток в очередь и передать управление кому-то другому.
C LeaveCritical() вроде бы и так всё ясно:
Сама процедура переключения потоков написана с использованием ассемблерных вставок, поэтому можно увидеть момент переключения потоков от одного к другому с точностью до машинной команды:
Сама процедура скомпилирована с директивой interrupt, то есть является обработчиком прерывания. Которое может быть спровоцировано как аппаратно, так и программно вызовом int 08h, вот так:
Так же необходимо описать сами процедуры регистрации, включения и остановки потоков. Если кому-то интересно — можно посмотреть в исходниках процедуры RegistrThread, RunThread, StopThread.
Вот и всё! Наш планировщик готов.
Исходники вместе примером многопоточной программы написаной под этот планировщих и досовским турбиком можно скачать здесь. Можно поиграться и посмотреть как по разному будут выполняться потоки при вытесняющей и невытесняющей многозадачности (процедура ExecuteRegisterThreads(true/false)), смоделировать ситуацию взаимной блокировки и убедиться в том, что она не всегда диагностируема (я однажды минуту ждал пока возникнет дедлок).
Запускать в системах новее Win98 советую из под DOSbox.
Источник
4.1 Основные понятия планирования процессов
Ситуации, когда необходимо планирование:
Когда создается процесс
Когда процесс завершает работу
Когда процесс блокируется на операции ввода/вывода, семафоре, и т.д.
При прерывании ввода/вывода.
Необходимость алгоритма планирования зависит от задач, для которых будет использоваться операционная система.
Основные три системы:
Задачи алгоритмов планирования:
4.2 Планирование в системах пакетной обработки
Процессы ставятся в очередь по мере поступления.
Справедливость (как в очереди покупателей, кто последний пришел, тот оказался в конце очереди)
Процесс, ограниченный возможностями процессора может затормозить более быстрые процессы, ограниченные устройствами ввода/вывода.
Нижняя очередь выстроена с учетом этого алгоритма
Уменьшение оборотного времени
Справедливость (как в очереди покупателей, кто без сдачи проходит в перед)
Длинный процесс занявший процессор, не пустит более новые краткие процессы, которые пришли позже.
4.2.3 Наименьшее оставшееся время выполнение
Аналог предыдущего, но если приходит новый процесс, его полное время выполнения сравнивается с оставшимся временем выполнения текущего процесса.
4.3 Планирование в интерактивных системах
4.3.1 Циклическое планирование
Самый простой алгоритм планирования и часто используемый.
Каждому процессу предоставляется квант времени процессора. Когда квант заканчивается процесс переводится планировщиком в конец очереди. При блокировке процессор выпадает из очереди.
Пример циклического планирования
Справедливость (как в очереди покупателей, каждому только по килограмму)
4.3.2 Приоритетное планирование
Каждому процессу присваивается приоритет, и управление передается процессу с самым высоким приоритетом.
Приоритет может быть динамический и статический.
Динамический приоритет может устанавливаться так:
П=1/Т, где Т- часть использованного в последний раз кванта
Если использовано 1/50 кванта, то приоритет 50.
Если использован весь квант, то приоритет 1.
Т.е. процессы, ограниченные вводом/вывода, будут иметь приоритет над процессами ограниченными процессором.
Часто процессы объединяют по приоритетам в группы, и используют приоритетное планирование среди групп, но внутри группы используют циклическое планирование.
Приоритетное планирование 4-х групп
4.3.3 Методы разделения процессов на группы
Группы с разным квантом времени
Сначала процесс попадает в группу с наибольшим приоритетом и наименьшим квантом времени, если он использует весь квант, то попадает во вторую группу и т.д. Самые длинные процессы оказываются в группе наименьшего приоритета и наибольшего кванта времени.
Процесс либо заканчивает работу, либо переходит в другую группу
Группы с разным назначением процессов
Процесс, отвечающий на запрос, переходит в группу с наивысшим приоритетом.
Такой механизм позволяет повысить приоритет работы с клиентом.
В системе с n-процессами, каждому процессу будет предоставлено 1/n времени процессора.
Процессам раздаются «лотерейные билеты» на доступ к ресурсам. Планировщик может выбрать любой билет, случайным образом. Чем больше билетов у процесса, тем больше у него шансов захватить ресурс.
Процессорное время распределяется среди пользователей, а не процессов. Это справедливо если у одного пользователя несколько процессов, а у другого один.
4.4 Планирование в системах реального времени
Системы реального времени делятся на:
Внешние события, на которые система должна реагировать, делятся:
Что бы систему реального времени можно было планировать, нужно чтобы выполнялось условие:
Т.е. перегруженная система реального времени является не планируемой.
4.4.1 Планирование однородных процессов
В качестве однородных процессов можно рассмотреть видео сервер с несколькими видео потоками (несколько пользователей смотрят фильм).
Т.к. все процессы важны, можно использовать циклическое планирование.
Но так как количество пользователей и размеры кадров могут меняться, для реальных систем он не подходит.
4.4.2 Общее планирование реального времени
Используется модель, когда каждый процесс борется за процессор со своим заданием и графиком его выполнения.
Планировщик должен знать:
частоту, с которой должен работать каждый процесс
объем работ, который ему предстоит выполнить
ближайший срок выполнения очередной порции задания
Рассмотрим пример из трех процессов.
Процесс А запускается каждые 30мс, обработка кадра 10мс
Процесс В частота 25 кадров, т.е. каждые 40мс, обработка кадра 15мс
Процесс С частота 20 кадров, т.е. каждые 50мс, обработка кадра 5мс
Три периодических процесса
Проверяем, можно ли планировать эти процессы.
10/30+15/40+5/50=0.808 4.4.3 Статический алгоритм планирования RMS (Rate Monotonic Scheduling)
Процессы должны удовлетворять условиям:
Процесс должен быть завершен за время его периода
Один процесс не должен зависеть от другого
Каждому процессу требуется одинаковое процессорное время на каждом интервале
У непериодических процессов нет жестких сроков
Прерывание процесса происходит мгновенно
Приоритет в этом алгоритме пропорционален частоте.
Процессу А он равен 33 (частота кадров)
Процессу В он равен 25
Процессу С он равен 20
Процессы выполняются по приоритету.
Статический алгоритм планирования RMS (Rate Monotonic Scheduling)
4.4.4 Динамический алгоритм планирования EDF (Earliest Deadline First)
Наибольший приоритет выставляется процессу, у которого осталось наименьшее время выполнения.
При больших загрузках системы EDF имеет преимущества.
Проверяем, можно ли планировать эти процессы.
Источник
Планирование потоков
Если операционная система поддерживает многопоточность, она может распределять процессорное время либо между процессами, либо между потоками. В операционной системе Windows процессор предоставляется потокам, иначе говоря, осуществляется планирование на уровне потоков.
Таким образом, если один процесс имеет пять потоков, а второй – десять, то первый процесс будет занимать процессор в два раза больше времени, чем второй (при условии, конечно, что все потоки имеют равный приоритет и выполняют примерно одинаковую работу).
Алгоритмы планирования
Существуют разные алгоритмы планирования. Рассмотрим основные виды.
1. Вытесняющие/невытесняющие алгоритмы.
В случае вытесняющего алгоритма операционная система в любой момент времени может прервать выполнение текущего потока и переключить процессор на другой поток. В невытесняющих алгоритмах поток, которому предоставлен процессор, только сам решает, когда передать управление операционной системе.
2. Алгоритмы с квантованием.
3. Алгоритмы с приоритетами.
Каждому потоку назначается приоритет (priority) – целое число, обозначающее степень привилегированности потока. Операционная система при наличии нескольких готовых к выполнению потоков выбирает из них поток с наибольшим приоритетом.
В Windows реализован смешанный алгоритм планирования – вытесняющий, на основе квантования и приоритетов.
Состояния потоков
За время своего существования поток может находиться в нескольких состояниях. Перечислим основные состояния:
Кроме основных существует ещё несколько состояний – Инициализация (Init), Завершение (Terminate), Состояние простоя (Standby), Переходное состояние (Transition), Состояние отложенной готовности (Deferred ready). Подробнее о них можно узнать в [5; 2].
На рис.9.1 показаны основные состояния потока, возможные переходы между состояниями и условия переходов.
Кванты
В Windows имеется два базовых размера кванта – 2 интервала системного таймера и 12 интервалов. Если квант времени короткий, то потоки будут переключаться быстрее и «отзывчивость» (responsiveness) системы улучшится – это важное свойство для пользователя, поэтому в клиентских системах Windows по умолчанию используются короткие кванты. При этом производительность системы в целом снижается, поскольку потоки не будут успевать выполнять свои задачи в течение выделенного кванта, а частые переключения создадут высокие накладные расходы (служебные операции системы при смене потоков). Вследствие этого в серверных версиях Windows по умолчанию применяются длинные кванты.
Длительность интервала системного таймера (в сотнях наносекунд) хранится в переменной KeMaximumIncrement (для x86 – файл basentosexi386splocks.asm, строка 140; для x64 – файл basentosexamd64hifreqlk.asm, строка 147) и устанавливается функцией KeSetTimeIncrement (файл basentoskemiscc.c, строка 711 на основе значения, предоставляемого HAL.
Каждый процесс хранит величину кванта в поле QuantumReset структуры KPROCESS (файл basentosincke.h, строка 1029). Значение в этом поле равно количеству интервалов таймера, умноженному на 3. Например, для длинных квантов (12 интервалов) значение QuantumReset будет равно 36. Таким образом, при каждом срабатывании таймера (возникает прерывание) система уменьшает квант выполняющегося потока на 3 единицы.
Умножение на три введено для того чтобы можно было в разной степени уменьшать квант в двух различных ситуациях – срабатывании таймера (квант уменьшается на 3 единицы) и выходе из состояния ожидания (квант уменьшается на единицу). Уменьшение кванта при выходе потока из состояния ожидания применяется чтобы избежать ситуации бесконечно выполняющегося потока: если при каждом срабатывании таймера поток находится в состоянии ожидания, а при выходе из ожидания значение кванта не изменяется, то теоретически поток может выполняться бесконечно. Поэтому при выходе из состояния ожидания текущее значение его кванта уменьшается на единицу.
Значение кванта может быть изменено пользователем. Например, на Windows 7 нужно проделать следующее: Компьютер – Свойства – Дополнительные параметры системы – вкладка «Дополнительно» – раздел «Быстродействие» – Параметры – вкладка «Дополнительно» – раздел «Распределение времени процессора». Можно выбрать короткие кванты («Оптимизировать работу программ») или длинные («Оптимизировать работу служб, работающих в фоновом режиме») (рис.9.2).
За изменение величины кванта отвечает функция KeSetQuantumProcess (файл basentoskeprocobj.c, строка 1393).
Кроме длинных и коротких квантов в Windows реализовано динамическое увеличение размера кванта для потоков активного процесса (т.е. того процесса, окно которого в настоящий момент активно). За повышение кванта (и приоритета) отвечает функция PspComputeQuantumAndPriority (файл basentospspsquery.c, строка 4415). Более подробную информацию о динамическом увеличении кванта см. [5, стр. 361].
Приоритеты
В операционной системе Windows имеется 32 уровня приоритета – от 0 до 31 (рис.9.3).
Таблица 9.1. Влияние относительных приоритетов
Относительный приоритет | Смещение для динамических приоритетов | Смещение для приоритетов реального времени |
---|---|---|
Time Critical | Базовый приоритет = 15 | Базовый приоритет = 31 |
Highest | +2 | +2 |
Above Normal | +1 | +1 |
Normal | ||
Below Normal | –1 | –1 |
Lowest | –2 | –2 |
Idle | Базовый приоритет = 1 | Базовый приоритет = 16 |
Пример. Имеется процесс с базовым приоритетом Below Normal (6). Поток, принадлежащий этому процессу, имеет такой же базовый приоритет. Вызов функции SetThreadPriority с параметром Highest сделает базовый приоритет потока равным 8, а с параметром Time Critical – равным 15.
Текущий приоритет потока при создании потока равен базовому, но в дальнейшем может динамически повышаться и понижаться операционной системой (эта процедура будет рассмотрена далее). Заметим, что для потоков с базовым приоритетом Real Time текущий приоритет не изменяется и всегда равен базовому.
Источник
Обзор алгоритмов планирования в windows
Новые потоки выделяются зеленым, а существующие – красным. (Длительность подсветки настраивается в Options.) Это помогает обнаруживать создание лишних потоков в процессе. (Как правило, потоки должны создаваться при запуске процесса, а не при каждой обработке какого-либо запроса внутри процесса.)
Когда вы поочередно выбираете потоки в списке, Process Explorer отображает их идентификаторы, время запуска, состояние, счетчики использования процессорного времени, число переключений контекстов, а также базовый и текущий приоритеты. Кнопка KiIl позволяет принудительно завершать индивидуальные потоки, но пользоваться ею следует с крайней осторожностью.
Разница в числе переключений контекста (context switch delta) отражает, сколько раз потоки начинали работать в течение периода обновления, указанного в Process Explorer. Это еще один способ определения активности потоков. B некоторых отношениях он даже лучше, так как многие потоки выполняются в течение лишь очень короткого времени и поэтому крайне редко попадают в список текущих потоков. Например, если вы добавите столбец с разницей в числе переключений контекстов к тому, что показывается для процесса и отсортируете по этому столбцу, то увидите процессы, в которых потоки выполняются, но используют очень мало процессорного времени или вообще его не используют.
Стартовый адрес потока выводится в виде «modulefunction»,где module –имя EXE или DLL. Имя функции извлекается из файла символов для данного модуля (см. эксперимент «Просмотр детальных сведений о процессах с помощью Process Explorer» в главе 1). Если вы точно не знаете, что это за модуль, нажмите кнопку Module, и появится окно свойств модуля, где содержится данная функция.
ПРИМЕЧАНИЕ Для потоков, созданных Windows-функцией Create-Tbread, Process Explorer показывает функцию, переданную в Create-Tbread, а не истинную стартовую функцию потока. Это связано с тем, что все Windows-потоки запускаются в общей стартовой функции-оболочке для процессов или потоков (BaseProcessStartJin6oBaseThre-adStart в Kernel32.dll). Если бы Process Explorer выводил истинный стартовый адрес, то казалось бы, что большинство потоков в процессе были запущены по одному адресу, а это вряд ли помогло бы понять, какой код выполняется потоком.
Однако одного стартового адреса потока может оказаться недостаточно для того, чтобы выяснить, что именно делает поток и какой компонент внутри процесса отвечает за использование процессорного времени этим потоком. Это особенно верно, если стартовый адрес потока относится к универсальной стартовой функции (например, если имя функции не указывает на
то, что делает данный поток). Тогда может помочь изучение стека потока. Для его просмотра дважды щелкните интересующий вас поток (или выберите этот поток и нажмите кнопку Stack). Process Explorer покажет стек потока (пользовательского режима и режима ядра, если поток был в последнем режиме).
ПРИМЕЧАНИЕ Отладчики пользовательского режима (Windbg, Ntsd и Cdb) тоже позволяют подключаться к процессу и просматривать стек потока, но Process Explorer выводит стек как пользовательского режима, так и режима ядра простым нажатием одной кнопки. Стеки пользовательского режима и режима ядра можно , но эта утилита гораздо сложнее в использовании. Кстати, при работе Windbg в режиме локальной отладки ядра, поддерживаемом только в Windows XP и Windows Server 2003, увидеть содержимое стеков потоков нельзя.
Просмотр стека потока полезен и при поиске причины зависания процесса. Например, на одной системе Microsoft PowerPoint зависал при запуске на минуту. Чтобы понять причину этого зависания, с помощью Process Explorer изучили стек одного из потоков в процессе. Результат приведен на рис. 6-10.
Как видите, PowerPoint (строка 10) вызвал функцию в Mso.dll (основной Microsoft Office DLL), которая обратилась к функции OpenPrinterWBWinspool.drv (DLL, используемой для подключения к принтерам). Затем Winspool.drv пересылает запрос функции OpenPrinterRPC,а та вызывает функцию в DLL исполняющей среды RPC, сообщая, что запрос посылается удаленному принтеру. Вот так, не зная деталей внутреннего устройства PowerPoint, по именам модулей и функций в стеке потока можно понять, что поток ждет соединения с сетевым принтером. B данной системе был сетевой принтер, который не отвечал, что и объясняет задержку в запуске PowerPoint. (Приложения Microsoft Office соединяются со всеми сконфигурированными принтерами при запуске.) Соединение с тем принтером было удалено из пользовательской системы, и проблема исчезла.
Планирование потоков
Здесь описываются стратегии и алгоритмы планирования в Windows. B первом разделе этой части материалов рассматриваются принципы планирования в Windows и даются определения ключевых терминов. Уровни приоритета обсуждаются с точки зрения как Windows API, так и ядра. После обзора сопутствующих Windows-функций и утилит подробно анализируются – сначала в однопроцессорных системах, а затем и в многопроцессорных – алгоритмы и структуры данных, используемые подсистемой планирования Windows.
Обзор планирования в Windows
B Windows реализована подсистема вытесняющего планирования на основе уровней приоритета, в которой всегда выполняется поток с наибольшим приоритетом, готовый к выполнению. Однако выбор потока для выполнения может быть ограничен набором процессоров, на которых он может работать. Это явление называется привязкой к процессорам(processor affinity). По умолчанию поток выполняется на любом доступном процессоре, но вы можете изменить привязку к процессорам через Windows-функции планирования, перечисленные в таблице 6-14 (см. далее в этой главе), или заданием маски привязки в заголовке образа.
ЭКСПЕРИМЕНТ: просмотр потоков, готовых к выполнению
Список потоков, готовых к выполнению, можно увидеть с помощью команды !readyотладчика ядра. Она выводит поток или список потоков, готовых к выполнению (на каждом уровне приоритета отдельно). B следующем примере к выполнению готовы два потока с приоритетом 10 и шесть потоков – с приоритетом 8. Поскольку эта информация получена в однопроцессорной системе с использованием LiveKd, текущим потоком всегда является отладчик ядра (Kd или WinDbg).
Выбранный для выполнения поток работает в течение некоего периода, называемого квантом.Квант определяет, сколько времени будет выполняться поток, пока не наступит очередь другого потока с тем же приоритетом (или более высоким, что возможно в многопроцессорной системе). Длительность квантов зависит от трех факторов: конфигурационных параметров системы (длинные или короткие кванты), статуса процесса (активный или фоновый) и использования объекта «задание» для изменения длительности квантов. (Подробнее о квантах см. раздел «Квант» далее в этой главе.) Однако поток может не полностью использовать свой квант. Поскольку в Windows реализован вытесняющий планировщик, то происходит вот что. Как только другой поток с более высоким приоритетом готов к выполнению, текущий поток вытесняется, даже если его квант еще не истек. Фактически поток может быть выбран следующим для выполнения и вытеснен, не успев воспользоваться своим квантом!
Код Windows, отвечающий за планирование, реализован в ядре. Поскольку этот код рассредоточен по ядру, единого модуля или процедуры с названием «планировщик» нет. Совокупность процедур, выполняющих эти обязанности, называется диспетчерам ядра(kernel’s dispatcher). Диспетчеризация потоков может быть вызвана любым из следующих событий.
(o)Поток готов к выполнению – например, он только что создан или вышел из состояния ожидания.
(o)Поток выходит из состояния Running (выполняется), так как его квант истек или поток завершается либо переходит в состояние ожидания.
(o)Приоритет потока изменяется в результате вызова системного сервиса или самой Windows.
(o)Изменяется привязка к процессорам, из-за чего поток больше не может работать на процессоре, на котором он выполнялся.
B любом случае Windows должна определить, какой поток выполнять следующим. Выбрав новый поток, Windows переключает контекст.Эта операция заключается в сохранении параметров состояния машины, связанных с выполняемым потоком, и загрузке аналогичных параметров для другого потока, после чего начинается выполнение нового потока.
Как уже говорилось, планирование в Windows осуществляется на уровне потоков. Этот подход станет понятен, если вы вспомните, что сами процессы не выполняются, а лишь предоставляют ресурсы и контекст для выполнения потоков. Поскольку решения, принимаемые в ходе планирования, касаются исключительно потоков, система не обращает внимания на то, какому процессу принадлежит тот или иной поток. Так, если у процесса A есть 10, у процесса B – 2 готовых к выполнению потока, и все 12 имеют одинаковый приоритет, каждый из потоков теоретически получит 1/12 процессорного времени, потому что Windows не станет поровну делить процессорное время между двумя процессами.
Чтобы понять алгоритмы планирования потоков, вы должны сначала разобраться в уровнях приоритета, используемых Windows.
Уровни приоритета
Как показано на рис. 6-11, в Windows предусмотрено 32 уровня приоритета – от 0 до 31. Эти значения группируются так: (o)шестнадцать уровней реального времени (16-31); (o)пятнадцать варьируемых (динамических) уровней (1-15);
(o)один системный уровень (0), зарезервированный для потока обнуления страниц (zero page thread).
Рис. 6-12. Взаимосвязь приоритетов в ядре и Windows API
Начальный базовый приоритет потока наследуется от базового приоритета процесса, а тот наследует его от родительского процесса. Это поведение можно изменить при вызове Windows-функции CreateProcess иликоманды START. Приоритет процесса можно изменить и после его создания, используя функцию SetPriorityClassили различные утилиты, предоставляющие доступ к этой функции через UI, например диспетчер задач и Process Explorer. B частности, вы можете понизить приоритет процесса, интенсивно использующего процессорное время, чтобы он не мешал обычным операциям в системе. Смена приоритета процесса влечет за собой смену приоритетов всех его потоков, но их относительные приоритеты остаются прежними. Ho изменение приоритетов индивидуальных потоков внутри процесса обычно не имеет смысла, потому что вы не знаете, чем именно занимается каждый из них (если только сами не пишете программу или не располагаете исходным кодом); так что изменение относительных приоритетов потоков может привести к неадекватному поведению этого приложения.
Обычно базовый приоритет процесса (а значит, и базовый приоритет первичного потока) по умолчанию равен значению из середины диапазонов приоритетов процессов (24, 13, 10, 8, 6 или 4). Однако базовый приоритет некоторых системных процессов (например, диспетчера сеансов, контроллера сервисов и сервера локальной аутентификации) несколько превышает значение по умолчанию для класса Normal (8). Более высокий базовый приоритет по умолчанию обеспечивает запуск потоков этих процессов с приоритетом выше 8. Чтобы изменить свой начальный базовый приоритет, такие системные процессы используют внутреннюю функцию NtSetInformationProcess.
Функции Windows API, связанные с планированием
Эти функции перечислены в таблице 6-14 (более подробную информацию см. в справочной документации Windows API).
Таблица 6-14. API-функции планирования и их назначение
Сопутствующие утилиты
Единственный способ задать начальный класс приоритета для процесса – использовать команду startв командной строке Windows. Если вы хотите, чтобы некая программа каждый раз запускалась с определенным приоритетом, то можете создать для нее ярлык и указать команду запуска, предварив ее cmd /с.Это приведет к появлению окна командной строки, выполнению команды и последующему закрытию этого окна. Например, чтобы запустить Notepad в процессе с низким приоритетом, в свойствах ярлыка должна быть задана команда cmd /с start /low notepad.exe.
ЭКСПЕРИМЕНТ: исследуем и задаем приоритеты процессов и потоков
Попробуйте провести такой эксперимент.
1. Наберите в командной строке start /realtime notepad.Ha экране появится окно Notepad.
2. Запустите утилиту Process Explorer или Process Viewer (Pviewer.exe) из Support Tools и выберите Notepad.exe из списка процессов, как показано ниже. Заметьте, что динамический приоритет потока Notepad равен 24. Это значение совпадает со значением приоритета реального времени на рис. 6-12.
Диспетчер системных ресурсов Windows
B Windows Server 2003 Enterprise Edition и Windows Server 2003 Data-center Edition включен необязательный компонент, который называется диспетчером системных ресурсов Windows (Windows System Resource Manager, WSRM). Он позволяет администратору настраивать правила политики, указывающие для процессов использование процессорного времени, параметры привязки к процессорам и лимиты на физическую и виртуальную память. Кроме того, WSRM может генерировать отчеты по использованию ресурсов, удобные для учета и проверки уровня обслуживания по договорам с пользователями.
Такие правила могут быть применены к конкретным приложениям, пользователям или группам и действовать в определенные периоды или постоянно.
После того как вы сформировали политику выделения ресурсов для управления определенными процессами, служба WSRM будет вести мониторинг потребления ими процессорного времени и регулировать их базовые приоритеты, если эти процессы будут использовать процессорного времени больше или меньше, чем было установлено вами.
Ограничение физической памяти достигается заданием максимального размера рабочего набора через функцию SetProcessWorkingSetSizeEx,а ограничение виртуальной памяти реализуется самой службой (о лимитах на объемы физической и виртуальной памяти см. главу 7). Если заданный лимит превышен, WSRM – в зависимости от настроек – может уничтожать процессы или создавать соответствующую запись в журнале событий. Последнее позволяет выявить процесс с утечкой памяти до того, как он займет всю переданную виртуальную память в системе. Заметьте, что лимиты на память, установленные в WSRM, не применяются к памяти Address Windowing Extensions (AWE), памяти больших страниц (large page memory) или памяти ядра (пулу подкачиваемых или неподкачиваемых страниц).
Приоритеты реального времени
Вы можете повысить или понизить приоритет потока любого приложения в динамическом диапазоне; однако, чтобы задать значение из диапазона реального времени, у вас должна быть привилегия Increase Scheduling Priority. Учтите, что многие важные системные потоки режима ядра выполняются в диапазоне приоритетов реального времени. Поэтому, если потоки слишком долго выполняются с приоритетом этого диапазона, они могут блокировать критичные системные функции (например в диспетчере памяти, диспетчере кэша или драйверах устройств).
ПРИМЕЧАНИЕ Как показано на следующей иллюстрации, где изображены уровни запросов прерываний (Interrupt Request Levels, IRQL) на платформе x86, в Windows имеется набор приоритетов, называемых приоритетами реального времени, но они не являются таковыми в общепринятом смысле этого термина, так как Windows не относится к операционным системам реального времени. Подробнее на эту тему см. врезку «Windows и обработка данных в реальном времени» в главе 3, а также статью «Real-Time Systems and Microsoft Windows NT» в MSDN Library.
Уровни прерываний и уровни приоритета
Состояния потоков
Вот что представляют собой состояния потока.
(o) Ready (готов)Поток в состоянии готовности ожидает выполнения. Выбирая следующий поток для выполнения, диспетчер принимает во внимание только пул потоков, готовых к выполнению.
(o) Standby (простаивает)Поток в этом состоянии уже выбран следующим для выполнения на конкретном процессоре. B подходящий момент диспетчер переключает контекст на этот поток. B состоянии Standby может находиться только один поток для каждого процессора в системе. Заметьте, что поток может быть вытеснен даже в этом состоянии (если, например, до начала выполнения потока, который пока находится в состоянии Standby, к выполнению будет готов поток с более высоким приоритетом).
(o) Running (выполняется)Поток переходит в это состояние и начинает выполняться сразу после того, как диспетчер переключает на него контекст. Выполнение потока прекращается, как только он завершается, вытесняется потоком с более высоким приоритетом, переключает контекст на другой поток, самостоятельно переходит в состояние ожидания или истекает выделенный ему квант процессорного времени (и другой поток с тем же приоритетом готов к выполнению).
(o) Waiting (ожидает)Поток входит в состояние Waiting несколькими способами. Он может самостоятельно начать ожидание на синхронизирующем объекте или его вынуждает к этому подсистема окружения. По окончании ожидания поток – в зависимости от приоритета – либо немедленно начинает выполняться, либо переходит в состояние Ready.
(o) Transition (переходное состояние)Поток переходит в это состояние, если он готов к выполнению, но его стек ядра выгружен из памяти. Как только этот стек загружается в память, поток переходит в состояние Ready.
(o) Terminated (завершен)Заканчивая выполнение, поток переходит в состояние Terminated. После этого блок потока исполнительной системы (структура данных в пуле неподкачиваемой памяти, описывающая данный поток) может быть удален, а может быть и не удален – это уже определяется диспетчером объектов.
(o) Initialized (инициализирован)B это состояние поток входит в процессе своего создания.
ЭКСПЕРИМЕНТ: изменение состояний потоков при планировании
Вы можете понаблюдать за изменением этих состояний с помощью оснастки Performance. Она может оказаться полезной в отладке многопоточных приложений, если вам нужно проверить состояние потоков, выполняемых в вашем процессе.
1. Запустите стандартную программу Notepad (Блокнот) (Notepad.exe).
2. Запустите оснастку Performance (Производительность), открыв в меню Start (Пуск) подменю Programs (Программы) и Administrative Tools (Администрирование), а затем выбрав команду Performance (Производительность).
3. Выберите режим просмотра диаграмм (если установлен какой-то другой).
4. Щелкните график правой кнопкой мыши и выберите команду Properties (Свойства).
5. Откройте вкладку Graph (График) и установите максимальное значение вертикальной шкалы равным 7. (Состояниям потоков соответствуют числа от O до 7). Щелкните кнопку ОК.
6. Щелкните на панели инструментов кнопку Add (Добавить), чтобы открыть диалоговое окно Add Counters (Добавить счетчики).
7. Выберите в списке объект Thread (Поток), а затем – счетчик Thread State (Состояние потока). Определение его значений вы увидите, щелкнув кнопку Explain (Объяснение), как показано ниже.
База данных диспетчера ядра
Для принятия решений при планировании потоков ядро поддерживает набор структур данных, в совокупности известных как база данных ducnem-чераядра(dispatcher database) (рис. 6-15). Эта база данных позволяет отслеживать потоки, ждущие выполнения, и потоки, выполняемые на тех или иных процессорах.
ПРИМЕЧАНИЕ База данных диспетчера ядра в однопроцессорной системе имеет ту же структуру, что и в многопроцессорных системах Windows 2000 и Windows XP, но отличается от структуры такой базы данных в системах Windows Server 2003. Эти различия, а также иной алгоритм выбора потоков для выполнения в многопроцессорных системах поясняются в разделе «Многопроцессорные системы».
Источник