Mario79
Я делаю драйвер для COM портов. Для тестов занял прерывание от СОМ1
Если есть исходники основного ядра можно взять оттуда sys32.inc
Fast System Call
<Lrz>
На твоём Бартоне есть сетевой чип?
На твоём Бартоне есть сетевой чип?
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
Первый раз:
Please wait
Unsupported <- Fast call (SYSENTER)
Unsupported <- Fast call (SYSCALL)
00000000C17C18A <- Interrupt
Второй раз:
Please wait
Unsupported <- Fast call (SYSENTER)
Unsupported <- Fast call (SYSCALL)
00000000C1C1177 <- Interrupt
Mario79
Похоже что быстрые вызовы появилтсь в PII. В Pentium Pro их ещё нет
Похоже что быстрые вызовы появилтсь в PII. В Pentium Pro их ещё нет
Serge
Мне кажется полностью отказываться от вызовов с помощью прерываний не стоит.
Мне кажется полностью отказываться от вызовов с помощью прерываний не стоит.
Сделал оптимизацию
было sysenter 27773a18
стало sysenter 15FA6750
оптимизация
было 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
Mario79
Согласен.
Согласен.
Serge:
В таком варианте значеия возвращаемые ядром в ecx, edx портятся.
В таком варианте значеия возвращаемые ядром в ecx, edx портятся.
Ghost
Я об этом не подумал
Замедление может быть связано с xchg
А если такой варинт
Я его не проверял.
Я об этом не подумал
Замедление может быть связано с xchg
А если такой варинт
Code: Select all
cli
mov esp, [esp]
mov [esp+4], edx
mov [esp+8], ecx
mov edx, [esp-4]
lea ecx, [esp+4]
Ghost
Есть программа чтобы проверить вызовы АРМ в Колибри ? Только не гашение монитора.
Есть программа чтобы проверить вызовы АРМ в Колибри ? Только не гашение монитора.
Да есть, встроенный, от NVidea у нас с Heavyiron матери идентичные. Epox 8rda3I<Lrz>
На твоём Бартоне есть сетевой чип?
<Lrz>
У него работает а у тебя нет ?
AqwAS проверял загрузку, у него #375 уже не работала
У него работает а у тебя нет ?
AqwAS проверял загрузку, у него #375 уже не работала
У меня не бартон, но не думаю, что они сильно различаются. Тут частенько причина бывает в самом неожиданном месте: у меня, например, есть экземпляр CD-RW-привода, который если висит один на шлейфе подвешивает коос на загрузке. Если повесить на шлейф еще один, то все ок... Так что неизвестно, где собака зарыта 
Ghost
Можно упростить алгоритм и ускорить его если вынести pl0 стек из памяти ядра. Зарезервировать для стека n килобайт в вершине памяти приложения тогда адрес стека будет известен заранее. Там же можно разместить TSS и битовую карту ввода-вывода при программном переключении задач. Или вообще оставить один TSS в ядре для всех программ. Он нужен только чтобы загрузить правильный стек при смене привилегий, а если указатель всегда одинаков то хватит и одного TSS.
Битовая карта выравнивается на границу страницы и защищается от записи. При запуске системы создаются две дефолтные страницы которые копируются всем приложениям. Если программа резервирует порт, то будет обращение к карте на запись и страничное нарушение. Обработчик определит адрес и создаст копию страницы.
Можно упростить алгоритм и ускорить его если вынести pl0 стек из памяти ядра. Зарезервировать для стека n килобайт в вершине памяти приложения тогда адрес стека будет известен заранее. Там же можно разместить TSS и битовую карту ввода-вывода при программном переключении задач. Или вообще оставить один TSS в ядре для всех программ. Он нужен только чтобы загрузить правильный стек при смене привилегий, а если указатель всегда одинаков то хватит и одного TSS.
Битовая карта выравнивается на границу страницы и защищается от записи. При запуске системы создаются две дефолтные страницы которые копируются всем приложениям. Если программа резервирует порт, то будет обращение к карте на запись и страничное нарушение. Обработчик определит адрес и создаст копию страницы.
У меня в системе только один HDD , DVD у меня USB т.е. у меня только FDD and HDD
Who is online
Users browsing this forum: No registered users and 5 guests