Page 104 - 4875
P. 104

визначення адреси блоку (по його ідентифікатору) і звільнення блоку –
                           приблизно аналогічно до роботи драйверів EMS чи XMS.
                                  Щоб     реалізувати    багатофункціональність,    прийдеться
                           запустити активну резидентну програму, що перехопить переривання
                           IRQ0 і по кожному такту системного таймера буде по черзі відбирати
                           керування від кожного із запущених процесів і передавати наступному.
                           Практично  ніхто  не  реалізує  повноцінну  багатофункціональність  в
                           DOS, коли кожен процес має власну пам’ять і не може звертатися до
                           пам’яті  іншого  процесу, —  для  цього  існує  захищений  режим,  але
                           зустрічаються  досить  прості  реалізації  для  полегшеного  варіанту
                           багатофункціональності — переключення ниток.
                                  Нитка — це процес, що використовує той же код і ті ж дані,
                           що й інші такі ж процеси в системі, але відрізняється від них вмістом
                           стеку  і  регістрів.  Тоді  резидентна  програма-диспетчер  по  кожному
                           перериванню  таймера  буде  зберігати  регістри  перерваної  нитки  в  її
                           структуру,  зчитувати  регістри  наступної  нитки  по  черзі  і  повертати
                           керування,  а  структури  і  стеки  всіх  ниток  будуть  зберігатися  в
                           довільній  спеціально  виділеній  загальнодоступній  області  пам’яті.
                           Зазначена  програма  також  повинна  підтримувати  кілька  викликів  за
                           допомогою  програмного  переривання —  створення  нитки,  видалення
                           нитки і, наприклад, передача керування наступної нитки, поки поточна
                           нитка  знаходиться  в  стані  чекання.  Це  призводить  до  складності
                           написання  самих  ниток,  тому  що  усі  вони  використовують  загальний
                           код. Абсолютно усі в коді нитки повинні бути повторно вхідними. Крім
                           того, нитки створюють безліч проблем, зв'язаних із синхронізацією, що
                           призводить до того, що в коді всіх ниток, або в  основному резиденті
                           прийдеться реалізовувати семафори, черги, сигнали, бар'єри і всі інші
                           структури, що зустрічаються в реальних пакетах для роботи з нитками.
                                  В  основному  резидентні  програми  використовуються  для
                           розширення    можливостей    операційної   системи,   зокрема   для
                           обслуговування  зовнішніх  периферійних  пристроїв  або  реалізації
                           пасивного мультипрограмування.
                                  Спочатку  дискові  операційної  системи  були  односторонніми
                           (MS-DOS).  Використання  програм  TSR  в  цьому  випадку  дозволяє
                           здійснювати   переключення     між   програмами    (звичайного    та


















                                                           103
   99   100   101   102   103   104   105   106   107   108   109