Введение во внутреннее устройство Windows

Исследовательское ядро Windows

Показывать лекцию целиком

Windows Academic Program

В 2006 году корпорация Microsoft в рамках академической программы Windows (Windows Academic Program) сделала доступной для академических организаций исходный код исследовательского ядра Windows (Windows Research Kernel, WRK) [15]. WRK основано на коде операционных систем Windows Server 2003 SP1 и Windows XP x64 [13; 11].

Кроме WRK в академическую программу Microsoft входят следующие компоненты [15]:

  • учебные материалы по курсу операционных систем на основе Windows XP – Windows Internals Curriculum Resource Kit (CRK). Составлены в соответствии с рекомендациями ACM/IEEE по преподаванию курса "Операционные системы" (Operating systems, OS) [4]. Материалы включают презентации лекций, указания к лабораторным работам (в том числе лабораторные работы для Windows 7), задания, тесты, а также материалы для преподавателей (Instructor Supplement);
  • среда ProjectOZ для экспериментального исследования ядра Windows;
  • описание опыта университетов (Faculty Experiences) по преподаванию в рамках академической программы Microsoft.
  • Все компоненты Windows Academic Program, кроме WRK и материалов для преподавателей (Instructor Supplement), доступны любому желающему. WRK и Instructor Supplement можно получить, подтвердив свой статус преподавателя или по подписке Microsoft Developer Network Academic Alliance (MSDN AA).

    Microsoft, предоставляя академическому сообществу исходные коды ядра Windows, преследовало следующие цели [11]:

  • облегчить студентам и преподавателям сравнение Windows с другими операционными системами;
  • предоставить студентам возможность для изучения исходных кодов ядра и создания собственных проектов на их основе;
  • поддержать исследования и публикации по внутреннему устройству Windows;
  • содействовать разработке учебников по операционным системам на основе ядра Windows;
  • упростить лицензирование.
  • Исследовательское ядро Windows включает более 800 000 строк исходного кода, в основном на языке программирования C, но есть файлы и на ассемблере. В процессе подготовки к опубликованию исходный код в некоторых местах был упрощен, а комментарии улучшены [11].

    На рис.5.1 представлена схема, отражающая покрытие исходным кодом WRK компонентов ядра [13].

    (рис 5.1) Покрытие исходным кодом WRK компонентов ядра (выделено серым цветом)

    Как видно из рисунка, исходные коды практически всех компонентов исполнительной системы (кроме диспетчера Plug-and-Play и диспетчера электропитания) и ядра представлены в WRK.

    Структура Windows Research Kernel

    В состав WRK, кроме собственно исходных кодов ядра Windows, входят руководство по ядру Windows NT (NT OS/2 Design Workbook) и решение (solution) Visual Studio 2008 (WRK.sln) (которое можно преобразовать для более новых версий Visual Studio).

    Руководство по ядру Windows NT было составлено в конце 1980 х – начале 1990 х гг., когда в Microsoft велась разработка новой операционной системы Windows NT с рабочим названием "NT OS/2" сначала совместно с IBM, затем самостоятельно. Руководство содержит ценную информацию по структуре и функциям ядра Windows, а также раскрывает соображения, которые привели разработчиков к тем или иным архитектурным решениям.

    Главные компоненты WRK находятся в папке WRK-v1.2\base\ntos и включают, в основном описания и определения функций и структур данных. В ядре Windows при именовании функций используются определенные соглашения [5; 2]. Название функции обычно строится по следующей схеме:

    <Префикс><Операция><Объект>

    где <Префикс> обозначает модуль, которому принадлежит функция, <Операция> – действие, совершаемое над <Объектом>.

    Например, рассмотрим функцию KeStartThread:

  • Ke (префикс) – функция входит в состав ядра;
  • Start (операция) – функция начинает выполнение объекта;
  • Thread (объект) – объектом является поток.
  • В таблице 5.1 приведены основные компоненты WRK (см. соответствие с компонентами на рис.5.1) с указанием префиксов входящих в их состав функций.

    Компоненты WRK и префиксы функций
    Компонент WRK Префикс функций Название компонента на англ. языке Название компонента на русском языке
    cacheCcCache managerдиспетчер кэша
    config CmConfiguration managerдиспетчер конфигурации
    dbgk DbgkDebugging Frameworkподсистема отладки
    exExExecutive support routinesфункции поддержки исполнительной системы – синхронизация, таймеры, структуры данных исполнительной системы, системная информация
    fsrtlFsRtlFile system driver run-time libraryбиблиотека функций поддержки файловой системы времени выполнения
    ioIoInput/Output managerдиспетчер ввода-вывода
    keKeKernelядро
    lpcLpcLocal Procedure Callмеханизм вызова локальных процедур
    mmMmMemory managerдиспетчер памяти
    obObObject managerдиспетчер объектов
    perfPerfPerformanceфункции для сбора информации о производительности системы
    psPsProcess managerдиспетчер процессов
    rawRawRaw File Systemфункции для Raw File SystemRaw File System ("сырая" файловая система) – если Windows не может распознать файловую систему диска, для него назначается Raw File System (драйвер которой реализован в ядре) и все запросы чтения/записи файлов к такому диску отклоняются.
    rtlRtlRun-Time Libraryбиблиотека функций времени выполнения
    seSe Security managerдиспетчер безопасности
    wmiWmiWindows Management Instrumentationподдержка WMI – инструментальные средства управления Windows

    Кроме перечисленных в таблице, в WRK есть ещё два важных компонента:

  • inc – общедоступные заголовочные файлы;
  • init – функции инициализации системы.
  • Приведем ещё один префикс часто встречающихся в WRK функций – Nt. Функции ядра с этим префиксом входят в Native API, они экспортируются Ntdll.dll, их можно вызывать из пользовательского режима. Часто функции с префиксом Nt соответствует WinAPI функция, и, например, при вызове WinAPI функции CreateProcess происходит вызов функции NtCreateProcess.

    HTML документация по WRK

    В Институте программной инженерии Хассо Платтнера Университета г. Потсдама (Hasso-Plattner-Institute for Software Engineering at University Potsdam) Александром Шмидтом (Alexander Schmidt) и Михаэлем Шёбелем (Michael Schobel) была создана HTML документация по WRK с использованием генератора документации Phoenix Cross Reference (PXR)http://www.dcl.hpi.uni-potsdam.de/research/WRK/2010/09/introducing-pxr-a-cross-referencing-documentation-compiler/index.html . Данная документация доступна для преподавателей по следующей ссылке:

    http://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8668

    HTML документация по WRK включает 4 раздела: функции (functions), типы данных (types), синонимы (typedefs) и макросы (macros) (рис.5.2).

    (рис 5.2) HTML документация по Windows Research Kernel

    По информации, предоставляемой HTML документацией, WRK содержит 4167 функций и 1957 типов данных.

    Резюме

    В данной лекции представлен обзор исследовательского ядра Windows (Windows Research Kernel, WRK). Перечислены компоненты WRK. Предложено использование HTML документации по WRK.

    В следующей лекции будут рассмотрены основные объекты, отвечающие за работу приложений – процессы и потоки.

    Контрольные вопросы

  • Расскажите о составе академической программы Microsoft.
  • Что такое Windows Research Kernel?
  • Какие компоненты ядра присутствуют в Windows Research Kernel?
  • Перечислите основные компоненты Windows Research Kernel.
  • Какие префиксы используются в названиях функций WRK?
  • Какая информация имеется в HTML документации по WRK?
  • Вернуться к учебному плану