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

Post on 28-Jul-2015

10.953 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

ReactOS – это (не) Windows

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ядро

Приложения

Virt

ual

Phys

ical

User modeKernel mode

User

Железо

Архитектура 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 сервера с аппаратуров, чтобы вынести сложность видео-драйверов из окружения ядра

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

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

VFS PM MM

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

Сетевой стэк

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

libc

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

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

Видеокарта

Ядро

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

Kernel mode

VirtualPhysical

Архитектура 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.)

Особые черты архитектуры 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)

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

Kernel

Executive

HAL

ntdll

kernel32gdi32user32

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

Службы

DirectX

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

win32k

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

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

Wine и ReactOSREACTOS ЭТО (НЕ) WINE

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

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

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

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

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

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

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

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

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

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

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

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

Wine на Linux

Ядро Linux

GNU libc

Библиотеки Wine

User modeKernel mode

Библиотеки Linux

Загрузчик Wine

X сервер

Wine сервер

Windows приложения

Wine services

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

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

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

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

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

User modeKernel mode

Wine в ReactOS

Kernel

Executive

HAL

ntdll

kernel32gdi32user32

System libraries

Службы

DirectX

Windows драйвера

win32k

Windows приложения

Wine на ReactOS: Arwinss

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

◦ Winsock◦ TDI◦ NDIS

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Screenshots. Firefox 3.5

Screenshots. Notepad

Screenshots. Desktop

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

top related