- •1. Понятие вычислительной системы
- •1.1. Модель вычислителя
- •1.2. Модель коллектива вычислителей
- •1.3. Понятие параллельных алгоритмов
- •1.4. Принципы технической реализации модели коллектива вычислителей
- •1.9. Распределенные вычислительные системы
- •1.5. Классификация архитектур вычислительных систем
- •1.6. Конвейерные вычислительные системы
- •1.7. Матричные вычислительные системы
- •1.8. Мультипроцессорные системы
- •1.10. Вычислительные системы с программируемой структурой
- •1.11. Примеры реализаций вычислительных систем.
- •2. Аппаратные средства вс
- •2.1. Прерывания
- •2.2. Многомодульное программирование
- •2.3. Реализация архитектурных решений. Обзор технологий процессоров Intel
- •3. Ос. Основные понятия и типы операционных систем
- •3.1. Основные технологии программирования
- •3.2. Общие подходы к построению ос. Классификация ос.
- •3.3. Основные функции ос
- •3.4. Подходы к построению ос.
- •3.5. Виртуализация
- •3.6. Подходы Oracle
- •3.7. Центры обработки данных (цод)
- •Инструментарий ос (на основе Windows)
- •Основные базовые понятия: процессы и потоки
- •Инструментарий
- •Режим ядра и пользовательский режим
- •Средства изучения внутреннего устройства Windows
- •Основные концепции построения Windows
- •Архитектура современных ос
- •Лекция Основные требования при проектировании
- •Модель ос Windows
- •Обзор архитектуры
- •Многопроцессорная обработка
- •Различия между клиентскими и серверными версиями ос Windows
- •Лекция. Проверочный выпуск ос
- •Ключевые компоненты системы
- •Подсистема окружения
- •Подсистема окружения Windows
- •Исполнительная система Windows
- •Объекты ядра
- •Поддержка оборудования
- •Уровень абстрагирования от оборудования (Hardware Abstraction Layer)
- •Драйверы устройств в ос Windows
- •Недокументированные интерфейсы
- •Системные процессы
- •Прерывания (interrupts) и dpc (deferred procedure calls)
- •Процесс system и его потоки
- •Диспетчер сеансов
- •Диспетчер управления сервисами
- •Системные механизмы Windows
- •Виртуальная память
- •Режим ядра и пользовательский режим
- •Другие механизмы
- •Уровни запросов программных прерываний
- •Объекты прерывания
- •Программные прерывания
- •Прерывания apc (Asynchronous Procedure Call)
- •Диспетчеризация исключений
- •Необработанные исключения
- •Поддержка отчетов об ошибках
- •Диспетчеризация системных сервисов
- •Диспетчеризация 32-разрядных системных сервисов
- •Диспетчеризация системных сервисов режима ядра
- •Диспетчер объектов
- •Объекты исполнительной системы
- •Структура объектов в Windows
- •Заголовки и тела объектов
- •Объекты типа
- •Атрибуты объекта типа
- •Методы объекта
- •Описатели объектов и таблица описателей
- •Глобальные флаги Windows
- •Трассировка событий ядра
- •Управление процессами и потоками
- •Внутреннее устройство процессов
- •Создание процессов
- •Внутреннее устройство процессов. Структуры данных
- •Внутреннее устройство потоков
- •Основные блоки описания потоков в ос Windows
- •Взаимодействие процессов (ipc)
- •Взаимоисключения
- •Синхронизация в Windows
- •Спин-блокировки
Инструментарий
Для просмотра процессов и информации, связанной с ними, существует ряд утилит, включающих Windows support tools, windows debugging tools, windows SDK. Ряд утилит можно получить на сайте sysinternals.com, которые в настоящее время стали частью Microsoft.
Наиболее широко применяемая утилита – встроенный в Windows диспетчер задач (Task manager).
Утилита Process Explorer – показывает более подробную информацию о процессах, чем любой другой доступный инструмент. Замечание: для функционирования этой программы должна быть подгружена «таблица символов». Для этого Microsoft предоставляет соответствующую поддержку для версии ОС (см. лабы, Windows Debugger, Symbol Path). Замечание: таблица символов для утилит и таблица символов для Debugger различные.
Просмотр счетчиков производительности. Счетчики, позволяющие контролировать производительность процессов, показаны на слайде 8. Приложение при своем выполнении может переключаться из пользовательского режима в режим ядра.
Режим ядра и пользовательский режим
Для предотвращения доступа приложений к важным данным ОС и риска их модификации Windows использует два режима доступа к процессору (даже если имеются еще какие-то режимы процессора): пользовательский (User mode) и ядра (Kernel mode). Код приложений работает в пользовательском режиме. Код ОС (системные сервисы и драйверы в режиме ядра). В режиме ядра предоставляется доступ ко всей системной памяти и разрешается выполнять любые системные команды процессора, тем самым предоставляя ОС более высокий уровень привилегий, чем приложение. В процессоре Intel x86 определено четыре уровня привилегий (колец, rings). ОС использует уровень 0 для кода ядра и уровень 3 для приложений. Это связано с тем, что большинство процессоров, на которых должна работать Windows (не Intel x86) имеет два уровня привилегий.
Важно для безопасности: Windows не предусматривает защиты от компонентов ОС, работающих в режиме ядра, т.е. можно получить полный доступ к реальной ОП и таким образом обойти средства защиты. В силу этого важно, чтобы компоненты. в т. ч. обновления были подписаны (имели сертификат).
Для перехода в режим ядра есть недекларированная макрокоманда: mode set=sv (ASM). При компиляции требуется указать опцию для разрешения вставки этой команды. Для обхода содержимое макрокоманды надо объявить константой. Выполнение в сегменте кода невозможно.
Приложения могут переключаться из пользовательского режима в режим ядра, обращаясь к системным сервисам, например функция ReadFile в ходе своего выполнения вызывает внутреннюю программу ОС, которая считывает данные. Она выполняется в режиме ядра. Переключение из пользовательского режима в режим ядра осуществляется специальными командами процессора. ОС перехватывает эту команду, проверяет аргументы и если все нормально, выполняет необходимую системную функцию.
Замечание: переключение из пользовательского режима приложения в режим ядра не влияет на планирование, т.к. контекст выполнения остается тем же самым. Поэтому приложение работает часть времени в пользовательском режиме, часть – в режиме ядра. Это можно проверить. На слайде 8 изображены счетчики, которые используются для измерения различных долей времени.
Наблюдение за активностью потоков с помощью Qslice. Позволяет в динамике наблюдать за соотношением времени, проведенного каждым процессом в режиме ядра и в пользовательском режиме, а также получить детальную информацию о каждом потоке. Ту же задачу можно решить с помощью оснастки Performance.
