Pull to refresh

Масштабный выпуск новостей ReactOS № 83

Reading time 5 min
Views 942
Original author: Z98
image

Использование памяти в GDI


image
В процессе переписывания диспетчера поддержки интерфейса графических устройств (GDI), Тимо Кройцер (Timo Kreuzer) столкнулся с тем, что можно назвать не иначе, как чудовищная растрата памяти. Количество выделяемой памяти для создаваемых объектов составляло всегда полную страницу, т.е. 4 Кб, вне зависимости от того, нужен ли объекту такой большой объём памяти для хранения своих атрибутов. Это приводит к значительному расходу памяти впустую, а также к расходованию адресов памяти. Тимо предполагает, что это является одной из причин, приводящих к утечке в диспетчере задач множества страниц памяти за раз. В Win32k имеется механизм кэширования таких выделений, который, по всей видимости, не использует освобожденные страницы повторно, поэтому в течение некоторого количества времени вся память системы может быть исчерпана.

К счастью, Тимо удалось решить эти проблемы. Он разработал пулы памяти для каждого типа атрибута объекта для каждого процесса. Всякий раз, когда создаётся или уничтожается объект, в этих пулах выделяется или освобождается память. Пулы организованы в разделы, размер которых варьируется от одной страницы в 4 Кб и до 64 Кб. Каждый пул начинается с одного раздела, при необходимости может быть добавлено большее их количество, однако общее количество памяти, выделяемой при каждом создании объекта, не превышает фактическое количество, необходимое для каждого атрибута. Для обозначения свободных сегментов памяти каждого пула используется битовый массив, при этом поиск доступной для распределения памяти происходит значительно быстрее, чем раньше, когда использовался метод постраничного опроса каждого атрибута объекта при его создании.

Помимо увеличения скорости и избавления от растраты памяти впустую, пулы также устраняют необходимость в старом механизме кэширования. Пулы сами по себе действуют как своего рода кэш, содержа в себе резерв памяти, быстро доступной для использования во время создания объекта. Таким образом, Win32k не нуждается ни в каких дополнительных механизмах, предназначенных для обработки старых блоков памяти и подготовки их к повторному использованию для новых объектов.

Новый драйвер USB



Йоханнес Андервальд (Johannes Anderwald) работал над широким спектром компонентов ReactOS, от ядра до Win32k и поддержки звука, а сейчас он занят разработкой USB. Проявив интерес к внедрению поддержки USB, он предложил Михаэлю Мартину (Michael Martin) переписать драйверы USB с языка C на C++, чтобы сделать их более простыми в чтении и поддержке. Михаэль согласился и полностью сосредоточил всю свою деятельность на новом драйвере EHCI. Их текущей целью является доработка этого драйвера до такого состояния, чтобы его функциональность была сравнима с функциональностью старого драйвера EHCI, написанного Михаэлем. От продолжения разработки старого драйвера было решено отказаться до перехода к разработке драйвера usbhub, ответственного за отправку пакетов запросов ввода-вывода в драйвер EHCI.

Проекты, принятые в Summer of Code



Проекту ReactOS был выделен лимит в шесть вакансий в рамках Google Summer of Code, а вся информация о выбранных проектах была размещена здесь. По причинам личного характера у меня не было достаточно времени для более подробного освещения сути этих проектов.

Драйвер TCP/IP


Было уже достаточно много попыток внедрения качественной реализации протокола TCP/IP в сетевом стеке ReactOS. Последняя заключалась в использовании библиотеки oskit для поддержки TCP/UDP, однако её интеграция, как оказалось, представляет собой весьма и весьма сложный процесс. В любой используемой нами сторонней библиотеке для нас на первом месте стоит возможность лёгкого обновления при выпуске новой её версии другим проектом. Если для работы кода необходима его тесная интеграция с системой, задача намного усложняется. Библиотека lwIP предназначена, в первую очередь, для использования во встраиваемых системах, делая их очень лёгкими и автономными. Мы надеемся, что удастся правильно интегрировать её в сетевой стек ReactOS.

Explorer_New


Работа над новой оболочкой началась несколько лет назад Томасом Блумелем (Thomas Bluemel) и была продолжена Эндрю Хиллом (Andrew Hill). Большинство отсутствующего функционала является следствием неполной реализации библиотеки shell32, в основном именно от её готовности зависит правильность работы explorer_new. Таким образом, работа над explorer_new также подразумевает работу над библиотекой Shell32. Для этого проекта уже имеется большое количество наработок, но для его завершения потребуется ещё немало сил.

Поддержка тем


Поддержка тем является одной из наиболее востребованных функций в ReactOS, хотя чаще всего о её введении просят лишь пользователи, которые думают, что красивый пользовательский интерфейс привлечёт к проекту больше людей. Также она относится к мало документированным компонентам Windows, в связи с чем возникают трудности правильной её реализации. Тем не менее Яннис Адамопулос (Giannis Adamopoulos) провел исследования в этом направлении и полагает, что может заняться реализацией этого компонента.

Микширование аудиопотоков


Хотя Йоханнесу Андервальду и удалось достичь определённого успеха в работе над звуковым стеком ReactOS, тем не менее нужно ещё многое сделать для разработки поддержки одновременного управления несколькими аудиопотоками. Это крайне необходимая функциональность, особенно если у пользователя включено звуковое оповещение о событиях, происходящих в ОС или приложениях. ReactOS на данный момент очень плохо поддерживает эти функции, поэтому наличие аудиомикшера помогло бы сделать систему намного более пригодной к использованию.

Набор тестов режима ядра


Это то, к чему так стремился Амин Хальди (Amine Khaldi), поскольку набор тестов, непосредственно взаимодействующих с функциями ядра смог бы значительно ускорить и облегчить поиск проблем, приводящих к сбоям при загрузке ReactOS или нарушающих нормальное функционирование системы. Также интересно увидеть как они будут реализованы, поскольку при неудачном прохождении теста велика вероятность возникновения критического сбоя в ОС.

Драйвер шрифтов в GDI


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

Ещё один разработчик



Габриэль Иларди (Gabriel Ilardi) некоторое время назад получил коммит-доступ, но поскольку он отсутствовал на IRC-канале в течение нескольких недель, этот факт выскочил у меня из головы когда я писал предыдущий выпуск новостей. В любом случае, пожалуйста, поприветствуйте ещё одного разработчика, присоединившегося к нашим рядам.

В переводе участвовали: evilslon, Farwalker, serrox
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+58
Comments 15
Comments Comments 15

Articles