|
ZX Club
#05
29 октября 1997 |
|
Club IM2 - Терминология и теоритические аспекты прерываний и многозадачности.

╔═════════════════════════╗
║ 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.
.оооО
( ) Оооо.
----- (------( )----
_) ) /
(_/
Другие статьи номера:
Похожие статьи:
В этот день... 1 ноября
Dnieprobite #03,
ACNews #13,
ZX Time #10,
Echo #07,
Funeral #1.5,
Info Guide #02,
ZX Guide #02,
Plutonium #14,
Crossroads #07,
ZX Club #09,
Black Crow #02,
Spectrum Expert #01,
C-Net Week #03,
Maximum #46,
Review #01,
Anigdot #46,
Nicron #05,
Spectrum Land #02,
Crysral Dream #01,
Platinum #02,
Oberon #02,
Echo #01,
Emulate #03,
ZX Format #01,
Speccy #02,
ZX Panorama #01