Chimera - Parallels

реклама
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 / …
Распределение задач
Кто чем хотел бы заняться? ;)
Следующая встреча



О чем?
Что бы вы хотели услышать?
Когда?
Скачать