ROS Newsletter67

Материал из Русский WINE
Перейти к: навигация, поиск

Выпуск новостей ReactOS №67

Отладка

С тех пор, как мы последний раз обсуждали поддержку WinDBG прошел почти год. На первом этапе нам было необходимо переписать часть кода ядра, чтобы добиться его совместимости с WinDBG. Основная часть требуемого функционала была связана с контекстом выполняющего потока и чтением виртуальной памяти. И хотя эти функции были реализованы два года назад, несколько ошибок не позволяли их использовать. Отладка требует не только прерывание выполняющегося потока нити, но и его восстановление для продолжения работы программы. Одна из ошибок повреждала контекст выполнения, и в конечном счете, разрушала все, что отлаживалось. Другой проблемой был HAL, пытающийся использовать первую физическую страницу при помощи диспетчера памяти, что невозможно, поскольку функция в диспетчере памяти выполняла дополнительную синхронизацию, которая работала бы некорректно, если бы HAL находился в контексте отладки после перезагрузки. Работая в этом контексте, ни одна из выполняемых синхронизаций не была необходима, а кроме того, был риск, что рассматриваемые блокировки были уже проведены чем-либо ещё. Это могло привести к взаимной блокировке и зависанию системы. Исправив эти и другие ошибки, Стефану удалось заставить взаимодействовать ядро ReactOS и WinDBG, что позволило выполнить такие действия, как установка и очистка контрольных точек, чтение ввода-вывода и памяти. Однако, это взаимодействие в ReactOS осуществляется лишь при использовании драйвера KDCOM из операционной системы Windows 2003.

Причина, по которой Стефан использовал драйвер KDCOM из Windows 2003, была в том, что KDCOM ReactOS попросту некорректно работал, когда Стефан начал свои работы. Несмотря на все усилия Тимо Кройцера (Timo Kreuzer) сделать его совместимым, драйвер так и не достиг того уровня, когда на него можно было положиться и не было бы больше необходимости догадываться, где между KDCOM и ядром произошел отказ. Приблизительно в то же самое время, когда Стефан проявил интерес к поддержке WinDBG, Тимо возобновил свою работу над драйвером KDCOM ReactOS для ветки x64. Множественные проблемы синхронизации приводили к потере символов и пропуску пакетов, в особенности больших, и сделали драйвер довольно ненадежным. Тимо добавил дополнительную проверку ошибок и поддержку их компенсации. Странной проблемой синхронизации, к примеру, являлось то, что попытки записи в последовательный порт невозможно, так как устройство выдает информацию о неготовности к передаче, хотя результаты проверки состояния порта свидетельствуют о его готовности. Текущая доработка Тимо просто устанавливает задержку, которая, как кажется, дает последовательному порту достаточно времени, чтобы обеспечить приём данных, но это решение далеко не идеально. На настоящий момент испытательной платформой Тимо является VirtualBox, который ведёт хронологию проблем вывода в последовательный порт. Только выяснение того, как организовать регулярный сбор отладочной информации из ReactOS используя VirtualBox потребовало у тестеров некоторое время, и, даже после этого, результаты форматирования сообщений оказались полностью перемешаны во времени. Похоже, что проект VirtualBox планирует переписать реализацию последовательного порта, это, как мы надеемся, решит проблемы, которые испытал наш проект и позволит провести более надежное тестирование KDCOM и WinDBG.

Оболочка

Оболочка, с которой взаимодействуют пользователи, состоит из нескольких связанных между собой компонентов, поэтому переписывание её программного кода является крайне нетривиальной задачей. Помимо самой оболочки проводника, есть ещё, к примеру, такие библиотеки, как shell32, browseui, comctl32, shlwapi и другие. В ReactOS большая часть функциональных возможностей этих библиотек размещена в оболочке проводника, потому что отдельно этих библиотек не существует. Дело в том, что ReactOS унаследовал текущий проводник из Wine, но Wine не нуждается в реализации shell32. Одним из примеров этому является меню "Пуск". В действительности, оно не реализовано в проводнике, а лишь отображается им. Другой пример - система меню. Обычно в приложениях Windows меню управляются библиотекой user32, но у оболочки фактически есть несколько различных меню, которые обрабатываются отдельно. Лишь небольшое количество приложений, помимо оболочки, когда-либо могли бы использовать эти меню, таким образом их нехватка не была бы заметна, хотя, любой кто попытался бы использовать альтернативную оболочку, немедленно обратил бы внимание на недостающие функциональные возможности.

Эндрю Хилл (Andrew Hill) провел последние несколько месяцев исследуя систему оболочки Windows и отыскивая недостающую функциональность в оболочке ReactOS. Ему удалось получить несколько связанных библиотек оболочки, известных как explorer_new - планируемая замена для текущей оболочки ReactOS, компилируемая с использованием Visual Studio и работающая на Windows XP. Это позволило ему находить недостающие специфические функциональные возможности, а так же места, где недостаточно существующих функциональных возможностей. Одним из таких таким примеров могут являться недостатки меню "Пуск", как одного из тех меню, которым не управляет библиотека user32. Текущая цель Эндрю состоит в том, чтобы заставить explorer_new вести себя идентично тому, как ведёт себя собственная оболочка XP, а затем перенести результаты своей работы в ReactOS.

Новые разработчики

Выше я уже упомянул о Эндрю Хилле (Andrew Hill), на самом деле, он участвует в проекте уже в течении нескольких месяцев, но предпочитал оставаться в тени, так как проводил первоначальное ознакомление с проектом. Изначально он работал с Гедом Мёрфи (Ged Murphy) и недавно решил, что необходимо опубликовать плоды своих трудов. Его ник на IRC-канале ash77, хотя, вероятнее всего, вы увидите этот ник с "|away" в окончании, вне зависимости от фактического отсутствия или присутствия Эндрю на IRC-канале.

Ещё одним новым разработчиком, присоединившимся к команде, является Яннис Адамопулос (Giannis Adamopoulos), известный как smiley_ на IRC-канале. Яннис уже давно стал завсегдатаем канала IRC, основным кругом его интересов является подсистема ядра Win32, он будет помогать реализовывать недостающие функциональные возможности.

Появление новых талантливых разработчиков конечно поможет усовершенствованию ReactOS, но все еще есть много работы, в которой проекту нужна помощь. Мы находимся на этапе, когда переписывание программного кода старых, нестабильных компонентов почти завершено, что позволит вновь начать наращивать функциональность. Дополнительная функциональность поможет увеличить совместимость ReactOS, но в связи с ограниченными человеческими ресурсами мы не можем взяться за всё сразу. Надеемся, что число новых разработчиков продолжит увеличиваться с развитием проекта.

Newsletters
30-39 #30#31#32#33#34#35#36#37#38#39
40-49 #40#41#42#43#44#45#46#47#48#49
50-59 #50#51#52#53#54#55#56#57#58#59
60-69 #60#61#62#63#64#65#66#67#68#69
70-79 #70#71#72#73#74#75#76#77#78#79
80-89 #80#81#82#83#84#85#86#87#88#89
90-99 #90#91#92#93#94#95#96#97#98#99