ZX Club #05
29 октября 1997

Club IM2 - Терминология и теоритические аспекты прерываний и многозадачности.

<b>Club IM2</b> - Терминология и теоритические аспекты прерываний и
 многозадачности.
       ╔═════════════════════════╗
       ║  IM2 И МНОГОЗАДАЧНОСТЬ  ║▒
       ╚═════════════════════════╝▒
         ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

  (C) Dr.Gluker                     1997
  ──────────────────────────────────────

      В статье "клуб im2"  электронной га-
зеты  ZX_Club N4  возникла некая  термино-
логическая  путаница, требующая,  по  мое-
му скромному  мнению, некоторого разъясне-
ния.  Напомню, речь  шла  о  прерываниях и
многозадачности.   В данной статье я хотел
бы  коснуться  сугубо  терминологических и
теоретических аспектов данных вопросов.

      Во-первых:  прерывания - всего  лишь
механизм, который может  использовать  при
своей  работе  прикладная программа  (или,
говоря другим  языком, задача) и, по боль-
шому счету, никакого  отношения к многоза-
дачности  не  имеющие; а   многозадачность
 - это  возможность  выполнять  две (и бо-
лее) независимых (!) прикладных  программы
в одно и тоже время. Другое дело, что пре-
рывания  по таймеру, чем на самом  деле  и
является  im 2, могут  использоваться  как
механизм для многозадачности.

      Почему же  невозможно считать выпол-
няемые в прерывания  процедуры независимы-
ми  задачами?  Все  дело в самом механизме
прерываний.   Данный вопрос можно переина-
чить:  почему  прерывания  назвали  именно
прерываниями.  Собственно, ответ находится
в  самом вопросе. Преывания  прерывают вы-
полнение  основной  (!) программы  для вы-
полнения некоей кратковременной процедуры,
которую  нельзя  вставить в основной  цикл
программы. При этом ( по соглашению )  об-
работчик прерывания должен сохранять  сре-
ду  основной программы и после выполнения,
восстанавливать  оную.  Это  делает каждый
программист, сохраняя  на  стеке  регистры
командой push и восстанавливая их командой
pop.

      Другое дело - задача,  ее можно раз-
бить  на три основных раздела:  програмный
стек,  сегмент  испоняемого кода,  сегмент
данных.  Любая полноценная, рабочая  прог-
рамма  всегда  (!)  несет в себе три  этих
элемента.  Более того, процессор Z80 может
выполнять  лишь  одну  задачу и иметь лишь
один стек:  имеется в виду  аппаратная ре-
ализация. К примеру, Motorolla 68000 имеет
два стека и возможность  их  переключения,
поэтому   реализовать  многозадачность  на
Z80  можно только  программным  путем, ис-
пользуя  при  этом механизм прерываний  от
таймера.

      Далее:  что бы  окончательно  прояс-
нить  вопрос  с  прерываниями,  необходимо
коснуться  некоторых  аспектов  аппаратной
реализации Speccy.  Дело в том, что  аппа-
ратные прерывания на нашем любимце сделаны
очень негибко,  я бы даже сказал, - спустя
рукава,  в  связи  с чем мы и лишены очень
многих  возможностей, которые обеспечивают
стандартные прерывания. То есть, на Speccy
возможен  лишь  один достойный  упоминания
тип  прерываний - im2,  который  случается
каждую  1/50  секунды, и третьего не дано.
Так  как  нам  заранее  известна  тактовая
частота  процессора  (3.5 Мгц),  можно од-
нозначно просчитать, сколько тактов сможет
сделать  процессор  за  одно прерывание, а
именно - 70000.  Имеется  в  виду  вариант
Пентагон,  на  других  машинах  может быть
меньше, но не менее  68000.  О чем нам го-
ворит  это  "магическое" число?  А дело  в
том,  что  чем  больше  тактов израсходуют
процедуры  в прерывании, тем меньше их ос-
танется  основной программе, и не исключен
вариант,  когда прерывания  "скушают"  все
машинные циклы и ни одного "тика" не оста-
вят  основной  программе, что и приведет к
ее остановке.

      Теперь, вновь возвращаясь к многоза-
дачности,  разберем теоретическую реализа-
цию оной на примере многозадачного  Бейси-
ка. Итак, нам необходимо чтобы Speccy враз
исполнял две независимые (!)  Бейсик-прог-
раммы.   Для  реализации  нам  потребуются
следующие механизмы:

 -сохраннение среды выполняемой задачи в
  расширенной памяти;

 -восстановление  среды задачи и выполне-
  ние оной;

 -механизм разделения машинного времени
  между двумя задачами.

Итак,  что же необходимо сохранять? Да всю
систему!     Т.е., -  область  переменных,
текст программы, область стеков программы.
С  восстановлением проблем, вроде бы, тоже
быть  не  должно.     Тогда стоит обратить
внимание  на механизм  переключения задач.
Вот здесь то нам и пригодятся im2.   Орга-
низовываем  счетчик, который устанавливаем
на  определенное число прерываний, в тече-
нии которых первая программа  будет выпол-
няться, и опрашиваем его. Как только время
приспело,  мы  сохраним все машинные пара-
метры, остановим  задачу, скопируем  ее  в
недоступную (!) другим программам  область
памяти,  загрузим  следующую  программу  и
запустим  ее  на  выполнение с прерванного
момента.  Как видите, реализовать многоза-
дачный  Бейсик не так уж и сложно - в тео-
рии.  А на практике  придется  столкнуться
с  бездной  проблем:     нехватка  памяти,
очень  медленное переключение,   замедлен-
ное выполнение каждой программы,   ограни-
чение на занимаемый объем памяти,   невоз-
можность использования  процедуры  im2,  и
т.д., и т.п. Таким образом, я могу Вам га-
рантировать  бесполезность  и  бессмыслен-
ность такой затеи.

      Собственно говоря,  это все, что мне
хотелось  сказать  о  многозадачности  на
"старине" Speccy.

                .оооО
                (   )     Оооо.
            ----- (------(   )----
                  _)      ) /
                          (_/



Другие статьи номера:

От редакции - К процессу создания газеты подключилась группа Demention. Вопрос об электронном журнале на Алтае.

Soft group - Кое-что о подключении принтера. Порты устройств компьютера ZX-SPECTRUM.

Железо - О Covox'ах, General Sound'е и Sound Drive 2.

ZX-Поппури - Процедура "OPTION SELECTOR". О процедуре "Звезды", используемой в газете.

Club IM2 - Терминология и теоритические аспекты прерываний и многозадачности.

Club IM2 - Конкурс на лучший сценарий игры типа DIZZY.

Virus - О конкурсе по игре "Вирус 2".

Enjoy - Анекдоты...


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Как батон стал жирафом - краткий словарь школьных кличек.
The Prodigy - Мы вернулись, мы в ярости!
Рек-тайм - Реклама и объявления ...
Visual FDD - Индикатор для дисковода.
Обзор ассемблеров - Edas 3.3, Assembler for Scorpion, XAS, ZX-ASM, Alasm 2.8, Master Assembler v.1.1, TASM 4.1.

В этот день...   10 ноября