• задача

• планировщик задач (task scheduler)

• кооперативная многозадачность (cooperative multitasking)

• вытесняющая многозадачность (preemptive multitasking)

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

Все, что мы получаем с помощью компьютера,- это результат работы тех или иных программ. Программа, работающая на компьютере, называется задачей, или процессом. Каждый компьютер содержит устройство (микросхему, плату) - процессор, который умеет понимать и исполнять команды, составляющие программу. Существуют компьютеры, в которых имеется несколько процессоров. Но в большинстве случаев компьютер имеет только один процессор. В каждый конкретный момент времени процессор исполняет только одну команду. Когда мы говорим о том, что на компьютере одновременно работает несколько задач (программ), это вовсе не означает, что в какой-то момент времени процессор выполняет несколько команд из разных программ. Это означает, что операционная система умеет переключать «свое внимание» от одной задачи к другой и делает это так часто и так быстро, что у нас создается иллюзия одновременной работы нескольких задач.

Каждая многозадачная операционная система содержит специальный модуль - планировщик задач (task scheduler). Этот модуль распределяет ресурсы компьютера (прежде всего, процессорное время) между всеми задачами в системе, организует очереди к процессору, если несколько задач одновременно пытаются получить к нему доступ.

Пока что все понятно: имеется критически важный ресурс, доступ к которому нужен многим, и имеется диспетчер-планировщик, который следит за порядком. Вроде бы нет поводов для беспокойства. В чем же проблемы? А вот в чем.

Представим себе ситуацию: вы работаете над некоторым документом, например отчетом. Для подготовки этого отчета вам бы хотелось иметь под рукой две одновременно работающие программы - редактор текста и электронную таблицу: пока вы редактируете общий текст, электронная таблица готовила бы необходимые численные данные. При редактировании отчета у вас возникают значительные паузы, ведь все надо хорошенько обдумать и взвесить. Но чтобы электронная таблица могла выполнять свою работу, ей тоже нужно процессорное время, а вы «удерживаете» процессор, редактируя текст отчета.

Одним из решений этой проблемы является идеология всеобщей «вежливости», при которой работающие программы должны «с уважением относиться друг к другу» и при возникновении пауз освобождать ресурсы системы, давая возможность другим выполнить свою работу. Такой режим совместного использования ресурсов многими задачами называется кооперативной многозадачностью (cooperative multitasking). Если в условиях кооперативной многозадачности какая-либо задача окажется «невежливой» и надолго захватит процессор, остальным не останется ничего другого, как ждать и «уповать на лучшее». А представим себе ситуацию, когда плохо написанная программа зашла в тупик, из которого самостоятельно выйти не может. Мы говорим: «Компьютер завис». В этом случае никакая другая задача не сможет выполняться до тех пор, пока вмешательство оператора не разблокирует «вредную» задачу. Иногда для этого приходится перезапускать весь компьютер.

1еперь рассмотрим другую стратегию управления критическими ресурсами системы. Планировщик задач выделяет каждой задаче строго определен ный интервал времени. Как только этот промежуток времени истек, выполнение данной задачи приостанавливается независимо от того, успела она завершить свою работу или нет, и управление передается другой задаче. Когда все задачи по очереди отработали отведенные для них интервалы времени, управление снова возвращается к первой прерванной задаче, и так далее по кругу. Если задача успешно завершилась, она автоматически исключается из очереди ожидающих.

Планировщик может выделять различным задачам разные интервалы времени в зависимости от потребностей или важности задачи. Кроме того, планировщик может менять порядок прохождения задач в очереди, устанавливая так называемые приоритеты. Такая стратегия управления ресурсами, называемая вытесняющей многозадачностью (preemptive multitasking), теоретически гарантирует, что никакая задача навечно не займет процессор и не заблокирует весь компьютер.

Не надо никого убеждать, что вытесняющая многозадачность как концепция лучше, чем кооперативная многозадачность. И так все понятно. Но не торопитесь с выводами. В реальном мире редко что бывает идеально.

«Классическая» Mac OS (включая Mac OS 9) использует кооперативную многозадачность, а все компьютеры семейства UNIX и компьютеры, работающие под управлением операционных систем семейства Windows, используют вытесняющую многозадачность. Именно поэтому противники Mac OS считали и считают ее «несерьезной» системой.

Идеология вытесняющей многозадачности была разработана задолго до появления персональных компьютеров. Почему же авторы Macintosh'a не приняли ее на вооружение? Неужели они были так глупы, что не заметили очевидного? Не все так однозначно. Не будем забывать о том, что именно Macintosh явился, по сути, первым компьютером, ориентированным не на специалиста-компьютерщика, а на неподготовленного пользователя. В идеологии этого компьютера впервые пользователь был провозглашен «главным». Пользователь сам решал, что и когда надо делать, он был инициатором процессов, а не являлся «бесплатным приложением» к компьютеру, его мнение, его решения нередко имели приоритет над всем остальным. Поэтому для Macintosh^ пришлось пересмотреть всю концепцию программирования. Появилось такое понятие, как событийно управляемая машина, то есть некоторое событие, возникающее в системе, запускало цепочку последующих действий по его обработке. Пользователь, нажимающий клавиши или манипулирующий мышкой, являлся одним из наиболее важных источников таких со бытии. И если пользователь считал, что данная задача ему важнее, чем остальные,- то так тому и быть.

Это вовсе не означало полного рабского подчинения системы пользователю. С самого начала в системе была предусмотрена некоторая иерархия приоритетов, и задачи действительно важные и срочные система отслеживала сама, пользователь об этом даже не догадывался. Со временем возможности параллельной работы в Mac OS были расширены, и последние версии позволяли выполнять большинство операций с файлами, печатать документы, работать с сетью в фоновом режиме, практически не затрагивая работу пользователя.

Кооперативная многозадачность при всех своих недостатках и ограничениях имеет одно важное преимущество - она проще и понятнее. Задача сама решает, когда она готова и когда ей удобнее передать управление другой задаче, ее никто «не обрывает на полуслове». Кроме того, сама концепция кооперативной многозадачности в Mac OS хорошо продуманна и очень неплохо реализована.

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

И если вам скажут, что в среде операционных систем Windows 95/98/ME или даже Windows 2000/XP (с вытесняющей многозадачностью) невозможно «завесить» компьютер так, что не помогают даже три «волшебные» клавиши - Ctrl+Alt+Del,- не верьте этому. Несмотря на всю их «истинную» многозадачность, «зависают» ничуть не реже, чем Mac OS.

Так что не надо торопиться с ярлыками. Лучше помнить о том, что «правильные» идеи только тогда приводят к блестящим результатам, когда они «правильно» реализованы.

«характер» языка | Mac OS X | Интернет и все, все, все...


Mac OS X



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31