Page 2 of 3
Re: Обращение к разработчикам KolibriOS
Posted: Sat Oct 06, 2007 4:01 pm
by alman
Mario79 wrote:
Ты хочешь доказать, что эмуляция приложений Колибри для твоего ядра будет быстрей, чем работа приложения в самой Колибри с использованием программного прерывания?
Вряд-ли эмуляция будет быстрей. Всё-ж таки эмуляция. Тем более что при эмуляции всё равно будет использоваться Int, да плюс overhead на его обработку.
Mario79 wrote:Тогда что ты возразишь насчет использования FAST CALL, которое уже реализовано для Колибри?
Чего-то я не верю, что микроядро обеспечит более быструю работу приложений...
Ничего не возражу против FastCall. Это правильный путь.
Само по себе микроядро не обеспечит более быструю работу приложений, глупо было бы спорить.
Однако, я верю в то, что быстродействие зависит прежде всего от алгоритма, затем от реализации и уже затем от языка программирования. Приведу гипотетический пример, когда программа на Бейсике может оказаться быстрее программы на ассемблере:
Допустим нам необходимо найти строку в массиве из нескольких миллионов записей. Программа на ассемблере при этом честно сравнивает каждую строку, программа на Бейсике использует алгоритм хеширования. Не факт, что в этом споре победит ассемблер.
Re: Обращение к разработчикам KolibriOS
Posted: Sat Oct 06, 2007 4:40 pm
by Mario79
alman
Допустим нам необходимо найти строку в массиве из нескольких миллионов записей. Программа на ассемблере при этом честно сравнивает каждую строку, программа на Бейсике использует алгоритм хеширования. Не факт, что в этом споре победит ассемблер.
А вот не надо ля-ля! Это уже соревнование алгоритмов, а не языков программирования! На ассемблере тоже можно реализовать хеширование, конечно, это потребует дополнительных человеко-часов или использования готовой библиотеки.
Re: Обращение к разработчикам KolibriOS
Posted: Sat Oct 06, 2007 4:51 pm
by bw
Mario79, перечитай два последних поста.
> Однако, я верю в то, что быстродействие зависит прежде всего от алгоритма, затем от реализации и уже затем от языка программирования.
p.s. alman, отличное описание проблемы, побольше бы таких ;-), а то самому лень, да и некогда разбираться.
..bw
Re: Обращение к разработчикам KolibriOS
Posted: Sat Oct 06, 2007 5:29 pm
by andrew_programmer
Mario79 всё правильно сказал.
Сначала реализовываеш на Basic-е алгорит хеширования, а на ассемблере используем лобовой метод, а потом пытаемся делать вывод о скорости ассемблера и бейсика.
Запомните раз и навсегда - оптимально написанная программа на ассемблере ВСЕГДА быстрее своих аналогов на языках высокого уровня(ЯВУ). А теперь подумайте, почему компиляторы ЯВУ неумеют думать также оптимально, как человек ассемблерщик.....
Re: Обращение к разработчикам KolibriOS
Posted: Sat Oct 06, 2007 5:49 pm
by Mario79
bw
Я не оспаривал ту строку, которую ты привел. Я оспаривал сам пример как несоответствующий утверждению, что Бейсик может быть быстрей Ассемблера.
Так как утверждалось о преимуществе языка при разных алгоритмах - а это уже неравноправное сравнение!
Re: Обращение к разработчикам KolibriOS
Posted: Sat Oct 06, 2007 7:35 pm
by alman
Ребята, я не говорил что Бейсик быстрее Ассемблера. Я сказал что в теории, я подчёркиваю - в теории, программа на Бейсике может быть быстрее программы на Ассемблере.
Впрочем, не будем спорить - жизнь так коротка, чтобы проводить её в спорах.
Re: Обращение к разработчикам KolibriOS
Posted: Sun Oct 07, 2007 11:01 am
by HORROR
на любом языке можно состряпать ТАКОЙ способ решения задачи, что умножение 2х2 будет идти годами....
Кроме того, есть понятие "качество кода", когда один и тотже алгорим, на одном и том же языке но написанный разными людьми дает разные временные показатели (кто-то чуть умнее, кто-то чуть хитрее, а кто-то уже делал и вылизывал это...)
Re: Обращение к разработчикам KolibriOS
Posted: Sun Oct 07, 2007 11:22 am
by Mario79
HORROR
на любом языке можно состряпать ТАКОЙ способ решения задачи, что умножение 2х2 будет идти годами....
Я слышал однажды от одних знакомых, что 2+2 через интегралы решается средним почерком на 2 страницы текста аж...
Re: Обращение к разработчикам KolibriOS
Posted: Sun Oct 07, 2007 12:27 pm
by HORROR
Вот и я о том же
Re: Обращение к разработчикам KolibriOS
Posted: Sun Oct 07, 2007 7:36 pm
by alman
Чего-то я туплю. Скачал сырцы FASM 1.67.23. Собрал его для Хамелеона. Проверяю - падает.
Смотрю, где падает - в libc функции fputc. Ага, значит параметры функции передали неправильные.
Смотрю код fasm/libc/system.inc -
display_string:
lodsb
or al,al
jz string_displayed
mov dl,al
call display_character
jmp display_string
string_displayed:
ret
display_character:
movzx edx,dl
ccall fputc,edx,[con_handle]
ret
Ага, в [con_handle] лежит
единица. Ну да, понимаю, файловый дескриптор для stdout.
Но не тут-то было. Делаем man fputc. (Можно и в MSDN посмотреть.)
int fputc(inc c, FILE * stream);
То есть должен передаваться не файловый дескриптор 1 (stdout), а указатель на структуру типа FILE.
Ну, думаю, ошибка у меня. Делаю под Linux в точности как сказано в документации:
gcc fasm.o -o fasm
И запускаю полученный файл уже под Linux, который при запуске странным образом падает и под Линуксом.
Может кто знает как исправить? Можно, конечно, заменить fputc на putc, но на большинстве POSIX систем putc реализован как макрос putc(c, stdout). Соответственно, fasm не соберётся.
В принципе, можно заменить неправильный вызов fputc(c, 1) на правильный write(1, &c, 1), но интересно, как много таких мест в исходном коде fasm?
Re: Обращение к разработчикам KolibriOS
Posted: Sun Oct 07, 2007 8:16 pm
by mike.dld
man stdio
Code: Select all
A file with associated buffering is called a stream (see
intro(3)) and is declared to be a pointer to a defined type
FILE. The fopen(3C) function creates certain descriptive
data for a stream and returns a pointer to designate the
stream in all further transactions. Normally, there are
three open streams with constant pointers declared in the
<stdio.h> header and associated with the standard open
files:
stdin standard input file
stdout
standard output file
stderr
standard error file
The following symbolic values in <unistd.h> define the file
descriptors that will be associated with the C-language
stdin, stdout and stderr when the application is started:
STDIN_FILENO Standard input value 0 stdin
STDOUT_FILENO Standard output value 1 stdout
STDERR_FILENO Standard error value 2 stderr
Re: Обращение к разработчикам KolibriOS
Posted: Sun Oct 07, 2007 8:48 pm
by alman
fputc по стандарту принимает в качетсве аргумента указатель на структуру данных типа FILE.
Попробуйте запустить такой код:
Code: Select all
#include <stdio.h>
int main()
{
fputc( '@', STDOUT_FILENO );
return 0;
}
Он не скомпилится C++ компилятором, а если компилировать классическим C, то программа соберётся, но при запуске упадёт.
А вот такая программа работать будет:
Code: Select all
#include <stdio.h>
int main()
{
fputc( '@', stdout );
return 0;
}
В случае fasm, используется первый вариант.
Если не верите, загляните в /usr/include/stdio.h и посмотрите как определена структура FILE.
Делов в том, что
stdin,
stdout и
stderr создаются при инициализации библиотеки
stdio. Причём, делается это довольно тупо. В стандарте POSIX первые три дескриптора у любого процесса указывают на стандартные устройства ввода, вывода и вывод ошибок.
Выглядит это приблизительно так:
#include <stdio.h>
FILE * stdin;
FILE * stdout;
FILE * stderr;
int initialize_stdio_library()
{
stdin = calloc( sizeof(FILE), 1 );
stdout = calloc( sizeof(FILE), 1 );
stderr = calloc( sizeof(FILE), 1 );
stdin->file_descriptor = STDIN_FILENO;
stdout->file_descriptor = STDOUT_FILENO;
stderr->file_descriptor = STDERR_FILENO;
/* и так дале */
}
Как говорится, почувствуйте разницу.
Re: Обращение к разработчикам KolibriOS
Posted: Mon Oct 08, 2007 1:12 pm
by alman
Вылечилось просто. Пришось заменить строку
mov [con_handle], 1
на
mov ebx, stdout
mov eax,[ebx]
mov [con_handle], eax
и, соответственно, добавить
extrn stdout
На удивление, всё остальное заработало сразу.
Re: Обращение к разработчикам KolibriOS
Posted: Mon Oct 08, 2007 7:49 pm
by diamond
diamond wrote:Есть встречное предложение - использовать CRT на асме для программ Колибри (dosbox, скажем) (конечно, если оно в итоге заметно меньше, чем CRT на Си). Переработку menuetlibc при условии наличия большей части Си-библиотеки я могу обеспечить сам. Как было справедливо замечено, шансы на долгую память у кода и разработчика повышаются при использовании в двух ОСях.
Похоже, меня проигнорировали...
alman wrote:Коллеги, вчера реализовал поддержку исполняемых файлов формата MENUET/KOLIBRI в Xameleon.
В результате мне удалось запустить распакованую программу TEST (прогу взял с диска Koilbri). Это значит, что программы, собранные FASM, могут запускаться на Xameleon.
В результате, получил #General Protection fault на первом вызове Int 0x40. Впрочем, это совершенно нормальное поведение.
В принципе, можно пойти двумя путями:
1. Реализовать поддержку системных вызовов Kolibri в Xameleon.
2. Написать DevKit на FASM, с поддержкой системных вызовов Xameleon.
Можно использовать и оба пути.
Это было завуалированное предложение написать эмулятор (или что-нибудь подобное) Колибри под Xameleon к разработчикам с этого форума? На данный момент нет даже эмулятора под Linux, а Linux - очень известная система, у которой в том числе и на этом форуме есть сторонники! (Кстати, там для эмуляции Колибри даже ядро модифицировать не надо.)
Re: Обращение к разработчикам KolibriOS
Posted: Mon Oct 08, 2007 8:20 pm
by k@sTIg@r
diamond wrote:(Кстати, там для эмуляции Колибри даже ядро модифицировать не надо.)
Вот тут подробней....что тогда для этого нужно?
Насколько я помню там столкнулись с какой-то проблемой