Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Процессы, связанные с выполнением программ



Единицей планируемой работы в USIХ, как и в любой другой UNIХ-системе, является процесс. Процесс связан с выполнени­ем отдельной программы (последовательности инструкций) в ад­ресном пространстве. Процесс можно сопоставить с виртуальной машиной, которая определяет адресное пространство и логичес­кие ресурсы, выделенные пользователю (процессу).

Адресное пространство процесса, которое разделяется на страницы (как правило, 4 Кбайта), является виртуальным, и обычно только часть его связана с оперативной памятью. Ядро системы хранит содержимое адресного пространства в различных объектах памяти, включая оперативную память, файлы на диске и специально резервируемые на диске области выгрузки. Система управления памятью загружает страницы с диска в оператив­ную память по мере необходимости обращения к ним.

Функционирование USIX обеспечивается следующими спо­собами:

• пользовательский процесс запрашивает системный сервис че­рез системные вызовы (system call). Ядро выполняет эти запро­сы для вызывающих процессов;

• некоторые исключительные действия процесса (такие, как де­ление на нуль, переполнение стека пользователя) вызывают ис­ключительные ситуации, которые управляются ядром от имени процесса;

• ядро управляет аппаратными прерываниями от внешних уст­ройств. Прерывания являются механизмом оповещения ядра системы о завершении операции ввода-вывода и об изменении состояния. Ядро обрабатывает прерывания как глобальные со­бытия.

В общем случае архитектура Intel 80x86 обеспечивает четыре уровня выполнения инструкций. Система USIX, как и большин­ство USIX-систем, использует только два из них: более привиле­гированный — режим ядра и менее привилегированный - режим пользователя. Пользовательские программы выполняются в ре­жиме пользователя, а большинство системных функций — в ре­жиме ядра.

Каждый процесс имеет собственное виртуальное пространст­во, которое отображается на оперативную память с помощью таблицы страниц. Отдельная часть виртуального адресного про­странства каждого процесса отображается на данные и текст (вы­полняемый код) ядра. Эта часть, известная как системное прост­ранство, или пространство ядра, может быть доступна только в режиме ядра. Процессы пользователя не имеют непосредствен­ного доступа к ядру, а для получения системного сервиса исполь­зуют системные вызовы. Когда процесс осуществляет системный вызов, выполняется специальная последовательность инструк­ций, переводящая систему в режим ядра и передающая управле­ние ядру. Ядро выполняет требуемую функцию от имени процес­са и возвращает систему в режим пользователя, передавая управ­ление обратно процессу.

Каждый процесс определяется своим контекстом, включаю­щим информацию, требуемую для планирования управления при его выполнении. Контекст процесса включает следующие компоненты:

• адресное пространство процесса — выполняемый код, данные, стек пользователя, регионы разделяемой памяти и др.;

• управляющую информацию — приоритет и ресурсы процесса, стек ядра, отображение адресного пространства, идентифика­тор процесса;

• аппаратный контекст — содержание общих и специальных ре­гистров процессора.

Ядро функционально может выполняться или в контексте процесса, или в контексте системы. В контексте процесса ядро выполняется от имени текущего процесса (например, когда вы­полняется системный вызов). Оно может иметь доступ к адресно­му пространству, модифицировать его и системный стек этого процесса. Кроме того, ядро может блокировать текущий процесс, если он должен ждать освобождения ресурсов или активности внешнего устройства. В табл. 4.1 отражено обобщение различий между режимами, адресными пространствами и контекстами процесса и системы.

 

                                      

 

Таблица 4.1

Процессы имеют определенное время жизни, создаются сис­темными вызовами типа fork и выполняются, пока не завершатся с помощью системного вызова ехit или по ошибке. За время своего существования процесс может выполнить одну или не­сколько программ. Для выполнения новой программы использу­ется системный вызов ехес.

Процессы имеют четко определенную иерархию. Каждый процесс имеет своего родителя и может содержать один порож­денный процесс или несколько.

Init-процесс — первый пользовательский процесс. Он создает­ся при загрузке системы и является прародителем всех пользова­тельских процессов. Активные порожденные процессы при завер­шении своего процесса-родителя наследуются от init-процесса.

Новые процессы создаются по системному вызову forк. При этом сформированные для него таблицы и стек подобны состоя­нию, при котором процесс находился бы в прерванном состоя­нии. В этом случае процесс устанавливается от имени родитель­ского процесса в очередь на планирование к выполнению. Когда процесс планируется на выполнение, он инициализируется в ре­жиме ядра, при котором выполняется переключение контекста. Следующее состояние зависит от того, где процесс находился до переключения. Если процесс был вновь создан или выполнялся ранее в пользовательском режиме, он немедленно возвращается в режим пользователя. Если процесс был блокирован при выпол­нении системного вызова, процесс продолжает выполнение в ре­жиме ядра.

В каждый момент времени процессор и соответственно про­цессы могут находиться в одном из определенных состояний (фаз). Переход из одной фазы в другую — реакция на различные события. На рис. 4.3 представлены граф основных состояний процесса в USIХ и события, которые приводят к изменениям со­стояния.

Каждая фаза работы процесса характеризуется набором аппа­ратных привилегий и собственным стеком. При переключении процессов необходимо переключать стеки пользовательских про­цессов, в которых сохраняется информация об их состоянии. Это обеспечивает возможность переключения процессов между про­цессорами без каких-либо ограничений.

 Функцию планирования процессов в USIХ, как и в боль­шинстве других операционных систем, выполняет один из глав­ных компонентов ядра системы — планировщик. Он определяет, какой процесс должен выполняться в каждый момент времени и как долго он будет выполняться. Планировщик выделяет процес­сор каждому процессу, как правило, на короткий промежуток времени — квант и затем переключается на другой процесс.

 

 

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

Система USIХ использует аппаратные часы — таймер, кото­рый прерывает систему через фиксированные интервалы времени. Этот интервал времени называется тиком. Каждый тик со­ставляет не более 10 мс.

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

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

Ядро USIХ распознает прерывания по таймеру в трех фазах — процесса, пользователя и планировщика. Когда прерывается ра­бота планировщика, возврат происходит без проверки кванта времени. Если таймер прерывает пользовательский процесс, кор­ректируются таймеры выполнения процесса (режим пользовате­ля и ядра) и проверяется квант времени. Если квант времени ис­тек, процесс требует сохранения независимо от режима выполне­ния. Это обеспечивает полную прерываемость ядра и решает про­блему внутренней синхронизации.

Если процессу необходимо расширить квант времени по не­которой причине (например, чтобы не быть приостановленным другими процессами с тем же самым приоритетом), он может до­бавить несколько тиков к своему кванту времени. После выпол­нения критического участка процесс самостоятельно должен ос­вободить процессор, для того чтобы могли выполняться другие процессы.

Для блокировки прерываний могут использоваться различ­ные механизмы: блокирование ресурсов (аппаратная блокиров­ка); остановка перепланирования (программный блок); семафо­ры ядра (программный блок).

 В многопроцессорной среде и, в слу­чае полной прерываемости, в однопроцессорной системе необхо­дим механизм аппаратного блокирования ресурсов. Аппаратную блокировку можно использовать, когда блокировка требуется на короткое время. В системе USIХ аппаратное блокирование вы­полняется с помощью функций Р_1оск и У_1оск.

Функция Р_1оск оперирует значением блокировки, задавае­мым в качестве аргумента. Если аргумент содержит ненулевое значение, то ресурс свободен. В однопроцессорной среде Р_1оск запрещает прерывания, что автоматически защищает систему от перепланирования процессов. После манипулирования с крити­ческими данными необходимо вызвать функцию V_1оск.

Функция V_1оск восстанавливает предыдущее значение реги­стра флагов, разрешает прерывания, если они были разрешены перед вызовом Р_1оск, и устанавливает ненулевое значение бло­кировки.

Остановка перепланирования. Этот механизм используется для временной отмены перепланирования процессов.

Для этой цели служат две функции: StopScheduler() и ReleaseScheduler().

Функция StopScheduler() останавливает перепланирование, пока не случится одно из двух событий:

1) будет вызвана функция ReleaseSchedurel() для отмены планирования;

2) будет вызвана функция give up (добровольное освобож­дение процессом данного процессора).

Функция StopScheduler() воздействует только на тот процес­сор, на котором выполняется процесс, и не воздействует на дру­гие процессоры.

Функция StopScheduler() обеспечивает задержку процессора на период времени не более одного тика. С помощью других средств процессы могут пребывать в режиме задержки в течение любого интервала времени.

Семафоры ядра. Они используются для синхронизации актив­ных процессов на длительное время, когда ресурсы назначаются процессам на максимально возможное время. Если ресурсы не­доступны, процесс может перейти в ожидание либо немедленно вернуть управление. Очередь ожидания упорядочивается по при­оритетам ожидающих процессов и каждый раз проверяется на ос­вобождение ресурсов.

Блокирование секции данных или некоторого ресурса от вза­имного доступа в течение длительного времени обеспечивается двумя функциями: Р_ semlоск (&semlock) и V_semlоск (&8ет-1оск).

Функция Р_setlоск использует аргумент sem1оск в качестве индикатора занятости общего ресурса, который управляется с помощью функций Р_1оск и V_1оск.

Функция V_semlock проверяет использование требуемого ре­сурса другими процессами. Очередь ожидания упорядочивается по приоритетам ожидающих процессов.

 Планировщик программ включает набор неза­висимых программ, выполняющих общие функции: переключе­ние контекста, управление очередями и др. Он также определяет программный интерфейс для зависимых функций, таких, как вы­числение приоритетов и их наследование. Например, для про­цессов реального времени используются фиксированные при­оритеты, а для процессов разделения времени — динамически из­меняемые приоритеты в ответ на определенные события.

Все процессы в USIX делятся на три класса:

1) разделения времени (ТS — Тime Sharing);

2) системные (SУS);

3) реального времени (RT — Rеа1 Тime).

Процессы имеют 160 уровней приоритетов, которые делятся на три группы:

• 0 — 59 — процессы разделения времени;

• 60 — 99 — системные процессы;

• 100 - 159 — процессы реального времени.

Очереди диспетчеризации создаются отдельно для каждого уровня приоритета. Больший уровень приоритета соответствует более приоритетному процессу.

Процессы разделения времени наименее приоритетны. Они планируются к выполнению в соответствии с алгоритмами, ис­пользуемыми в UNIХ-подобных системах. Т8-процессы имеют 60 уровней приоритета, которые назначаются процессам в зави­симости от используемых ими системных ресурсов. Каждому Т8-процессу назначается квант времени (по умолчанию — одна се­кунда).

Если в течение кванта времени процесс не выполнял систем­ных вызовов, переводящих его в состояние приостанова, он сни­мается с выполнения и его приоритет понижается. Таким обра­зом, вычислительные процессы, требующие много процессорно­го времени, штрафуются, что позволяет давать преимущество ин­терактивным процессам. Отложенный процесс с уменьшенным приоритетом устанавливается в конец соответствующей очереди готовых к выполнению процессов.

Системные процессы предназначены для выполнения обще­системных функций. В основном это процессы-серверы (файло­вые серверы, драйверы ввода-вывода, процессы-демоны). Их планирование осуществляется аналогично планированию про­цессов реального времени. Предусмотрено 40 уровней приорите­та для системных процессов.

Процессы реального времени имеют 60 уровней приоритета, которые назначаются пользователем. Ядро не изменяет приори­теты процессов класса RT и SУS по своей инициативе.

Процессы, находящиеся в фазе планирования, проверяют очереди всех классов. При этом класс очередей RТ-процессов на­ходится в верхней части таблицы, класс 8У8 - в средней части, а класс Т8 — в нижней части. Анализ очередей осуществляется сверху вниз, и, таким образом, всегда выбирается на исполнение самый приоритетный процесс.

Процессы классов SУS и RТ запускаются на выполнение с квантом времени, задаваемым пользователем. После этого даль­нейшие действия зависят от наличия в очереди процессов с при­оритетом, равным или большим приоритета выполняемого про­цесса.

Если в очереди имеется процесс с равным приоритетом, теку­щий процесс по истечении кванта времени приостанавливается и помещается в конец очереди процессов данного приоритета, а новый равноприоритетный процесс запускается на выполнение.

Если в очереди имеется более приоритетный процесс, теку­щий процесс приостанавливается сразу при наступлении собы­тия (тайм-аут или прерывание), его контекст сохраняется, и осу­ществляется переход в фазу планировщика.

Таким образом, центральным звеном планирования процес­сов является набор приоритетных очередей процессов. С помо­щью этих очередей реализуется инвариантное переключение на­бора готовых к выполнению процессов на разные процессоры.


Поделиться:



Последнее изменение этой страницы: 2019-04-21; Просмотров: 172; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.031 с.)
Главная | Случайная страница | Обратная связь