А, вон ты про что.
а сейчас, стало быть, мышь таки-замирает на целых 200мс?
ну это некрупная фигня, стрелку можно отрисовывать и по основному таймерному прерыванию, не меняя контекста.
Работа планировщика задач
Время не считал, больше-меньше, но если запустишь пару-тройку обжор, тоart_zh wrote:а сейчас, стало быть, мышь таки-замирает на целых 200мс
Вот этого делать как раз нежелательно, мы в свое время с Сергеем это обсуждали. Обработчик таймера должен занимать минимум времени по вполне объективным причинам.art_zh wrote:ну это некрупная фигня, стрелку можно отрисовывать и по основному таймерному прерыванию, не меняя контекста.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Если нужен длинный квант, надо добавить две переменные в APPDATA, кол-во тиков в кванте и countdown счетчик тиков и делать декремент в irq0. Соответственно после после переключения задачи обновляем счётчик и по новой.- вместо сброса/установки единственного бита - проводить декремент содержимого DONT_SWITCH. чтобы прожорливые приложения могли запрашиавать (и по возможности получать) более высокий приоритет, не переключаясь (максимум) в течение 10 квантов.
А для этого уже нужен планировщик с приоритетами. Сейчас у нас кооперативная коммунистическая диета. Все приложения кушают часто, но по-малу. Если менять длительность кванта и частоту переключения задач, надо вызывать планировщик после каждого обработчика irq.Как насчет перемещения указателя курсора?
Serge wrote:А для этого уже нужен планировщик с приоритетами. Сейчас у нас кооперативная коммунистическая диета. Все приложения кушают часто, но по-малу. Если менять длительность кванта и частоту переключения задач, надо вызывать планировщик после каждого обработчика irq.
Spoiler:
Mario_r4 wrote:традиция у нас такая каждый год мы собираемся чтобы обсудить подробности реализации: буфера обмена, таймера и загрузчика ОС...
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Ага. Любое изменение в одной части кода потребует изменений в других частях.
Mario
Обещанный макет квантового дегенератора:
отгрызает 1.6млн тактов (=1мс на моем проце) от текущего кванта
т.е. в твоей версии планировщика - приватизирует (безвоздмездно!) время следующего "длинного" процесса.
поставь время задержки 9миллисекунд, а потом запусти своего обжору.
и шо, это таки-не багофича?
Обещанный макет квантового дегенератора:
Code: Select all
use32
org 0
db 'MENUET01'
dd 1, START, VOILA
dd 0x1000, 0x1000, 0, 0
START:
rdtsc
add eax, 1600000 ; = 1миллисекунда
jnc @f
inc edx
@@:
mov [keep_eax], eax
mov [keep_edx], edx
wait_1ms:
rdtsc
cmp edx, [keep_edx]
jb wait_1ms
cmp eax, [keep_eax]
jb wait_1ms
mov eax, 68
mov ebx, 1
int 40h
jmp START
keep_eax dd 0
keep_edx dd 0
VOILA:
т.е. в твоей версии планировщика - приватизирует (безвоздмездно!) время следующего "длинного" процесса.
поставь время задержки 9миллисекунд, а потом запусти своего обжору.
и шо, это таки-не багофича?
А на предыдущем варианте значит все замечательно?art_zh wrote:MarioОбещанный макет квантового дегенератора:
Ты приведи пример реального приложения. А то извратных приложений много можно насочинять - на то у тебя и хитрый изворотливы мозг.
Багрепортов об изменении работы существующих приложений не было пока.
З.Ы. Diamond вообще вирус написал - мне чего теперь стреляться? Я не офицер чтобы стреляться.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Старый планировщик ГАРАНТИРОВАЛ ЛЮБОМУ приложению ЗАКОННЫЕ 10мс времени.
Значит сриншоты я в Gimp нарисовал?art_zh wrote:Старый планировщик ГАРАНТИРОВАЛ ЛЮБОМУ приложению ЗАКОННЫЕ 10мс времени.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Твои скриншоты подтверждают выполнение этой гарантии: времяёмкие приложения получали свои 10мс чистого времени, а если кому повезет - тогда почти 20мс.
А слабо выложить скриншоты с новым планировщиком и парой дегенератор+обжора ?
А слабо выложить скриншоты с новым планировщиком и парой дегенератор+обжора ?
Не слабо, но времени не хватает. Как будет время посмотрю и заскриню.art_zh wrote:А слабо выложить скриншоты с новым планировщиком и парой дегенератор+обжора ?
Однако 20 мс отдавать это неправильно, при заявленном равноправии.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Есть впрос: "А вот 'inc edx', edx от какого значения инкременируется?"art_zh wrote:Mario
Обещанный макет квантового дегенератора:отгрызает 1.6млн тактов (=1мс на моем проце) от текущего квантаCode: Select all
use32 org 0 db 'MENUET01' dd 1, START, VOILA dd 0x1000, 0x1000, 0, 0 START: rdtsc add eax, 1600000 ; = 1миллисекунда jnc @f inc edx @@: mov [keep_eax], eax mov [keep_edx], edx wait_1ms: rdtsc cmp edx, [keep_edx] jb wait_1ms cmp eax, [keep_eax] jb wait_1ms mov eax, 68 mov ebx, 1 int 40h jmp START keep_eax dd 0 keep_edx dd 0 VOILA:
т.е. в твоей версии планировщика - приватизирует (безвоздмездно!) время следующего "длинного" процесса.
поставь время задержки 9миллисекунд, а потом запусти своего обжору.
и шо, это таки-не багофича?
Да и значение "1600000" - это всего лишь частное значение какой-то частной машины.
По первому вопросу, я знаю, что возвращает "rdtsc".
Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!
Code: Select all
add eax, 1600000 ; = 1миллисекунда
jnc @f
inc edx
@@:
Code: Select all
add eax, 1600000 ; = 1миллисекунда
adc edx, 0
art_zh, в случае выдуманного примера становится хуже, в типичных случаях становится лучше. Всем хорошо сделать нельзя, значит, нужно делать хорошо в типичном случае. Приложения, отжирающие столько времени, сколько им дали, типичны и встречаются на каждом шагу - те же демки - а приложений, действующих подобно viewtopic.php?p=48637#p48637 , на практике не встречается. Выбор очевиден.
Сделаем мир лучше!
Mario
Это воровать чужие миллисекунды неправильно.
А чем плох +10мс бонус?
Это ведь сэкономленное время, добровольно предоставленное (именно как бонус!) вежливыми предыдущими процессами.
Artyom
инкремент к текущему edx.
сам edx еще очень нескоро переполнится
Serge
так на 2 байта короче.
CleverMouse et al.
Невыдуманные примеры: традиционно-вежливые RT-процессы (в т.ч. неопределенно-длинные: диски, сеть и звук).
Это воровать чужие миллисекунды неправильно.
А чем плох +10мс бонус?
Это ведь сэкономленное время, добровольно предоставленное (именно как бонус!) вежливыми предыдущими процессами.
Artyom
инкремент к текущему edx.
сам edx еще очень нескоро переполнится
Serge
так на 2 байта короче.
CleverMouse et al.
Невыдуманные примеры: традиционно-вежливые RT-процессы (в т.ч. неопределенно-длинные: диски, сеть и звук).
Last edited by art_zh on Thu May 16, 2013 8:29 pm, edited 2 times in total.
Евангелие от Иоанна: стих 1[/size]
Code: Select all
; В начале было Слово:
B32: mov ax, os_stack ; Selector for os
Who is online
Users browsing this forum: No registered users and 0 guests