Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 98
Текст из файла (страница 98)
Используется программный интерфейсNetBIOS и технология SMB (Server Message Blocks). Системы главным образомпредназначены для работы в составе рабочих групп, то есть для построения одноранговых вычислительных сетей, хотя операционные системы Windows 95 и Windows 98 допускают работу в составе домена в сетях клиент-сервер. Для этого ониимеют все необходимые программные модули и интерфейсные экранные формы.Однако, поскольку в случае их использования в корпоративных сетях существенным образом начинает страдать информационная безопасность, делать это не рекомендуется.Организация многозадачностиОдним из наиболее актуальных вопросов, которые решает любая многозадачнаяоперационная система, в том числе и системы Windows 9x, состоит в организациипо возможности простого, но эффективного способа предоставления процессорного времени различным параллельно выполняющимся программам.
Другими словами, речь идет о диспетчеризации задач.Мы уже знаем, что многозадачность, в общем случае, означает способность операционной системы обеспечивать совместное использование процессора несколькими программами. Большинство разработчиков операционных систем называютработающие программы задачами, поэтому задачей можно считать загруженнуюв память программу, которая что-то делает. В большинстве операционных систем,в том числе и в Windows NT, и в UNIX, выполнение приложения называется процессом.
Однако в уже упомянутых операционных системах Windows 3.x почти всегда использовался термин «задача», и лишь изредка — «процесс». Имейте в виду,что в операционных системах Windows 9x используется исключительно термин«процесс», а понятие задачи было официально исключено из терминологии Windows. Вкладывая совершенно такой же смысл в слово «процесс», разработчикиMicrosoft тем самым попытались поставить операционные системы семействаWindows 9x как бы на один уровень с другими операционными системами, такими, например, как Windows NT. В большей части документации по Windows 3.1мы можем обнаружить оба упомянутых слова.
Основная причина изменения терминологии — реализация мультизадачности при сохранении мультипрограммного режима работы. Другими словами, речь идет о поддержке в этих операционныхсистемах возможности многопоточного выполнения приложений. Поэтому помимо отхода от термина задача и использования термина процесс, мы должны отметить, что во всех этих операционных системах стал использоваться термин потоквыполнения, или тред (thread).Напомним, что поток выполнения — это одна из ветвей вычислительного процесса.
Потоку выделяется процессорное время, этим занимается диспетчер задач операционной системы, называемый планировщиком. Поток может быть создан любым работающим под управлением Windows 9x 32-разрядным приложением иливиртуальным драйвером устройства. Поток имеет собственный стек и контекст370Глава 11, Операционные системы Windowsвыполнения (а именно содержимое рабочих регистров процессора).
Потоки используют память совместно с процессом-родителем. Когда Windows 95/98 загружает приложение и создает необходимые ему структуры данных, система настраивает процесс в виде отдельного потока. Потоки могут использовать весь код иглобальные данные процесса-родителя.
Это означает, что создание нового потокатребует минимальных затрат памяти. Один процесс может породить множествопараллельно выполняющихся потоков. Многие приложения на протяжении всеговремени своей работы используют единственный поток, хотя могут (а многие таки делают) использовать еще несколько потоков для выполнения определенныхкратковременных операций в фоновом режиме, что позволяет либо увеличить скорость выполнения приложений, либо дать возможность пользователю выполнятьследующую операцию в своей программе, не дожидаясь завершения текущей операции.Термин «задача» мы все же будем использовать и дальше, поскольку с точки зрения распределения процессорного времени требуется все то же: выполнять вычисления, то есть выполнять некий конкретный код с конкретными данными.В Windows 95/98 работа с потоками доступна только 32-разрядным приложениями виртуальным драйверам устройств.
Виртуальные машины MS DOS и старые16-разрядные приложения Windows не могут обращаться к функциям API, которые поддерживают потоки. Каждая виртуальная машина MS DOS работает вотдельном потоке. Аналогично, каждое 16-разрядное приложения Windows присвоем исполнении образует процесс, который использует всего один поток, чтопозволяет обеспечить для старых приложений Windows модель кооперативноймногозадачности. Любое 32-разрядное приложение или виртуальный драйвер устройства может создавать дополнительные потоки, a Windows 95/98 может организовать диспетчеризацию всех этих потоков в соответствии с алгоритмами вытеснения, что представляет собой еще один аспект многозадачности в Windows.Несмотря на то что все эти потоки могут представлять принципиально разные типыпрограмм, в системе они представлены в виде одинаковых структур данных.
Вследствие этого диспетчер и остальной 32-разрядный системный код, использующийэти внутренние структуры данных, и удалось реализовать так, что разработчикам не понадобилось учитывать особенности преобразований 16-разрядного кодав 32-разрядный.Как известно, в основе диспетчеризации задач ныне уже почти всеми забытойWindows 3.x лежал принцип невытесняющей, или кооперативной, многозадачности (cooperative multitasking).
При работе в среде Windows 95/98 кооперативнаямногозадачность используется только для диспетчеризации старых 16-разрядныхприложений, в то время как работа приложений Win32 планируется в соответствии с иным алгоритмом. Для 32-разрядных приложений система используетвытесняющую многозадачность (preemptive multitasking).Поддержкой многозадачности занимается планировщик (scheduler).
Он имеет делоглавным образом с временем и событиями. Процессу в Windows 95/98 выделяетсяквант времени, который определяет, как долго данный процесс может использовать процессор. По окончании кванта времени планировщик определяет, следуетОперационные системы Windows 9x371ли передать процессор в распоряжение другого процесса. В отличие от WindowsNT, Windows 95/98 не поддерживает мультипроцессорные системы, в которыхпланировщик может выделять процессам больше одного процессора.Решения, принимаемые планировщиком, определяются событиями.
Так, щелчокмыши является для планировщика событием. Это событие может привести к передаче процессора в распоряжение процесса, «владеющего» окном, в котором произошел щелчок. Впрочем, планировщик может решить, что завершение передачиданных по сети заслуживает большего внимания, чем щелчок мыши, и тогда процессор будет передан в распоряжение процесса, обслуживающего сеть, а всем остальным процессам придется подождать.Как мы знаем, при вытесняющем планировании только система может решать, в каком порядке, как долго и какие задачи (в нашем случае — потоки) будут выполняться.
Планировщик может в любой момент отнять процессор у одного из потоковвыполнения и.передать его в распоряжение другого. Обычно такой акт вытеснения происходит в результате реакции на событие, требующее внимания. Планировщик присваивает каждому из работающих процессов приоритет (priority). Потоки его наследуют, хотя при создании нового потока ему можно задать и инойприоритет.
В случае если происходит событие, относящееся к потоку, обладающему более высоким приоритетом, планировщик приостанавливает (вытесняет) текущий поток и начинает выполнять тот, у которого приоритет больше.Для обеспечения гарантированного обслуживания введен механизм динамических приоритетов, при котором приоритеты потоков постоянно пересчитываются.Например, если бы системе надо было выбирать между двумя потоками, у одногоиз которых приоритет больше, а у другого меньше, то поток, обладающий низкимприоритетом, никогда бы не смог выполняться, если бы планировщик динамически не изменял значения приоритетов.
При расчете приоритетов также играет рольдлительность квантов времени.Диспетчер задач (потоков выполнения) использует следующие три механизма, с помощью которых он пытается равномерно распределять время процессора междувсеми вычислениями в целях обеспечения бесперебойной и одновременно быстрой реакции системы.• Динамическое изменение приоритета. Диспетчер на время может повысить илипонизить приоритет того или иного потока. Так, например, нажатие клавишиили щелчок мыши говорит ему о том, что приоритет потока, к которому относится действие пользователя, должен быть повышен.• Постсинхронизированное снижение приоритета. Ранее повышенное значениеприоритета постепенно возвращается к исходному значению.• Наследование приоритета.
Служит для быстрого повышения приоритета. Обычно это делается для того, чтобы позволить потоку с низким приоритетом быстрозакончить работу с выделенным для монопольного использования ресурсом,который необходим потокам с высоким приоритетом. Windows 95/98 восстанавливает исходное значение унаследованного приоритета сразу же после удовлетворения конфликтного условия.372Глава 11. Операционные системы WindowsВ операционных системах семейства Windows 9x имеется два модуля для диспетчеризации потоков выполнения: основной планировщик (primary scheduler) отвечает за вычисление приоритетов потоков; планировщик квантования (timeslicescheduler) занимается расчетами, необходимыми для выделения квантов времени.По сути дела, модуль квантования решает, какой процент доступного процессорного времени какому потоку выделить. Если некий поток не получает времени навыполнение, значит, он находится в состоянии ожидания выполнения (suspended)и не будет работать, пока ситуация не изменится.Основной планировщик просматривает все потоки выполнения и рассчитываетдля каждого из них приоритет выполнения (execution priority), который представляет собой целое число, находящееся в пределах от 0 до 31.
Далее он переводит всостояние ожидания выполнения все потоки, приоритет выполнения которых меньше текущего наибольшего значения, имеющегося у одного из потоков. После тогокак поток переведен в состояние ожидания выполнения, основной планировщикболее не обращает на него никакого внимания при дальнейших вычислениях приоритетов на протяжении данного кванта времени. По умолчанию длительностькванта времени составляет 20 мс. Затем планировщик квантования рассчитываетпроцентную долю кванта времени, которую необходимо выделить каждому потоку.
Для этого он использует значения приоритетов и информацию о текущем состоянии виртуальной машины.После окончания выделенного потоку кванта времени планировщик перемещаетего в конец очереди, состоящей из потоков с равным приоритетом. Этот классический механизм диспетчеризации, называемый карусельным, обеспечивает всемпотокам, обладающим равным наивысшим приоритетом, одинаковый доступ к процессору.
Если некоторый поток не занимает весь выделенный ему квант процессорного времени, диспетчер передает процессор в распоряжение следующего потока с таким же приоритетом и позволяет тому использовать остаток данного квантавремени.Если в системе одновременно работают только 32-разрядные приложения, то более быструю реакцию системы и значительно менее конфликтный отклик программпользователю обеспечивает так называемое упреждающее планирование. Как известно, в диалоговых системах используется событийное программирование, прикотором выполнение той или иной процедуры начинается после определенногособытия. Сама операционная система также функционирует по этому принципу.Управляющая (супервизорная) подсистема Windows 9x просматривает направляемый ей подсистемой ввода-вывода поток сообщений, из которых она и узнает о новых событиях, таких, например, как щелчки мыши в одном из ее окон, запуск новых программ и т.