Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 17
Текст из файла (страница 17)
Дисциплины обслуживания FCFS, SJN, SRT относятся к не вытесняющим.Диспетчеризация с перераспределением процессорного времени между задачами,то есть вытесняющая многозадачность (preemptive multitasking), — это такой способ, при котором решение о переключении процессора с выполнения одной задачина выполнение другой принимается диспетчером задач, а не самой активной задачей. При вытесняющей многозадачности механизм диспетчеризации задач целиком сосредоточен в операционной системе, и программист может писать свое приложение, не заботясь о том, как оно будет выполняться параллельно с другимизадачами (процессами и потоками).
При этом операционная система выполняетследующие функции: определяет момент снятия с выполнения текущей задачи,сохраняет ее контекст в дескрипторе задачи, выбирает из очереди готовых задачследующую и запускает ее на выполнение, загружая ее контекст. Дисциплина RR11многие другие, построенные на ее основе, относятся к вытесняющим.62Глава 2. Управление задачамиПри не вытесняющей многозадачности процессорное время распределено междусистемой и прикладными программами.
Прикладная программа, получив управление от операционной системы, сама должна определить момент завершения своейочередной итерации и передачи управления супервизору операционной системы спомощью соответствующего системного вызова. При этом естественно, что диспетчер задач, так же как и в случае вытесняющей мультизадачное™, формируеточереди задач и выбирает в соответствии с некоторым алгоритмом (например, с учетом порядка поступления задач или их приоритетов) следующую задачу на выполнение. Такой механизм создает некоторые проблемы как для пользователей, так и для разработчиков.Для пользователей это означает, что управление системой может теряться на некоторый произвольный период времени, который определяется процессом выполнения приложения (а не системой, старающейся всегда обеспечить приемлемоевремя реакции на запросы пользователей) [27].
Если приложение тратит слишкоммного времени на выполнение какой-либо работы (например, на форматированиедиска), пользователь не может переключиться с этой на другую задачу (например,на текстовый или графический редактор, в то время как форматирование продолжалось бы в фоновом режиме). Эта ситуация нежелательна, так как пользователиобычно не хотят долго ждать, когда машина завершит свою задачу.Поэтому разработчики приложений для не вытесняющей операционной среды,возлагая на себя функции диспетчера задач, должны создавать приложения так,чтобы они выполняли свои задачи небольшими частями.
Так, упомянутая вышепрограмма форматирования может отформатировать одну дорожку дискетыи вернуть управление системе. После выполнения других задач система возвратитуправление программе форматирования, чтобы та отформатировала следующуюдорожку. Подобный метод разделения времени между задачами работает, но онсущественно затрудняет разработку программ и предъявляет повышенные требования к квалификации программиста.Например, в ныне уже забытой операционной среде Windows 3.x нативные 16-разрядные приложения этой системы разделяли между собой процессорное времяименно таким образом. Й именно программисты должны были обеспечивать «дружественное» отношение своей программы к другим выполняемым одновременнос ней программам, достаточно часто отдавая управление ядру системы. Крайнимпроявлением «недружественности» приложения является его зависание, приводящее к общему краху системы — прекращению всех вычислений.
В системах с вытесняющей многозадачностью такие ситуации, как правило, исключены, так какцентральный механизм диспетчеризации, во-первых, обеспечивает все задачи процессорным временем, во-вторых, дает возможность иметь надежные механизмымониторинга вычислений и, в-третьих, позволяет снять зависшую задачу с выполнения.Однако распределение функций диспетчеризации между системой и приложениями не всегда является недостатком, а при определенных условиях может бытьи достоинством, потому что дает возможность разработчику приложений самомупланировать распределение процессорного времени наиболее подходящим для--•--^•-•••--•—*•. ! „..^^.^^^..^^..^^^.^^^ЛИкачество диспетчеризации и гарантии обслуживания63данного фиксированного набора задач образом [27, 44, 46].
Так как разработчиксам определяет в программе момент времени передачи управления, то при этомисключаются нерациональные прерывания программ в «неудобные» для них моменты времени. Кроме того, легко разрешаются проблемы совместного использования данных: задача во время каждой итерации использует их монопольно и уверена, что на протяжении этого периода никто другой их не изменит. Примеромэффективного применения не вытесняющей многозадачности является сетеваяоперационная система Novell NetWare, в которой в значительной степени благодаря этому достигнута высокая скорость выполнения файловых операций. Менееудачным оказалось использование не вытесняющей многозадачности в операционной среде Windows 3.x.
К счастью, на сегодня эта операционная система уженигде не применяется, ее с успехом заменила сначала Windows 95, а затем и Windows 98. Правда, следует заметить, что при выполнении в этих операционных системах старых 16-разрядных приложений, разработанных в свое время для операционной среды Win 16 API, создается виртуальная машина, работающая по принципамне вытесняющей многозадачности.Качество диспетчеризациии гарантии обслуживанияОдна из проблем, которая возникает при выборе подходящей дисциплины обслуживания — это гарантия обслуживания.
Дело в том, что в некоторых дисциплинах, например в дисциплине абсолютных приоритетов, низкоприоритетные процессы получаются обделенными многими ресурсами и, прежде всего, процессорнымвременем. Возникает реальная дискриминация низкоприоритетных задач, в результате чего они достаточно длительное время могут не получать процессорное время.В конце концов, некоторые процессы и задачи вообще могут быть не выполнены кзаданному сроку.
Известны случаи, когда вследствие высокой загрузки вычислительной системы отдельные процессы вообще не выполнились, несмотря на то чтопрошло несколько лет (!) с момента их планирования. Поэтому вопрос гарантииобслуживания является очень актуальным.Более жестким требованием к системе, чем просто гарантированное завершениепроцесса, является его гарантированное завершение к указанному моменту времени или за указанный интервал времени. Существуют различные дисциплины диспетчеризации, учитывающие жесткие временные ограничения, но не существуетДисциплин, которые могли бы предоставить больше процессорного времени, чемможет быть в принципе выделено.Планирование с учетов жестких временных ограничений легко реализовать, организуя очередь готовых к выполнению задач в порядке возрастания их временныхограничений.
Основным недостатком такого простого упорядочения является то,что задача (за счет других задач) может быть обслужена быстрее, чем это ей реально необходимо. Чтобы избежать этого, проще всего процессорное время выделятьВсе-таки квантами. А после получения задачей своего кванта времени операционная система, оценив некоторое множество факторов (важных с точки зрения опти-л64•Глава 2.
Управление задачамимизации распределения процессорного времени и гарантий обслуживания к заданному сроку), может переназначить приоритет задаче. Это позволит ей болеегибко использовать механизм приоритетов и иметь механизмы гарантии обслуживания.Гарантировать обслуживание можно, например, следующими тремя способами.•Выделять минимальную долю процессорного времени некоторому классу процессов, если по крайней мере один из них готов к исполнению. Например, можноотводить 20 % от каждых 10 мс процессам реального времени, 40 % от каждых2 с — интерактивным процессам и 10 % от каждых 5 мин — пакетным (фоновым) процессам.•Выделять минимальную долю процессорного времени некоторому конкретному процессу, если он готов к выполнению.ОВыделять столько процессорного времени некоторому процессу, чтобы он могвыполнить свои вычисления к сроку.Для сравнения алгоритмов диспетчеризации обычно используются некоторые критерии.Q Загрузка центрального процессора (CPU utilization).
В большинстве персональных систем средняя загрузка процессора не превышает 2-3 %, доходя в моменты выполнения сложных вычислений и до 100 %. В реальных системах, гдекомпьютеры (например, серверы) выполняют очень много работы, загрузка процессора колеблется в пределах от 15-40 % (для легко загруженного процессора) до 90-100 % (для тяжело загруженного процессора).• Пропускная способность центрального процессора (CPU throughput). Пропускная способность процессора может измеряться количеством процессов, которые выполняются в единицу времени.QВремя оборота (turnaround time). Для некоторых процессов важным критерием является полное время выполнения, то есть интервал от момента появленияпроцесса во входной очереди до момента его завершения. Это время названовременем оборота и включает время ожидания во входной очереди, время ожидания в очереди готовых процессов, время ожидания в очередях к оборудованию, время выполнения в процессоре и время ввода-вывода.• Время ожидания (waiting time).
Под временем ожидания понимается суммарное время нахождения процесса в очереди готовых процессов.• Время отклика (response time). Для интерактивных программ важным показателем является время отклика, или время, прошедшее от момента попаданияпроцесса во входную очередь до момента первого обращения к терминалу.Очевидно, что простейшая стратегия краткосрочного планировщика должна бытьнаправлена на максимизацию средних значений загруженности и пропускной способности, времени ожидания и времени отклика.Правильное планирование процессов в значительной степени влияет на производительность всей системы.
Можно выделить следующие главные причины, приводящие к снижению производительности системы.Диспетчеризация задач с использованием динамических приоритетов•65Накладные расходы на переключение процессора. Они определяются не только переключениями контекстов задач, но и (при переключении на потоки другого приложения) перемещениями страниц виртуальной памяти, а также необходимостью обновления данных в кэше (коды и данные одной задачи, находящиесяв кэше, не нужны другой задаче и будут заменены, что приведет к дополнительным задержкам).• Переключение на другую задачу в тот момент, когда текущая задача выполняеткритическую секцию, а другие задачи активно ожидают входа в свою критическую секцию (см. главу 7). В этом случае потери будут особо велики (хотя вероятность прерывания выполнения коротких критических секций мала).В случае мультипроцессорных систем применяются следующие методы повышения производительности системы:• совместное планирование, при котором все потоки одного приложения (неблокированные) одновременно ставятся на выполнение процессорами и одновременно снимаются с выполнения (для сокращения переключений контекста);• планирование, при котором находящиеся в критической секции задачи не прерываются, а активно ожидающие входа в критическую секцию задачи не ставятся на выполнение до тех пор, пока вход в секцию не освободится;Q планирование с учетом так называемых подсказок (hints) программы (во времяее выполнения), например, в известной своими новациями ОС Mach имелосьдва класса таких подсказок: во-первых, указания (разной степени категоричности) о снятии текущего процесса с процессора, во-вторых, указания о том процессе, который должен быть выбран взамен текущего.Одним из основных методов гарантии обслуживания является использование динамических приоритетов.Диспетчеризация задач с использованиемдинамических приоритетовПри выполнении программ, реализующих какие-нибудь задачи контроля и управления (что характерно, прежде всего, для систем реального времени), может случиться такая ситуация, когда одна или несколько задач не могут быть реализованы (решены) в течение длительного промежутка времени из-за возросшей нагрузкив вычислительной системе.