Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 6004.doc
Скачиваний:
21
Добавлен:
30.04.2022
Размер:
1.29 Mб
Скачать

3.1.1.Блок управления процессом (pcb)

Представителем процесса в ОС является PCB (Process Control Block). Это структура данных, содержащая информацию о процессе:

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

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

- приоритет процесса;

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

- указатели выделенных процессу ресурсов;

- область сохранения регистров, заполняющаяся в момент перевода процесса из одного состояние в другое.

Для ускорения выполнения операций в PCB предусматриваются аппаратно реализованные команды загрузки информации в PCB и выбора этой информации.

Основные операции над процессами:

1. Создание.

2. Уничтожение.

3. Приостановка.

4. Возобновление.

5. Изменение приоритета.

6. Блокировка.

7. Пробуждение.

8. Запуск.

Каждая операция может включать ряд стадий. Например, создание процесса состоит из:

- присвоения имени;

- включения имени в список;

- определения начального приоритета;

- формирования РСВ;

- выделения начальных ресурсов.

Процесс может породить новый процесс. В этом случае первый процесс называется предком, а второй - потомком. Каждый процесс-потомок имеет только одного предка, однако процесс-предок может создать несколько потомков.

3.1.2.Управление асинхронными параллельными процессами

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

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

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

В языках программирования предусматриваются конструкции для указания параллелизма. Эти конструкции, как правило, представляют следующие парные операторы:

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

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

Примером может служить пара parbegin/parend. В общем виде конструкция для указания параллелизма имеет вид

parbegin

оператор1;

оператор2;

..

операторN

parend;

Например, рассмотрим выражение для корня квадратного уравнения: x:= (-b + sqrt ( sqr(b) - 4*a*c )) / ( 2*a );

Последовательный код:

1. t1:= sqr (b);

2. t2:= 4*a;

3. t2:= t2*c;

4. t1:= t1 – t2;

5. t1:= sqrt (t1);

6. t2:= -b;

7. t1:= t2 + t1;

8. t2:= 2*a;

9. x:= t1/t2;

Параллельный код:

1. parbegin

t1:= -b;

t2:= sqr (b)

t3:= 4*a;

t4:= 2*a;

parend;

2. t5:= t3*c;

3. t5:= t2 – t5;

4. t5:= sqrt (t5);

5. t5:= t1 + t5;

6. x:= t5/t4;