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