Таким образом, мультипрограммирование более эффективно на уровне потоков, а не задач. Каждый поток имеет в процессоре собственный счетчик команд и стек. Задача, оформленная в виде нескольких потоков в рамках одного процесса, может быть выполнена быстрее за счет псевдопараллельного (или параллельного в мультипроцессорных системах) выполнения ее отдельных частей. Особенно эффективна многопоточность в мультипроцессорных системах.
Создание процессов и потоков
Создать процесс – это, прежде всего, означает создать описатель процесса (дескриптор процесса), в котором содержатся все сведения о процессе, необходимые операционной системе для управления им. Обычно описатель процесса состоит из двух частей – собственно дескриптора и контекста процесса, которые доступны только ядру ОС.
Дескриптор содержит информацию о процессе, необходимую ядру ОС в течение всего жизненного цикла процесса независимо от того, находится он в активном или пассивном состоянии. Дескрипторы отдельных процессов хранятся в таблице процессов, которая постоянно находится в оперативной памяти ядра операционной системы. В дескрипторе имеется указатель на место расположения контекста процесса.
Контекст процесса содержит менее оперативную, но более объемную часть информации о процессе, необходимую для возобновления процесса с прерванного места: содержимое регистров процессора, информацию о всех открытых данным процессом файлах, незавершенные операции ввода-вывода и другие данные. Контекст находится в оперативной памяти непосредственно рядом с образом процесса и перемещается вместе с ним на диск, если есть в этом необходимость.
Создание процесса включает загрузку кодов и данных исполняемой программы с диска в выделенную область оперативной памяти или в область подкачки – специальную область диска, где хранятся вытесненные из оперативной памяти процессы.
Создание описателя процесса знаменует собой появление в системе еще одного претендента на вычислительные ресурсы. Начиная с этого момента при распределении ресурсов ОС должна принимать во внимание потребности нового процесса.
При выполнении этих действий подсистема управления процессами тесно взаимодействует с подсистемой управления памятью и файловой системой.
В многопоточной системе операционная система при создании процесса создает для каждого процесса как минимум один поток выполнения. При этом так же, как и при создании процесса, операционная система генерирует специальную информационную структуру – описатель потока.
В исходном состоянии поток (или процесс – для систем без многопоточности) находится в приостановленном состоянии. Момент выборки потока на выполнение осуществляется в соответствии с принятым в данной системе правилом предоставления процессорного времени и с учетом всех существующих в системе процессов и потоков.
Планирование и диспетчеризация потоков
На протяжении существования процесса выполнение его потоков может быть неоднократно прервано и продолжено. Переход от выполнения одного потока к другому осуществляется в результате планирования и диспетчеризации.
Планирование – это работа операционной системы по определению того, в какой момент необходимо прервать выполнение текущего активного потока и какому потоку предоставить возможность выполняться.
В большинстве ОС универсального назначения планирование осуществляется динамически, т. е. решения принимаются во время работы системы на основе анализа текущей ситуации.
Почти во всех современных ОС реализованы вытесняющие алгоритмы планирования потоков, в которых решение о переключении процессора с выполнения одного потока на другой принимается операционной системой.
При планировании потоков, как правило, применяются смешанные алгоритмы планирования, основанные как на квантовании (выделении потоку кванта времени использования процессора), так и на приоритетах.
В основе планирования лежит квантование, но величина кванта и/или порядок выбора потока из очереди готовых определяется приоритетом потоков. При этом могут приниматься во внимание не только приоритет потоков, но время их ожидания в очереди, накопленное время выполнения и другие факторы. Часто низкоприоритетным процессам выделяется больший квант времени, чем высокоприоритетным. Поэтому хотя они и реже получают доступ к процессору, но зато дольше его могут занять.
Операционная система планирует выполнение потоков независимо от того, принадлежат ли они одному процессу или разным.
Диспетчеризация – это реализация найденного в результате планирования решения, т. е. сам процесс переключения процессора с одного потока на другой.
Диспетчеризация сводится к следующему:
· сохранение контекста текущего потока, который требуется сменить;
· загрузка контекста нового потока, выбранного в результате планирования;
· запуск нового потока на выполнение.
В контексте потока можно выделить часть, общую для всех потоков процесса, и часть, относящуюся только к данному потоку. Потому часто общую часть выделяют как глобальный контекст, доступный всем потокам процесса и который не надо менять при смене потоков одного процесса. Меняется только локальный контекст, необходимый конкретному потоку. Это ускоряет переключение потоков.
В мультипрограммной системе поток может находиться в одном из трех основных состояний:
· выполнение – активное состояние потока, когда он выполняется процессором;
· ожидание – пассивное состояние потока, когда он заблокирован по своим внутренним причинам (ждет осуществления некоторого события или освобождения необходимого ресурса, кроме процессора);
· готовность – пассивное состояние потока, когда он заблокирован внешними обстоятельствами, т. е. готов использовать процессор, но ему его не дают.
В состоянии выполнения в однопроцессорной системе может находиться не более одного потока, а в других состояниях – по несколько потоков, которые образуют очереди ожидающих и готовых потоков.
2.1.3. Мультипрограммирование на основе прерываний
Система прерываний переводит процессор на выполнение потока команд, отличного от того, который выполнялся до сих пор, с последующим возвратом к исходному потоку.
В зависимости от источника прерывания делятся на три класса:
· внутренние;
· внешние;
· программные.
Внутренние прерывания (исключения) происходят при появлении аварийной ситуации в ходе исполнения некоторой инструкции программы – ошибки программирования.
Внешние (аппаратные) прерывания возникают в результате поступления сигналов от аппаратных устройств, в том числе от системного таймера, клавиатуры и других контроллеров внешних устройств компьютера. У процессора имеется специальный вход прерывания.
Программные прерывания возникают при выполнении особой команды процессора, исполнение которой имитирует прерывание, т. е. переход на новую последовательность инструкций.
Прерываниям приписывается приоритет, с помощью которого они ранжируются по степени важности и срочности. Процедуры, вызываемые по прерываниям, обычно называют обработчиками прерываний, или процедурами обслуживания прерываний.
Диспетчеризация прерываний является важной функцией операционной системы, и эта функция реализована практически во всех мультипрограммных ОС.
Можно заметить, что в общем случае в операционной системе реализуется двухуровневый механизм планирования работ. Верхний уровень планирования выполняется диспетчером прерываний, который распределяет процессорное время между потоками поступающих запросов на прерывание различных типов – внешних, внутренних и программных. Оставшееся процессорное время распределяется другим диспетчером – диспетчером потоков, на основании дисциплин планирования потоков.
На рис. 2.1 представлены уровни приоритетов при диспетчеризации различных прерываний в операционных системах семейства Windows NT.

Рис. 2.1. Уровни приоритетов при диспетчеризации прерываний в операционных системах Windows NT
Необработанные запросы на прерывание должны храниться в контроллерах устройств, чтобы не потеряться и дожидаться обслуживания при снижении уровня приоритета прерывания процессора, когда он закончит выполнение более срочных работ.
ОсобУЮ роль в работе вычислительной системы играет системный таймер: на основании его прерываний обновляются системные часы, определяющие очередной момент вызова планировщика потоков, момент выдачи управляющего воздействия потоком реального времени (такие имеются в Windows NT) и многое другое. Ввиду важности немедленной обработки прерываний от таймера ему дан весьма высокий уровень приоритета – более высокий, чем уровень любого устройства ввода-вывода.
Программные прерывания, обслуживающие системные вызовы от приложений (АРС), выполняются с низшим приоритетом, что соответствует концепции продолжения одного и того же процесса, но только в системной фазе, при выполнении системного вызова.
А вот для программных прерываний, исходящих от модулей ядра ОС, отводится более высокий уровень запросов, имеющих название «диспетчерский / DPC». Этот уровень приоритета называется диспетчерским, потому что именно в эту очередь помещаются программные запросы, вызывающие диспетчер потоков.
2.2. Управление памятью
Особая роль памяти объясняется тем, что процессор может выполнять инструкции программы только в том случае, если они находятся в оперативной памяти компьютера. Память распределяется как между модулями прикладных программ, так и между модулями самой операционной системы. Функции распределения и защиты памяти в ОС выполняет подсистема управления памятью.
2.2.1. Адресация к памяти
Для идентификации переменных и команд на различных этапах жизненного цикла программы используются символьные имена, виртуальные адреса и физические адреса ячеек памяти.
Символьные имена присваиваются пользователем при написании программы на алгоритмическом языке.
Виртуальные адреса, называемые иногда математическими, или логическими адресами, вырабатывает транслятор, переводящий программу на машинный язык. Поскольку во время трансляции не известно, в какое место памяти будет загружена программа, то транслятор присваивает переменным и командам виртуальные (условные) адреса, обычно считая по умолчанию, что начальным адресом программы будет нулевой адрес.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 |



