Chimera (собрание 1.09.09) План Цель нашей работы Состояние на сегодня Функционирование branded зоны Планы на будущее Вопросы Предложения по организации совместной разработки Заключение Цель Создание win32 branded зоны для OpenSolaris (на базе Windows 2003 SP1) Zone Container BrandZ infrastructure brand Состояние на сегодня Умеем собирать WRK и ON Тестовые машины: – – Windows 2k3 sp1 OpenSolaris onnv_b117 (справа от ws17) (ws17.swsoft.nsu.ru) Документация WRK (две – написанная и сгенерированная) Изучена работа технологии BrandZ Состояние на сегодня (продолжение) Набор тестовых программ Создана базовая win зона: – – – win brand kernel module win brand userspace support library zone configs Начата разработка загрузчика исполняемых файлов формата PE (Portable Executable) Сборка WRK и ON WRK – /WindowsResearchKernel-WRK/README.txt ON (OS/Net consolidation) – http://parallels.nsu.ru/WackoWiki/Chimera/BuildingOpenSolaris – http://www.opensolaris.org/os/community/on/devref_toc/ Документация WRK http://parallels.nsu.ru/WackoWiki/Chimera/SpisokFunkcijj – – [+] можно редактировать [-] это очень не удобно (проблемы с правами) ws17.swsoft.nsu.ru:~/WRK/documentation/home – – [+] сгенерирована по исходному коду [-] для удобства использования стоит более точно настроить генератор и разместить на вебсервере Набор тестовых программ Тестируем работу win зоны Каждая тестовая программа – аналог процесса init (на первых этапах разработки) Программы: – – create* - создание файла (открыть, закрыть, завершить работу) writefile* - пишет в существующий файл в юникоде (открыть, записать строку, закрыть, завершить работу) Набор тестовых программ (продолжение) Вариации программ: – – – – A: вызов функций ядра напрямую B: вызов функций ядра через ntdll.dll C: вызов функций ядра напрямую, исполняемый файл в формате ELF D: вызов функций ядра напрямую, исполняемый файл в формате ELF, использование гибридного интерфейса ядра (Windows + Solaris) Набор тестовых программ (продолжение 2) Оригинальные тестовые программы (create*, writefile*; вариации A, B, C) – http://parallels.nsu.ru/WackoWiki/DmitryKolbin – http://parallels.nsu.ru/~dkolbin/testPrograms/ Вариация D для create* – на ws17.swsoft.nsu.ru Что почитать по BrandZ? OpenSolaris BrandZ design document – OpenSolaris ON Developer's Reference Guide – http://www.opensolaris.org/os/community/brandz/design/ http://www.opensolaris.org/os/community/on/devref_toc/ Brand Source Layout – http://parallels.nsu.ru/WackoWiki/Chimera/BrandSourceLayout Базовая win зона Созданные компоненты: – – – win brand kernel module win brand userspace support library win zone configuration files Функциональность успешно протестирована на тестовой программе create*, вариация D Исходный код можно найти в среде сборки (~/testws), но лучше отдельно спросить у меня Базовая win зона (продолжение) Точка входа в ядро – только через sysenter Нет поддержки загрузки файлов PE Тестовая программа создает файл и уходит в pause(2) Разделение пространств номеров системных вызовов: – – – до 1024 – Windows 2k3 sp1 1024 и более – OpenSolaris об этом знают только kernel module и support library Загрузчик файлов формата PE [?] Функционирование branded зоны Зона – набор из: – – – – конфигурационных файлов модуля ядра (основная задача в принятии запросов на системные вызовы и передаче их в библиотеку поддержки) библиотеки поддержки (большая часть эмуляции проходит здесь) возможно, других библиотек и файлов Остальное предоставляет ОС Системные вызовы: глобальная зона Global zone (native) Solaris process { … open() … } userland kernel Solaris kernel Syscall handler if (p->p_brand) p->p_brand->b_syscall(); else rval = do_native_syscall(); return to userspace open() { … return (fd); } Эмуляция системных вызовов: win зона Windows zone Windows process { … NtCreateFile() … } userland Win brand support library win_NtCreateFile(args) { fd = open(win2sol(args)) if (fd < 0) return (sol2win(errno)) else return (fd) } kernel Windows brand module Solaris kernel Syscall handler if (p->p_brand) p->p_brand->b_syscall(); else rval = do_native_syscall(); return to userspace win_syscall() { trampoline to userland } open() { … return (fd); } struct win_brand_ops { win_syscall() win_proc_exit() win_initlwp() … } Эмуляция системных вызовов: на самом деле всё несколько сложнее Точек входа в ядро может быть несколько Для каждой точки входа своя ‘win_syscall()’ См. struct brand_ops и struct brand_mach_ops Для заданной точки входа Syscall handler осуществляет демультиплексирование запросов системных вызовов (Windows/OpenSolaris) Сейчас в support library нельзя использовать open(2) и аналогичные функции из libc Планы на будущее Реализация загрузчика PE файлов Реализация других точек входа в ядро Развитие библиотеки поддержки Код эмуляции для базовых системных вызовов Создание минимальной Windows-среды внутри зоны Обзор и анализ аналогов и заменителей Планы на ближайшее будущее Определиться с организацией совместной работы Определить приоритетные задачи Перевод проекта под управление SCM системы (об этом – чуть позже сегодня) Планы на ближайшее будущее (продолжение) Адаптация libc и других библиотек для возможности использования в support library Реализация загрузчика PE файлов Обзор и анализ аналогов и заменителей Остальное – в зависимости от предыдущих пунктов Ваши вопросы? (это еще не конец) Ваши ответы? Сколько часов в неделю вы можете уделять проекту? На какой курс вы перешли? Есть ли у вас доступ к сети университета из всех/большинства мест, где вы будете работать над проектом? Если нет, то к какой сети есть доступ у всех? У кого есть сервер в этой сети? Ваши ответы? (продолжение) Какие скриптовые языки вы знаете? На каком уровне? (например, Perl, Python, Ruby, awk) С какими VCS, bugtracking, SCM системами вы знакомы? Считаете ли вы полезной возможность тестировать Химеру на виртуальной машине? Ваши ответы? (продолжение 2) Что вы думаете о лицензировании продукта и возможных ограничениях на процесс разработки в связи с этим? Есть ли у вас какие-либо пожелания по организации процесса разработки и взаимодействия в команде? Есть ли у вас какие-либо предложения по направлениям развития? Организация совместной разработки Установка SCM системы и сбор всей информации по проекту в одном месте – – Trac + Mercurial plugin (?) Перенести документы по проекту из WackoWiki в Trac Wiki Создание и использование списка рассылки – swsoft.nsu.ru / groups.google.com / … Распределение задач Кто чем хотел бы заняться? ;) Следующая встреча О чем? Что бы вы хотели услышать? Когда?