Page 4 of 10

Posted: Tue Mar 13, 2007 8:16 am
by Serge
Mario79
Я делаю драйвер для COM портов. Для тестов занял прерывание от СОМ1
Если есть исходники основного ядра можно взять оттуда sys32.inc

Posted: Tue Mar 13, 2007 6:44 pm
by Serge
<Lrz>

На твоём Бартоне есть сетевой чип?

Posted: Tue Mar 13, 2007 8:53 pm
by Mario79
Cyrix 6x86MX - 233

Первый раз:
Please wait
Unsupported <- Fast call (SYSENTER)
Unsupported <- Fast call (SYSCALL)
00000000C17C18A <- Interrupt

Второй раз:
Please wait
Unsupported <- Fast call (SYSENTER)
Unsupported <- Fast call (SYSCALL)
00000000C1C1177 <- Interrupt

Posted: Tue Mar 13, 2007 9:04 pm
by Serge
Mario79

Похоже что быстрые вызовы появилтсь в PII. В Pentium Pro их ещё нет

Posted: Wed Mar 14, 2007 8:40 am
by Mario79
Serge
Мне кажется полностью отказываться от вызовов с помощью прерываний не стоит.

Posted: Wed Mar 14, 2007 8:49 am
by Serge
Сделал оптимизацию

было sysenter 27773a18
стало sysenter 15FA6750

оптимизация

Code: Select all

  if __CPU_type eq p6
        push    ecx
        push    edx
        push    ebp
        mov     ebp, esp
        push    ..ret_point     ; it may be 2 or 5 byte
        sysenter
 ..ret_point:
        pop     edx
        pop     ecx

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        popad
        pop     es ds
        ;-------
;        xchg    ecx, [ss:esp]           ; a aa?oei noaea - app ecx, ecx - app esp + 4
;        sub     ecx, 4
;        xchg    edx, [ecx]              ; edx - return point, & save original edx
;        push    edx
;        mov     edx, [ss:esp + 4]
;        mov     [ecx + 4], edx          ; save original ecx
;        pop     edx

        mov ecx, [esp]
        mov edx, [ecx-4]
        add ecx, 4
        sysexit

Posted: Wed Mar 14, 2007 8:51 am
by Serge
Mario79

Согласен.

Posted: Wed Mar 14, 2007 8:59 pm
by Ghost
Serge:
В таком варианте значеия возвращаемые ядром в ecx, edx портятся.

Posted: Wed Mar 14, 2007 9:23 pm
by Serge
Ghost

Я об этом не подумал :(
Замедление может быть связано с xchg

А если такой варинт

Code: Select all

   cli
   mov esp, [esp]
   mov [esp+4], edx
   mov [esp+8], ecx
   mov edx, [esp-4]
   lea ecx, [esp+4]
Я его не проверял.

Posted: Thu Mar 15, 2007 6:04 am
by Serge
Ghost

Есть программа чтобы проверить вызовы АРМ в Колибри ? Только не гашение монитора.

Posted: Thu Mar 15, 2007 8:51 am
by <Lrz>
<Lrz>
На твоём Бартоне есть сетевой чип?
Да есть, встроенный, от NVidea у нас с Heavyiron матери идентичные. Epox 8rda3I

Posted: Thu Mar 15, 2007 4:47 pm
by Serge
<Lrz>
У него работает а у тебя нет ?

AqwAS проверял загрузку, у него #375 уже не работала

Posted: Thu Mar 15, 2007 7:27 pm
by Heavyiron
У меня не бартон, но не думаю, что они сильно различаются. Тут частенько причина бывает в самом неожиданном месте: у меня, например, есть экземпляр CD-RW-привода, который если висит один на шлейфе подвешивает коос на загрузке. Если повесить на шлейф еще один, то все ок... Так что неизвестно, где собака зарыта :(

Posted: Fri Mar 16, 2007 1:51 am
by Serge
Ghost
Можно упростить алгоритм и ускорить его если вынести pl0 стек из памяти ядра. Зарезервировать для стека n килобайт в вершине памяти приложения тогда адрес стека будет известен заранее. Там же можно разместить TSS и битовую карту ввода-вывода при программном переключении задач. Или вообще оставить один TSS в ядре для всех программ. Он нужен только чтобы загрузить правильный стек при смене привилегий, а если указатель всегда одинаков то хватит и одного TSS.
Битовая карта выравнивается на границу страницы и защищается от записи. При запуске системы создаются две дефолтные страницы которые копируются всем приложениям. Если программа резервирует порт, то будет обращение к карте на запись и страничное нарушение. Обработчик определит адрес и создаст копию страницы.

Posted: Fri Mar 16, 2007 11:03 am
by <Lrz>
У меня в системе только один HDD , DVD у меня USB т.е. у меня только FDD and HDD