ARWINSS — различия между версиями
Fog (обсуждение | вклад) (→Описание Win32-подиситемы в Windows) |
Fog (обсуждение | вклад) (→Описание Win32-подиситемы в Windows) |
||
Строка 22: | Строка 22: | ||
==== Описание Win32-подиситемы в Windows ==== | ==== Описание Win32-подиситемы в Windows ==== | ||
− | + | [[Файл:Winarc.gif|right]] Картинка и описание с сайта Microsoft: <blockquote> Как мы видим, подсистема Win32 включает в себя Win32 API, в виде библиотек, таких как KERNEL32.DLL, GDI32.DLL, и USER32.DLL. Интересно отметить, что начиная с Windows NT 4.0, Microsoft переместила часть подсистемы Win32 из пользовательского режима в режим ядра. В частности, драйвер устройства режима ядра Win32k.sys управляет отображением окон, выводом на экран, ввод с клавиатуры и мышки, и передачей сообщений. Он также содержит библиотеку интерфейса графического устройства (GDI.DLL), что используется для отображения графических изображений и текста.</blockquote> | |
− | + | ||
− | [[Файл:Winarc.gif|right]] | + | |
− | + | ||
− | + | ||
− | <blockquote> Как мы видим, подсистема Win32 включает в себя Win32 API, в виде библиотек, таких как KERNEL32.DLL, GDI32.DLL, и USER32.DLL. Интересно отметить, что начиная с Windows NT 4.0, Microsoft переместила часть подсистемы Win32 из пользовательского режима в режим ядра. В частности, драйвер устройства режима ядра Win32k.sys управляет отображением окон, выводом на экран, ввод с клавиатуры и мышки, и передачей сообщений. Он также содержит библиотеку интерфейса графического устройства (GDI.DLL), что используется для отображения графических изображений и текста.</blockquote> | + | |
Как все работает в Windows NT. Приведу очень упрощенную картину. Есть ядро и компания. Есть файл win32k.sys который грубо говоря находится в ядре и отвечает за обмен информацией между видеокартой(как видно из описания выше не только видеокартой, но упростим для понимания) через драйвер той же видеокарты с пользовательским режимом. Для чего это нужно? Чтоб информация полученая win32k.sys от видеокарты была через загрузчик библиотек ntdll.dll передана в режим пользователя, где она будет принята подсистемой Win32. Тоесть информация от видеокарты в конечном итоге надходит к библиотекам (читать файлам) GDI32.DLL, и USER32.DLL, которые отвечают за прорисовку окон и их составляющих а также вывод графических изображений и текста. | Как все работает в Windows NT. Приведу очень упрощенную картину. Есть ядро и компания. Есть файл win32k.sys который грубо говоря находится в ядре и отвечает за обмен информацией между видеокартой(как видно из описания выше не только видеокартой, но упростим для понимания) через драйвер той же видеокарты с пользовательским режимом. Для чего это нужно? Чтоб информация полученая win32k.sys от видеокарты была через загрузчик библиотек ntdll.dll передана в режим пользователя, где она будет принята подсистемой Win32. Тоесть информация от видеокарты в конечном итоге надходит к библиотекам (читать файлам) GDI32.DLL, и USER32.DLL, которые отвечают за прорисовку окон и их составляющих а также вывод графических изображений и текста. |
Версия 19:07, 3 марта 2014
Содержание
[убрать]Что такое ARWINSS?
ARWINSS (Another Realization of WIN32 SubSystem) представляет собой альтернативную реализацию подсистемы win32, предназначенную для упрощенного переноса WINE на платформы, отличные от unix. Ключевое изменение - переработка архитектуры в сторону модульности. В первую очередь, речь идет о "подменяемости" графического вывода.
В настоящее время в Wine использует промежуточный "слой совместимости" с графической подсистемой конкретной платформы, на которой он работает. В linux/*nix этот слой представляет собой "драйвер" winex11.drv, перенаправляющий графический вывод Wine на X Windows System. В ARWINSS, удалось сделать замену этому "драйверу", под названием winent.drv, использующую графические возможности соответствующей ему части ядра ReactOS/Windows, и получив фактически работающие в ReactOS библиотеки user32 и gdi32 из Wine.
Так как код user32/gdi32 в Wine является протестированным и относительно надёжным, предполагается, что ARWINSS обеспечит большую совместимость с приложениями, чем нынешняя реализация win32 в ReactOS, содержащаяя "кашу" из разных версий Wine с вкраплениями собственного кода ReactOS той или иной степени актуальности. Кроме того, ARWINSS позволит обмениваться с проектом Wine гораздо большим количеством кода, а также использовать "дешевые" (не требующие значительного времени разработчиков) синхронизации с Wine библиотек user32 и gdi32.
Таким образом, ARWINSS должна (по крайней мере, теоретически) обеспечить работоспособность в ReactOS как минимум всех тех программ, которые работают в последних версиях Wine.
Подробное описание:
Критика существующей Win32-подсистемы ReactOS
Основная Win32-подсистема в ReactOS берёт своё начало в 1999 году. Была проделана большая работа по созданию различных её частей, в работе принимали участие многие разработчики Wine. Совместима по системным вызовам win32k.sys, и только местами очень отдалённо напоминает архитектуру Win32-подсистемы Windows XP. Единственная хорошая часть – это графический код в win32k.sys, всё остальное – сочетание старого Wine и собственного кода. Над этой подсистемой работали более 30 человек, большая часть работы – это синхронизация старого кода с Wine’ом. Т.е. фактически пустая работа. Ещё один минус в том, что архитектура Win32-подсистемы в Windows по «красоте» очень далека от совершенства архитектуры ядра NT, и поэтому нет смысла полностью его копировать.
Решение проблемы – Win32-подсистема, версия 2.0.
Возникло естественное желание – сделать лучше, свести затраты на обслуживание на минимум, использовать существующий код по-максимуму. Попытки сделать это предпринимались в ReactOS неоднократно, но все заканчивались полной неудачей. Кроме одной, под названием Arwinss. В её основу легло очень простое решение: Если Wine работает настолько хорошо, и если код Wine всё-равно используется сейчас (но приходится тратить кучу времени на то, чтобы найти куски этого кода, разобраться, синхронизировать этот код с новым Wine, найти то, что от него зависит и ломается, и всё это время потраченное зазря), то почему бы не сделать новую Win32-подсистему именно на основе Wine.
Описание Win32-подиситемы в Windows
Картинка и описание с сайта Microsoft:Как мы видим, подсистема Win32 включает в себя Win32 API, в виде библиотек, таких как KERNEL32.DLL, GDI32.DLL, и USER32.DLL. Интересно отметить, что начиная с Windows NT 4.0, Microsoft переместила часть подсистемы Win32 из пользовательского режима в режим ядра. В частности, драйвер устройства режима ядра Win32k.sys управляет отображением окон, выводом на экран, ввод с клавиатуры и мышки, и передачей сообщений. Он также содержит библиотеку интерфейса графического устройства (GDI.DLL), что используется для отображения графических изображений и текста.
Как все работает в Windows NT. Приведу очень упрощенную картину. Есть ядро и компания. Есть файл win32k.sys который грубо говоря находится в ядре и отвечает за обмен информацией между видеокартой(как видно из описания выше не только видеокартой, но упростим для понимания) через драйвер той же видеокарты с пользовательским режимом. Для чего это нужно? Чтоб информация полученая win32k.sys от видеокарты была через загрузчик библиотек ntdll.dll передана в режим пользователя, где она будет принята подсистемой Win32. Тоесть информация от видеокарты в конечном итоге надходит к библиотекам (читать файлам) GDI32.DLL, и USER32.DLL, которые отвечают за прорисовку окон и их составляющих а также вывод графических изображений и текста.