AMIGA # 1
Стрелка проходит всегда от задач с наивысшим приоритетом (который, кстати, равен 127), к задачам с низшим (равным –128). Поэтому, если задачи с высоким приоритетом требуют массу процессорного времени, то дело может вообще не дойти до обслуживания каких-либо низкоприоритетных задач, если исчерпан лимит времени на исполнение всех имеющихся задач. Поясним на примере. Допустим, в вашей системе установлен гаситель экрана (бланкер), который каждые пару минут начинает рисовать движущиеся кривые на экране, если клавиатура и мышка находятся в покое. В это время вы начинаете закачивать к себе файл по модему и любуетесь на этот процесс, не прикасаясь ни к мышке ни к клавиатуре. Срабатывает бланкер и начинает вырисовывать свои кривые. Если модем у вас — высокоскоростной, а Амига не слишком быстрая (скажем на процессоре 68000/7Мгц), то процессор может быть предельно загружен совместной работой с модемом, а тут на него еще сваливается \"проснувшаяся\" (что это значит, будет объяснено далее) задача по обслуживанию бланкера. Представим теперь, что будет, если приоритеты терминальной программы, обслуживающей модем, и программы-бланкера равны и процессорное время распределяется поровну между ними: часть данных с модема будет неминуемо потеряна, т.к. процессор будит возиться с бланкером, а не забирать данные с модема ровно половину своего времени! Вот тут-то нас и спасают приоритеты. Просто ставим приоритет терминальной программы выше, чем приоритет бланкера — и всё в порядке. Правда, теперь движение линии по экрану будет происходить только тогда, когда процессор заканчивает очередной цикл работы с модемом, но в данном случае это никак не фатально. Кстати, если уж речь зашла о модеме, то ставьте пятый приоритет своих терминальных программ, и во время перекачки файлов можете что угодно делать на своей машине — ошибок по части модема не будет! Разница между понятиями процесса и задачи состоит в том, что процесс может пользоваться функциями DOS, а задача — нет, поскольку вызов многих ОС-функций по сути является созданием или активацией некоторой задачи; представим, что было бы, если бы активированная задача сама была бы в состоянии вызвать ОС-функцию, которая опять бы создала копию задачи, которая опять бы вызвала ОС...
|