The design of the UNIX Operating System 18 страница



 

Нити исполнения

 

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

 

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

 

Ввести массив a Ввести массив b Ввести массив c a = a + b

 

c = a + c

Вывести массив c

 

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

 

Ввести массив a  
Ожидание окончания операции ввода  
Ввести массив b  
Ожидание окончания операции ввода  
Ввести массив с

a = a + b

Ожидание окончания операции ввода
c = a + c  
Вывести массив с  

Основы операционных систем 46

Ожидание окончания операции вывода

 

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

 

Процесс 1 Процесс 2
Ввести массив a Ожидание ввода
Ожидание окончания массивов a и b
операции ввода  
Ввести массив b  
Ожидание окончания  
операции ввода  
Ввести массив с

a = a + b

Ожидание окончания
операции ввода  
c = a + c  
Вывести массив с  
Ожидание окончания  
операции вывода  

 

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

 

Процесс 1                                                     Процесс 2

 

Создать процесс 2 Переключение контекста

 

Выделение общей памяти

 

Ожидание ввода a и b

 

Переключение контекста Выделение общей памяти

Ввести массив a Ожидание окончания

операции ввода Ввести массив b Ожидание окончания

 

операции ввода Ввести массив с Ожидание окончания

 

операции ввода Переключение контекста

a = a + b

Переключение контекста

c = a + c

Вывести массив с Ожидание окончания операции вывода

 

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


Дата добавления: 2021-01-21; просмотров: 89; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!