Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Многозадачность

5.4K
18 марта 2004 года
Grey Samurai
9 / / 18.03.2004
Люди, помогите плиз!!!
Никак не получается реализовать многозадачность...


В общем суть такова что при инициализации всего этого хозяйства я писал стото вроде этого:
mov ax, 0x20
ltr ax
за этим идет код выводящий графику в левую часть экрана - зацыклено... код первой задачи...

таймер должен переключать задачи... дальним переходом на селектор 0х28, но что то работает не так... не хватает ума...

короче не получается у меня переключаться с задачи на задачу... хотя все остальное работает превосходно....

люди - кто программировал ОС на ассемблере - подскажите плиз на примере... буду очень благодарен...

И вопрос на засыпку - можно реализовать многозадачность без использования TSS дескрипторов
4.2K
18 марта 2004 года
nvm
40 / / 24.12.2003
Цитата:
Originally posted by Grey Samurai
Люди, помогите плиз!!!
Никак не получается реализовать многозадачность...


Один пример переключения задач я разместил у себя
на сайте.

Цитата:
И вопрос на засыпку - можно реализовать многозадачность без использования TSS дескрипторов


Можно. Но это сложнее.

7.1K
25 марта 2004 года
Surax
4 / / 25.03.2004
Цитата:
Originally posted by Grey Samurai
Люди, помогите плиз!!!
Никак не получается реализовать многозадачность...


Могу сказать одно: зайди на сайт Менуэт ОС:
menuet.narod.ru
От туда скачай исходники оси и гляди, сколько влезет. :) Там очень, ОЧЕНЬ много всего полезного. Исходники не плохие.

447
25 марта 2004 года
CodeWorld
315 / / 05.10.2003
давить менует! МОНОЛИТНОЕ ядро ПОЛНОСТЬЮ НА АСМЕ? реал шит... и всего практически может быть 26 задач.. хотя сам Вилле сказал мне мол 100 - пиздешь, потом ваще вирт памяти нет, хоршо хоть бля не сегментно енто все организовал
5.4K
25 марта 2004 года
Grey Samurai
9 / / 18.03.2004
Цитата:
Originally posted by Surax

Могу сказать одно: зайди на сайт Менуэт ОС:
menuet.narod.ru
От туда скачай исходники оси и гляди, сколько влезет. :) Там очень, ОЧЕНЬ много всего полезного. Исходники не плохие.



Исходник Менуэта копал перекопал, много ценного для себя оттуда изъял... :) но у меня не получилось реализовать многозадачность все равно... толи в дескрипторах TSS, толи в еще в чем то... может оно не хочет работать без реализации страничной памяти...

Найти бы хотя бы маленьки пример на асме - где существует к примеру две задачи которые переключаются по таймеру...

А поповоду Менуэта - мне не нравится как она реализована... хотя можно от туда взять много полезных вещей...

Цитата:
давить менует! МОНОЛИТНОЕ ядро ПОЛНОСТЬЮ НА АСМЕ? реал шит... и всего практически может быть 26 задач.. хотя сам Вилле сказал мне мол 100 - пиздешь, потом ваще вирт памяти нет, хоршо хоть бля не сегментно енто все организовал



В менуэте может быть, судя по коду - 120 процесов/задач

447
26 марта 2004 года
CodeWorld
315 / / 05.10.2003
>хотя можно от туда взять много полезных вещей...
тока взять =) но ни как полезного от всей оси нету
>В менуэте может быть, судя по коду - 120 процесов/задач
нехера.. до 7.6 было так

0x90000 - Сюда загружается файл

Заголовок файла

+0 -24 db 'MENUET00' ; 8 byte id
+8 -20 dd 38 ; required os (место загрузки в память)
+12 -16 dd START ; program start (смещение START)
+16 -12 dd I_END ; program image end (смещение I_END)
+20 -8 dd 0x100000 ; reguired amount of memory
+24 -4 dd 0x00000000 ; reserved=no extended header

+28 -0 START:

Стартовая область програм начинается с 0x800000 С адреса 0xfb00 область в 256 байт ответственная каждым байтом за запущеный процесс, вход в область начинается с 8 (Почему так не знаю)
Если имеем два процесса запущенных в системе один за другим, то:

0xfb08 01 (Указывает что процесс уже занимает область памяти c 0x800000)
0xfb09 01 (Указывает что процесс уже занимает область памяти c 0x800000+0x100000)
0xfb0a 00 Область памяти 0x800000+0x200000 свободна

Нетрудно догадаться что на каждый процесс отводится по 1 Мб памяти начиная с области 0x800000, т.е. 8Мб, при достижении 27Мб новые процессы в системе запускаться не будут ;-(
Таким образом всего (27-8)= 19 процессов максимум
Задача грузится в область памяти вместе с заголовком поэтому простой способ получить доступ к абсолютному адресу загрузки - mov eax, START-20
5.4K
26 марта 2004 года
Grey Samurai
9 / / 18.03.2004
Цитата:
Originally posted by CodeWorld
...
Нетрудно догадаться что на каждый процесс отводится по 1 Мб памяти начиная с области 0x800000, т.е. 8Мб, при достижении 27Мб новые процессы в системе запускаться не будут ;-(
Таким образом всего (27-8)= 19 процессов максимум
...



Да откуда ты взял, что при достижении 27 метров новы процессы в системе запускаться не будут... из вышенаписанного я этого не понял...

447
26 марта 2004 года
CodeWorld
315 / / 05.10.2003
а я знаю? спроси у Вили или шарся в сорцах, под дебагом я глядел что после 27 метров толи пул толи че, но что то там динамичное обитает... И на практике ось просто виснет на 20 задачи
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог