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

Завершение связи

Надежность средств связи

Для того чтобы способ коммуникации был надежным не обходимо и достаточно выполнить условие:

1) не должна происходить потеря информации,

2) не должно происходить повреждений информации,

3) не должна появляться лишняя информация,

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

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

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

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

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

Пример: пусть есть программа, написанная на псевдоязыке программирования.

Процесс 1 Процесс 2
Ввести массив а  
Ввести массив в  
Ввести массив с а=а + в
а = а + в  
с = а + с  
Вывести массив с  

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

Процесс 1 Процесс 2
Ввести массив а  
Ожидания ввода массива а  
Ввести массив в  
Ожидания ввода массива  
Ввести массив с  
Ожидания ввода массива с а =а + в
с = а +с  
Вывести массив с  
Ожидание вывода массива с  

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

Процесс 1 Процесс 2
Ввести массив а Ожидания окончания ввода массива а и в
Ожидания окончания ввода массива а  
Ввести массив в  
Ожидания окончания ввода массива  
Ввести массив с  
Ожидания окончания ввода массива с а =а + в
с = а +с  
Вывести массив с  
Ожидание окончания вывода массива с  

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

Создать процесс 2

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

Выделяем общую память

Ожидание окончания ввода а и в

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

1-4

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

а =а +в

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

5-9

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: