Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пт апр 28, 2017 7:36 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 58 сообщений ]  На страницу 1 2 3 4 След.
Автор Сообщение
СообщениеДобавлено: Чт сен 16, 2010 8:45 pm 
Не в сети

Зарегистрирован: Ср сен 15, 2010 7:22 pm
Сообщения: 101
Решил потренироваться в системном программировании. Возможно косвенные результаты этой тренировки смогут быть полезными для кого-то, кто также решит потренироваться, а возможно и не только.

При первом тренировочном заезде возникли некоторые вопросы и комментарии. Буду очень признателен, если кто-то ответит на вопросы, или поправит меня раньше, чем я разберусь в этом самостоятельно :wink:

Компиляция ядра KolibriOS приводит к файлу размером около 140кб, в то время как в дистрибутиве примерно 80 кб: в дистрибутиве применено сжатие средствами kerpack/Kpack? Или надо отключить отладочную информацию? Как это сделать? (Я использую /kernel/build.bat в MS WindowsXP, fasm.exe [1.68] просто помещён в C:/MinGW/bin, включённый в PATH. Другими способыми (например, из MSys) собрать ядро KolibriOS мне не удалось.)

В файле /kernel/core/syscall.inc имеется две таблицы: servetable и servetable2. Насколько я понимаю, в первую очередь используется servetable2. Обработчики функций, описанные в этой (новой) таблице, уже
- используют неротированные регистры,
- используют иной способ засылки ответов(на 4 меньше) (для eax: mov [esp+32],eax вместо mov [esp+36],eax, как это было указано в статье из первого выпуска e-zine_2006 «Модификация ядра Kolibri OS. Часть 1. Добавление новых функций в ядро »).
Порядок регистров соответствует порядку их загрузки в стек командой pushad:
eax <- [esp+32]
ecx <- [esp+28]
edx <- [esp+24]
ebx <- [esp+20]
esp <- [esp+16] ; esp на момент перед pushad
ebp <- [esp+12]
esi <- [esp+8]
edi <- [esp+4]

[flat assembler 1.68 Programmer's Manual (Tomasz Grysztar):стр.21 ]

Насколько верны эти утверждения?

Насколько я понял, на данный момент происходит постепенный перевод всех обработчиков на новый стиль и работа уже выполнена примерно на 70%. Поэтому ещё не переведенные на новый стиль обработчики вызываются с использованием servetable, посредством вызова функции cross_order. После окончания этой работы таблица servetable будет удалена.
Также в статье нет никаких рекомендаций по поводу того, где размещать саму функцию – обработчик (пока в соответствии с вышеназванной статьёй):

Код:
$Revision: 0001 $

align 4
sys_serverops:
        mov     eax,0x00101010
        mov     [esp+32],eax
        mov     ebx,0x00202020
        mov     [esp+20],ebx
        mov     ecx,0x00303030
        mov     [esp+28],ecx
        mov     edx,0x00404040
        mov     [esp+24],edx
        ret



На мой взгляд правильным будет вариант, выражающийся в новой строке файла kernel/kernel32.inc :

Код:
; load server base function
include "mickbase/mickbase.inc"



Таким образом получается, что статья «Модификация ядра Kolibri OS. Часть 1. Добавление новых функций в ядро » нуждается в существенной коррекции.
Может быть уже существует откорректированный - обновлённый вариант этой статьи?

P.S.

(1) Я тестирую KolibriOS на виртуальной машине Oracle VM VirtualBox. Образ диска с разделом FAT виден только если его поместить в виртуальной машине на SATA. Даже собственную дивкету видеть не хочет ... (Версия 0.7.7 ru)

(2) Выход из системы по пункту Home приводит к исключительной ситуации Oracle VM VirtualBox, приводящей к завершению сеанса работы с KolibriOS.


Вернуться к началу
СообщениеДобавлено: Чт сен 16, 2010 9:12 pm 
Цитата:
Компиляция ядра KolibriOS приводит к файлу размером около 140кб, в то время как в дистрибутиве примерно 80 кб: в дистрибутиве применено сжатие средствами kerpack/Kpack?

Для приложений kpack, для ядра kerpack. Kerpack только для среды Колибри -в настоящее время без вариантов. Kpack есть не только для Колибри.
Цитата:
В файле /kernel/core/syscall.inc имеется две таблицы: servetable и servetable2. Насколько я понимаю, в первую очередь используется servetable2.

Если я не ошибаюсь, то одна из таблиц позволяет переопределять вызовы для использования драйверов.
Цитата:
Насколько верны эти утверждения?

Информация склонна устаревать, особенно для ядра и особенно за 4 года - надо смотреть в первую очередь исходники ядра.

Вот здесь http://diamond.kolibrios.org/nightbuild/ выкладываются ночные сборки, стабильность их не всегда высока, но лучше работать с ними при написании кода, поскольку это актуальная версия.


Вернуться к началу
   
СообщениеДобавлено: Пт сен 17, 2010 2:10 am 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1291
Цитата:
В файле /kernel/core/syscall.inc имеется две таблицы: servetable и servetable2. Насколько я понимаю, в первую очередь используется servetable2.
Mario писал(а):
Если я не ошибаюсь, то одна из таблиц позволяет переопределять вызовы для использования драйверов.

Mario: Ошибаешься.

FireWall: Обе таблицы нужны для обращения к сисфункциям из пользовательских программ.
Для драйверов (только в Ring 0) ядро предоставляет расширенный системный сервис - см. /core/exports.inc.

Некоторые их этих функций доступны и из Круга Третьего, с одним "но":
- по прихоти Отца-Основателя (заложившего в систему, помимо всего прочего, замечательную традицию чихать на мнение коллег, если оно не совпадает с твоим собственным)
параметры при экспортируемых и внутриядерных вызовах передавались в регистрах начиная с eax,
тогда как при вызове соответствующей сисфункции eax использовался для передачи ее номера.

Для решения этой (пустяковой, в сущности) проблемки Основатель закрутил в обработчике системных вызовов карусель ротации содержимого ВСЕХ регистов общего назначения, причем раскручивать эту карусель народу приходится до сих пор.

servetable - это рудимент оригинальной менуэтовской таблицы, жить которой (надеюсь) осталось недолго. Управление ей передается через новую таблицу servetable2 (см. поля cross_order последних явно ротируемых сисфункций 53, 58 и 63). Неявная ротация все равно сохранилась во многих местах, но теперь она более-менее оптимизирована под специфику конкретных функций.
Так что если где-нибудь встретишь странный код типа
Код:
mov eax, ebx
mov ebx, ecx
mov ecx, edx
....

знай что это оно и есть.

С возвращаемыми параметрами (если они есть) своя заморочка - внутри ядра и между ядром и драйвером они передаются в тех же регистрах.
А из ядра в приложение их надо передавать в стеке в силу специфики входа в Ring0 по int 40 (метка i40: в core/syscall.inc).
Обрати внимание, что "старые" (ротируемые) сисфункции имеют лишний call, а значит и стек у них будет на 4 байта глубже...


Вернуться к началу
СообщениеДобавлено: Пт сен 17, 2010 4:06 am 
Не в сети
Kernel Optimizer
Аватара пользователя

Зарегистрирован: Пн янв 16, 2006 7:58 pm
Сообщения: 657
to FireWall
Уточню некоторые моменты: Упаковать ядро можно и под Windows см мой пост viewtopic.php?f=23&t=1511&p=29044#p29044.
Особенность упаковки в том, что kerpack нужно поместить на fdd, это особенность этой программы. Программа не дает никакого лога. Об успешном выполнении можно судить только по размеру сжатого ядра.

Попробую использовать QEMU.


Вернуться к началу
СообщениеДобавлено: Пт сен 17, 2010 9:37 am 
art_zh
Цитата:
Mario: Ошибаешься.

Так ведь я и не настаивал. А вообще когда я ошибаюсь - я честно признаю свои ошибки.
Цитата:
(заложившего в систему, помимо всего прочего, замечательную традицию чихать на мнение коллег, если оно не совпадает с твоим собственным)

Можно так подумать ты сам не следуешь такому же правилу. А вообще между "чихать на мнение коллег" и "отсутсвует желание реализовывать чужие идеи" есть некоторая и весьма существенная разница. Генеральное различие в политике основателия и политике сообщества Колибри - в Колибри никто не запрещает и никто не отказывается принимать уже готовый код. Это между прочим весьма существенная разница.

<Lrz>
Все-же KlbrInWin не совсем запуск под Виндовс (в отличие от Kpack который таки имеет настоящую версию под Виндовс) - эмуляция ведь, плюс с учетом того что его (эмулятор) некоторые антивирусы объявляют зараженным реализовать приведенную методику будет проблемно, к сожалению.


Вернуться к началу
   
СообщениеДобавлено: Пт сен 17, 2010 10:34 am 
Не в сети
Kernel Optimizer
Аватара пользователя

Зарегистрирован: Пн янв 16, 2006 7:58 pm
Сообщения: 657
Mario
Напоминает анекдот про оптимистов и пессимистов. Один считает, что стакан на половину пуст, другой, что на половину полон.
KlbrInWin, это именно запуск используя основную Windows систему, используя эмулятор. На мой взгляд, это единственная возможность упаковать ядро, не в среде Kolibri OS.
И все равно данная методика осуществима, несмотря на "злостное отторжение не кошерного кода KlbrInWin".


Вернуться к началу
СообщениеДобавлено: Пт сен 17, 2010 10:40 am 
Я не говорил, что "не кошерно", так частное замечание о чистоте метода.
Жаль только, что эмулятор разработчики антивирусов объявили вне закона. :(


Вернуться к началу
   
СообщениеДобавлено: Вт сен 21, 2010 7:46 pm 
Не в сети

Зарегистрирован: Ср сен 15, 2010 7:22 pm
Сообщения: 101
Спасибо за уточнения!

Прокомментирую только одно :

Когда я спрашивал по поводу размера ядра, меня прежде всего интересовало, почему у меня 140кб, а в дистрибутиве 70кб (очень примерно). Я беспокоился, что разница обусловлена отладочным кодом. Для меня kerpack легче применить внутри kolibri.img , а затем перенести при помощи редактора образов дискеты. Так что kerpack в MS Windows пока не актуален.

Пока есть ещё один уточняющий вопрос:
Кто нибуть экспериментировал по включению кода на C (грубо говоря) в код ядра KolibriOS?

P.S.

Это я уже спрашиваю в контексте KolibriOS[ia-32-generic] :wink:


Вернуться к началу
СообщениеДобавлено: Вт сен 21, 2010 8:09 pm 
Никто не мешает писать драйвера на Си. И если я не ошибаюсь именно так Serge делал драйвера видеокарт Ати.

Прямое включение Си кода в ядро не возможно - сомневаюсь, что Fasm скушает такой винегрет. Разве что исхитриться линковкой объектного кода, но я тут не специалист.

А вообще исключительно по моему мнению если переписать ядро Колибри на Си оно возможно не сильно может потерять в скорости, но разбухнет в размерах и потеряет привлекательность - станет серой обыденностью. Все-же Колибри достаточно уникальная ОС.

Я не отрицаю есть много хороших Сишных программистов и они умеют писать свой код хорошо, но также есть много откровенных быдлокодеров при этом свято верующих, что они держатся правильной политики -большое количество мусорного кода (памяти много - че жалеть?) и написание программ стабильная работа которых обеспечивается постоянными снапшотами (компер быстрый - че жалеть?)... грустно это все.

Особенно меня "впечатлило" заявление в интервью («Chaos Constructions-2010») о том что потеря отдельных объектов не смертельна для объектного кода. Было это сказано с весьма убедительным видом.


Вернуться к началу
   
СообщениеДобавлено: Вт сен 21, 2010 11:06 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
FireWall

Kolibri Pe была таким экспериментом. Вполне успешным в плане компиляции. asm часть оформлялась в PE COFF и линковалась с сишным кодом. Потом всё запускалось GRUB. Порядком устаревшие исходники есть на svn в kernel/branches.


Вернуться к началу
СообщениеДобавлено: Ср сен 22, 2010 8:14 pm 
Не в сети

Зарегистрирован: Ср сен 15, 2010 7:22 pm
Сообщения: 101
Цитата:
Цитата:
А вообще исключительно по моему мнению если переписать ядро Колибри на Си оно возможно не сильно может потерять в скорости, но разбухнет в размерах и потеряет привлекательность - станет серой обыденностью.


Идея состоит не в том, чтобы переписать KolibriOS на C, а в том, чтобы использовать C-версию как трамплин при переходе на другую архитектуру (хоть ту же ia-64).

P.S.

Вообще-то у меня есть ещё такая (возможно сомнительная с моральной точки зрения :wink: ) очень отдалённая цель - запустить графическую подсистему KolibriOS в качестве сервера в Minix3 (это отдельное приложение, поэтому "вирус GPL" не распространится на всю Minix3)


Вернуться к началу
СообщениеДобавлено: Сб сен 03, 2011 4:10 pm 
Не в сети

Зарегистрирован: Вс ноя 04, 2007 2:46 am
Сообщения: 390
Мммм, как запаковать Виндовской версией kpack'a ядро? В КОСовском варианте есть галочка "Kernel", а вот как быть с виндузятским вариантом?


Вернуться к началу
СообщениеДобавлено: Сб сен 03, 2011 4:29 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Ядро пакуется kerpack-ом.


Вернуться к началу
СообщениеДобавлено: Сб сен 03, 2011 4:35 pm 
Не в сети

Зарегистрирован: Вс ноя 04, 2007 2:46 am
Сообщения: 390
Я знал, но я не нашел kerpack для Windows. Я подумал, что раз kpack в KOS имеет галочку "kernel", то его научили паковать и приложения, и ядро.


Вернуться к началу
СообщениеДобавлено: Сб сен 03, 2011 4:42 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
kerpack для Windows не делали.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 58 сообщений ]  На страницу 1 2 3 4 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB