Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.doc
Скачиваний:
41
Добавлен:
30.04.2013
Размер:
16.33 Mб
Скачать

/Процессы и примитивы.

Далее будем понимать под процессом целенаправленную последовательность вычислительных действий, которая характеризуется:

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

  • содержимым соответствующей ему памяти, а также тем множеством данных, которыми этот процесс может манипулировать;

  • дескриптором процесса и совокупностью числовых и текстовых сведе­ний, определяющих состояние ресурсов, предоставленных процессу.

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

Примитивы.

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

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

Процессы.

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

Процессы характеризуются следующей информацией: таблицей распределения памяти процесса; текущим статусом; приоритетом выполнения; ресурсами, которые использует процесс, маской обработки и владельцем.

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

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

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

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

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

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

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

Процессы

Примитивы

1

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

Примитив, если был запущен, то дол­

жен быть выполнен до конца.

2

Процессам всегда приписываются не­

которые числовые полномочия, от­

личные от полномочий задач. Они оп­ределяют порядок перемещения про­цессов в очереди диспетчера.

Для примитивов полностью отсутст­вуют какие либо числовые характери­стики.

3

Поскольку функции ОС имеют вид процессов, то в некоторой очереди диспетчера может находиться не­

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

сколько прикладных программ. Уро­вень обслуживания определен диспет­чером.

Примитив в процессе выполнения может выполнять только одну функ­цию.

/Нити

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

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

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

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

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

  • закрытую область памяти, называемую локальной памятью потока (thread local storage, TLS) и используемую подсистемами, run-time биб­лиотеками и DLL.

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

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