Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Процессы в операционной системе




 

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

В операционных системах не существует взаимно-однозначного соответствия между процессами и программами. Для работы определенных программ может создаваться более одного процесса или один процесс может быть исполнен последовательно несколькими различными програм­мами.

Примитивы. Можно разделить программы на две категории: программы, для исполнения которых нет необходимости изменять состояние объектов ОС, и программы, для исполнения которых необходимо изменять состоя­ние объектов ОС.

Первые программы относятся к программам-примитивам. Как правило, это программы, которые выполняют функции самой ОС (ядра), а именно:

- функции обработки прерываний;

- некоторые программы, выполняющие функции диспетчера;

- программы синхронизации;

- программы управления памятью.

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

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

Не следует смешивать понятия процесс и программа. Программа — это план действий, а процесс — это само действие, поэтому понятие процесса включает:

- программный код;

- данные;

- содержимое стека;

- содержимое адресного и других регистров процессора.

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

- новый (процесс только что создан);

- выполняемый (команды программы выполняются в CPU);

- ожидающий (процесс ожидает завершения некоторого события, чаще всего операции ввода-вывода);

- готовый (процесс ожидает освобождения CPU);

- завершенный (процесс завершил свою работу).

Переход из одного состояния в другое не может выполняться произвольным образом.

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

Процессы характеризуются следующей информацией:

- контрольным блоком процесса;

- текущим статусом процесса (состоянием);

- приоритетом выполнения процесса;

- ресурсами, которые использует процесс;

- маской обработки и владельцем.

Процессы в ОС могут быть запущены в различных случаях:

- диспетчер вызывает некоторый глобальный процесс по истечении некоторого промежутка времени или при возникновении некоторого собы­тия;

- для получения оценки состояния ОС;

- при запуске программы переформирования очереди диспетчера, с целью повышения производительности системы;

- при вызове из программы пользователя другого клиентского прило­жения. В этом случае может потребоваться еще и синхронизация процес­сов;

- запуск программы пользователя.

 

Характерные отличия процессов и примитивов приведены в     таблице 1.

 

Таблица 1 – Процессы и примитивы

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

 

Распределение процессов между имеющимися ресурсами носит название планирование процессов.

Одним из методов планирования процессов, ориентированных на эффективную загрузку ресурсов, является метод очередей ресурсов.

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

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

Процесс в состоянии ожидания завершения операции ввода-вывода находится в одной из очередей к оборудованию ввода-вывода.

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

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

 

 

 

Большой объем информации, занимаемый процессом, делает дорогими (в смысле ресурсов) операции по их созданию и управлению. Однако часто возникает необходимость в выполнении нескольких параллельных пото­ков внутри одного процесса, например выполнение одной задачи в много­процессорной системе на нескольких процессорах. Создание для каждого потока такой программы собственного процесса приведет к большим расхо­дам памяти и времени на переключения между ними. Поэтому в настоящее время практически во всех ОС реализован механизм параллельного выпол­нения отдельных ветвей задачи внутри одного процесса. Многопоточность позволяет ОС поддерживать выполнение нескольких параллельно испол­няемых частей программы.

Внутри процесса может быть запущено множество потоков, каждый из которых:

- имеет свое состояние (исполнения, готовности,... );

- сохраняет свой контекст во время ожидания;

- имеет свои стек и статическую память для локальных переменных;

- имеет доступ к памяти и другим ресурсам всего процесса, разделяя их с другими потоками.

Итак, поток — это некая совокупность кодов внутри процесса, получающая процессорное время для выполнения. В каждом процессе всегда существует минимум один поток. Этот первичный поток формируется системой автоматически при создании процесса. Далее этот поток может породить другие потоки, те в свою очередь — новые и т. д. Таким образом, один процесс может владеть несколькими потоками, и тогда они одновре­менно исполняют код в адресном пространстве процесса.

Каждый поток имеет:

- уникальный идентификатор потока;

- содержимое набора регистров процессора, отражающих состояние процессора;

- два стека, один из которых используется потоком при выполнении в режиме ядра, а другой — в пользовательском режиме;

- доступ к отделам памяти и ресурсам процесса, которым этот поток принадлежит;

- закрытую область памяти, называемую локальной памятью потока (TLS — thread local storage) и используемую подсистемами ядра, run-time библиотеками и DLL (Dynamic Link Library — «библиотека динамической компоновки»).

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

Использование потоков имеет свои преимущества:

- поток завершается значительно быстрее, чем процесс, поскольку не нужно освобождать ресурсы системы;

- переключение потоков в одном процессе происходит намного быстрее;

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

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

Однако при использовании нитей возникает и ряд проблем:

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

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

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


 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...