reactos tech talk (ВМК МГУ, ИСП РАН)

45
Операционная система ReactOS ВНУТРЕННЕЕ УСТРОЙСТВО WINDOWS И ПОЧЕМУ ЖЕ ПРОСТО НЕ ИСПОЛЬЗОВАТЬ ЯДРО LINUX?!

Upload: aleksey-bragin

Post on 28-Jul-2015

10.951 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Операционная система ReactOSВНУТРЕННЕЕ УСТРОЙСТВО WINDOWS И ПОЧЕМУ ЖЕ ПРОСТО НЕ ИСПОЛЬЗОВАТЬ ЯДРО LINUX?!

Page 2: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

ReactOS – это (не) Windows

22 января 1996 – первый коммит

ReactOS - это Windows◦ Выполняет Windows-приложения◦ Поддерживает Windows-драйвера◦ Выглядит как Windows

ReactOS – это не Windows◦ ReactOS – Свободное ПО◦ ReactOS использует другие СПО проекты◦ Можно сделать “свой собственный Windows”

Page 3: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Об авторе Алексей Брагин – Москва, Россия

◦ Разработчик ReactOS с 2003 года◦ Президент Фонда ReactOS и Координатор проекта◦ Степень магистра, МГТУ им. Н.Э.Баумана◦ Преподаватель, кафедра ИУ9, МГТУ им. Н.Э.Баумана◦ Электронная почта: [email protected]

Page 4: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Об авторе◦ Первый патч в ReactOS: 24 марта 2003◦ Первый коммит: 9 апреля 2003◦ Всего около 4803 коммитов в ReactOS

Page 5: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Архитектура WindowsЧТО ЗНАЧИТ WINDOWS

Page 6: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

ReactOS это Windows Для максимальной совместимости ReactOS реализует архитектуру, идентичную Windows

◦ Windows-драйверам нужно ядро Windows◦ Многие программы (firewalls, antivirus, media players, PDA sync software,

etc.) поставляются со специальными драйверами

Архитектура Windows существенно отличается от Linux и не так хорошо известна

Начнём с основ…

Page 7: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Архитектура ОС Абстракция ЦП - времени и контектса (processes, threads, signals, etc.)

Абстракция памяти (virtual memory, paging, stacks, heaps, etc.)

Разделение между системой и приложениями используя встроенные в ЦП механизмы защиты памяти (user mode vs kernel mode)

Разделение между «железом» и приложениями используя встроенные в ЦП механизмы привилегий ввода/вывода

Механизмы обхода защит ОС управляемым, безопасным образом (system calls, security subsystem, etc.)

Page 8: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Архитектура ОС

Ядро

Приложения

Virt

ual

Phys

ical

User modeKernel mode

User

Железо

Page 9: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Архитектура Linux Монолитное ядро. У ядра нет ABI

Модель управления процессами и модель безопасности UNIX

Встроенная поддержка сети◦ Sockets, pipes◦ select, poll, etc.

Абстракции файловой системы (VFS)

UNIX API (libc) поверх небольшого количества UNIX-подобных системных вызовов и сигналов

Остальные APIs (audio, application setup, desktop environment integration, cryptography, etc.) - de facto стандарты от сторонних разработчиков

◦ Графическая подсистема (X server) – вещь в себе. В ядре есть специальные “backdoors” для прямого взаимодействия X сервера с аппаратуров, чтобы вынести сложность видео-драйверов из окружения ядра

Page 10: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Архитектура Linux

Интерфейс системных вызовов

VFS PM MM

Arch Драйвера устройств

Сетевой стэк

ЦП MMUДиск Устройства

libc

Библиотеки приложений

Приложения X сервер

Видеокарта

Ядро

Системные вызовы Сигналы Прямой I/OUser mode

Kernel mode

VirtualPhysical

Page 11: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Архитектура Windows (NT)

Монолитное ядро (гибридное). У ядра относительно стабильный ABI

Архитектура ядра почти идентична дизайну DEC RSX-11 и VMS, с влиянием DOS, OS/2 и Windows 95

◦ RSX-11, VMS и Windows NT были спроектированы одним и тем же инженером (Dave Cutler)◦ Первоначально Windows NT разрабатывалась как новое ядро для OS/2

В ядре нет абстракции устройств. Абстракция предоставляется стандартными системными драйверами (class или port драйвера)

В самом ядре нет поддержки сети. select/poll – не системные вызовы, а ioctl запрос к “файловой системе сокетов”

◦ Сокеты и пайпы предоставляются специальными файловыми системами◦ Над этим ещё один уровень абстракции в режиме пользователя: Winsock когда-то был

сторонним компонентом (напр. Trumpet Winsock)

Графическая и оконная подсистемы в составе ОС (работающие в режиме ядра) со стандартным API

Богатое высокоуровневое API всех сортов (криптография, desktop environment, etc.)

Page 12: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Особые черты архитектуры Windows

Устройства чипсета (таймер, контроллер прерываний, управление питанием, шины, firmware, и т.п.) абстрагируются с помощью компонента ядра под названием Hardware Abstraction Layer (HAL)

◦ ACPI и не-ACPI – просто разные HAL◦ Порт ReactOS на приставку XBox - обычный x86 ReactOS со специальным XBox-

специфичным HAL

Сигналы отсутствуют; вместо них standard exception model (“SEH”, которая была на VMS, OS/2 и Tru64)

Обратные системные вызовы (callbacks): оконная и графическая подсистемы могут делать обратные вызовы в режим пользователя

◦ В оригинальной реализации (Windows 95) user-mode и kernel-mode части подсистемы работали в разделяемой памяти

◦ Это слишком небезопасно для Windows NT; безопасная но совместимая разделяемая память эмулируется с помощью некоторых «ухищрений» (типа callbacks)

Page 13: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Архитектура Windows

Kernel

Executive

HAL

ntdll

kernel32gdi32user32

Системные библиотеки

Службы

DirectX

Драйвера устройств

win32k

Приложения, библиотеки приложений

Чипсет ЦП, MMU Устройства

Page 14: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Wine и ReactOSREACTOS ЭТО (НЕ) WINE

Page 15: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

ReactOS это (не) Wine “Раз ReactOS – это только ядро для Wine…

◦ … зачем оно нужно?”◦ … и почему до сих пор не доделано?”

Как всегда, всё немного сложнее, чем кажется на первый взгляд…

Page 16: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Wine и ReactOS У ReactOS много общего с Wine, в том числе и исходного кода…

◦ Достаточно общих целей:◦ Установка Windows приложений◦ Выполнение Windows приложений

… но…◦ Слишком много разных целей:

◦ Работа на Linux / работа на «железе»◦ Поддержка Windows драйверов

Page 17: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Wine на Linux Windows приложения загружаются только утилитой Wine (Wine loader)

Windows приложения и DLL динамически линкуются с системными Windows DLL, реализованными Wine

◦ Большинство Wine DLL – обычные Windows DLL скомпилированные под Linux

◦ Некоторые – внутренние библиотеки Linux, зависящие от других библиотек Linux. Библиотеки Linux прозрачны для Windows приложений – во всех отношениях работают как системные вызовы

Служебный процесс (Wine Server) заменяет ядро Windows для управления общими ресурсами

Page 18: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Wine на Linux

Ядро Linux

GNU libc

Библиотеки Wine

User modeKernel mode

Библиотеки Linux

Загрузчик Wine

X сервер

Wine сервер

Windows приложения

Wine services

Page 19: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Wine в ReactOS Windows приложения загружаются непосредственно ядром ReactOS

Windows приложения и DLL динамически связываются с Wine и ReactOS реализаций системных библиотек Windows

◦ Могут быть использованы только те Wine DLL, которые не зависят от библиотек Linux

◦ user32 & gdi32 – особый случай, в ReactOS - «native» реализация, не использующая Wine DLL.

ReactOS реализует настоящее ядро Windows◦ Может поддерживать приложения и драйвера

Page 20: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

User modeKernel mode

Wine в ReactOS

Kernel

Executive

HAL

ntdll

kernel32gdi32user32

System libraries

Службы

DirectX

Windows драйвера

win32k

Windows приложения

Page 21: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Wine на ReactOS: Arwinss

Если реализация оконной подсистемы не такая хорошая, почему бы не использовать Wine?

Идея привела к эксперименту, результатом которого стала альтернативная Win32 подсистема в ReactOS, которая

◦ Использует почти неизменённые исходные коды модулей USER32 и GDI32 из Wine вместе с некоторыми компонентами Wine сервера

◦ Рабочий прототип был создан одним человеком в течение месяца (существующая «native» реализация подсистемы в ReactOS находится в состоянии разработки многие годы, и всё ещё полна проблем)

Page 22: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Архитектура Arwinss

Page 23: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Arwinss: плюсы и минусы

Недостатки такого подхода◦ Внутреннее устройство далеко от Windows◦ Многие части работают в режиме пользователя (вообще-то это

преимущество!)◦ Чуть медленнее (решаемо)◦ Зависимость от Wine

Преимущества◦ Простая синхронизация кода с Wine◦ Использование кода Wine, который уже проверен в работе◦ Более-менее определенная архитектура◦ Fun!

Page 24: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Wine и ReactOS: итог Wine предназначен для выполнения Windows-приложений под Linux. Специфичные для Linux зависимости:

◦ … невидимы для приложений◦ … являются интегральной частью реализации Wine

ReactOS предназначен для того, чтобы быть Windows:◦ Всё, что возможно заимствуется из Wine◦ То, что нельзя – переделывается правильным образом◦ Реализация не может быть просто “функционально эквивалентной”:

должна быть “бинарно-совместима”, т.к. в Windows всё является API◦ Не очень много кода других СПО проектов можно использовать

ReactOS сложен и незаменим

Page 25: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Архитектура ReactOSREACTOS - ЭТО (НЕ) WINDOWS

Page 26: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Команда ReactOS Поистине “международный” проект

◦ Основан Jason Filby из Южной Африки◦ Разработчики из разных стран мира – Евросоюза, России, США, и т.д.◦ Сейчас, фонд в Российской Федерации, координатор проекта из России,

финансовый фонд в Германии, сообщество по всему миру

Нет формального обучения◦ Почти все разработчики изучили внутреннее устройство Windows во

время работы над ReactOS◦ К сожалению для проекта (и к счастью для них), лучших разработчиков

забирают на работу в Microsoft и другие крупные компании

Очень мало информации доступно◦ “Inside Microsoft Windows” – справочник по внутреннему устройству◦ … но этого недостаточно для разработки ReactOS

Page 27: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Ядро ReactOS Многие разработчики работают над ядром ReactOS и подсистемами, с переменным успехом

Хорошее состояние:◦ Планировщик, HAL, менеджер процессов и потоков (спасибо Alex Ionescu!)

Удовлетворительное состояние:◦ Подсистема ввода/вывода, менеджер конфигураций (реестр), менеджер

безопасности, менеджер памяти

Плохое состояние:◦ Кэш-менеджер, поддержка файловых систем

Отсутствует:◦ Управление питанием

Тем не менее, ядро ReactOS…

Page 28: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

The ReactOS kernel … достаточно совместимо!

Page 29: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Оконная подсистема (USER)

Проблемы в этой области известны долгое время

Много разработчиков пробовали исправить ситуацию и не смогли◦ Попытки переписать. Одна совершенно другая - Arwinss.

Оригинальная реализация в Windows - очень хороший hack…◦ Оконная подсистема берёт свои истоки в Windows 1.0◦ Порт на Windows NT привнёс защиту памяти, но API подразумевает общую

память◦ Несколько ухищрений специально для безопасного симулирования общей

памяти – user32.dll не просто библиотека, а часть оконной подсистемы, работающая в режиме пользователя

… и очень плохой дизайн◦ Невозможно дать хорошее, высокоуровневое описание архитектуры◦ Никто не документирует всю подсистему – официально или неофициально

Page 30: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Графическая подсистема (GDI)

Тесно связана с оконной подсистемой

Намного более простой, лучший дизайн◦ gdi32.dll частично реализация подсистемы в режиме пользователя, для

запуска дисплей-драйверов режима пользователя (напр. драйвера принтеров)

◦ Алгоритмы рисования хорошо изолированы, имеют простой API◦ Весь код рисования шрифтов в ReactOS заимствован из FreeType (сторонний СПО проект)

Усилия концентрируются на более сложной (и видимой) оконной подсистеме. Однако,

DirectX графика – это ещё одна совершенно другая область…

Page 31: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Сеть Сетевой стэк в Windows располагается вне ядра

… но стэк разделён на независимые слои, с документированными API между ними:

◦ Winsock◦ TDI◦ NDIS

Каждая часть должна быть реализована Windows-совместимым образом

… но можно использовать сторонние СПО проекты с помощью специальной Windows-совместимой «обёртки»

◦ Например, мы используем библиотеку lwIP для реализации стэка TCP/IP

Page 32: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

ReactOS настояищее и будущееНАД ЧЕМ РАБОТАЕМ СЕЙЧАС, А НАД ЧЕМ СОБИРАЕМСЯ

Page 33: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Поддержка драйверов Сторонние драйвера работают неплохо

◦ Видео драйвера, в частности

Сложные слои абстракции нуждаются в работе◦ USB◦ Аудио◦ Сетевые карточки

Драйвера файловых систем (включая сетевые ФС) требуют много работы в ядре над “большой тройкой” (кэш менеджер, менеджер памяти, поддержка файловых систем)

Page 34: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

USB Реализованы основы USB-стэка Windows

◦ Дизайн совместим с Windows 2003 SP1◦ USB-клавиатуры, мышки - работают◦ Некоторые «флэшки» - работают◦ Список поддерживаемых устройств доступен на сайте:

https://www.reactos.org/wiki/Supported_USB_Devices

Page 35: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Аудио подсистема Она работает! И достаточно совместима

Сложно найти людей с опытом и знаниями звуковой подсистемы Windows

Page 36: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Подсистемы ядра Кэш менеджер – идёт работа

Порт на ARM принёс много позитивных результатов для общей части менеджера памяти

Работа над улучшением качества в общем

Page 37: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Средства разработки Основной компилятор - gcc

◦ Мы внесли значительный вклад в портирование gcc на Windows (MinGW), т.к. мы самый крупный пользователь этого порта (и находим там очень много ошибок!)

◦ Никто не предполагал, что MinGW будет компилировать ядро!◦ MSVC поддерживается и активно развивается◦ В перспективе – LLVM, работа уже идёт

• ReactOS использует среду CMake– Удобнее, чем обычный make

– Лучше интеграция со средствами разработки под Windows

– Кросс-платформеннная

– Не зависит от компилятора

Page 38: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

В заключениеЧТО МЫ СЕГОДНЯ УЗНАЛИ?

Page 39: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Студенты и ReactOS ReactOS – наиболее продвинутая открытая реализация Windows-совместимой ОС

Лучше, чем WRK для обучения основам ОС◦ Нет доступа к исходным кодам Microsoft®◦ Использование СПО для сборки и тестирования◦ Большое сообщество

Студенческие проекты полезны для◦ Поиска ошибок в коде◦ Реализации отсутствующих или неправильно сделанных частей

Page 40: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

итог Вообще, Windows – достаточно неплохая операционная система!

ReactOS…◦ … это (не) Windows: а 100% реализация Windows с открытым исходных

кодом◦ … это не Linux: поддерживает Windows-драйвера◦ … это не Wine: использует Wine, но Wine – только часть ReactOS

ReactOS сложен и уникален

ReactOS – это очень много работы

Page 41: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Есть вопросы?Brought to you by

Page 42: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Screenshots. Firefox 3.5

Page 43: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Screenshots. Notepad

Page 44: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Screenshots. Desktop

Page 45: ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

Screenshots. Arwinss in Windows 2003 using X Windows driver and ReactOS Winlogon