русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Механизмы параллельных вычислений в unix

UNIX предоставляет различные механизмы для синхронизации и связи ме­жду процессами  В этом разделе мы рассмотрим важнейшие из них:

  • каналы;
  • сообщения;
  • разделяемую память;
  • семафоры;
  • сигналы.

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

 

Каналы

Каналы (pipes) являются одним из наиболее значительных вкладов UNIX в развитие операционных систем. Разработанные на основе концепции сопрограмм [RITC84], каналы представляют собой циклические буфера, которые позволяют двум процессам связываться друг с другом в соответствии с моделью производи­тель/потребитель. Следовательно, канал — не что иное, как очередь, работаю­щая по принципу "первым вошел — первым вышел", запись в которую осущест­вляется одним процессом, а чтение — другим.

При создании канала он получает буфер определенного размера. При записи в канал при наличии свободного места соответствующий запрос удовлетворяется немедленно; в противном случае процесс блокируется. Аналогично блокируется процесс, пытающийся прочесть из канала большее количество информации, чем имеющееся в нем; в противном случае запрос на чтение выполняется немедлен­но. Операционная система обеспечивает взаимоисключения — одновременно дос­туп к каналу имеет только один процесс.

Существует два типа каналов: именованные и неименованные. Совместно использовать неименованные каналы могут только связанные друг с другом про­цессы; не связанные друг с другом процессы могут совместно использовать толь­ко именованные каналы.

 

Сообщения

Сообщение представляет собой блок текста определенного типа. UNIX для работы с системой передачи сообщений предоставляет процессам системные вы­зовы msgsnd и msgrcv. С каждым процессом связана очередь сообщений, функ­ционирующая подобно почтовому ящику.
Указанный отправителем тип сообщения может быть использован получа­телем как критерий отбора сообщений. Он может получать сообщения либо в со­ответствии с принципом "первым вошел — первым вышел", либо в соответствии с их типом. При попытке отправить сообщение в заполненную очередь выполне­ние процесса приостанавливается, так же как и при попытке прочесть сообщение из пустой очереди. Если же процесс пытается прочесть сообщение определенного типа, но такого сообщения в очереди нет, процесс не приостанавливается.

 

Разделяемая память

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

 

Семафоры

Система вызовов семафоров в UNIX System V представляет собой обобщение примитивов wait и signal, определенных в главе 5, "Параллельные вычисления: взаимоисключения и многозадачность". Все требуемые при работе с семафорами опе­рации выполняются ядром автоматически; ни один процесс не может получить дос­туп к семафору, пока с ним выполняется операция, вызванная другим процессом.
Семафор состоит из следующих элементов.
Текущее значение семафора.
Идентификатор последнего процесса, работавшего с семафором.
Количество процессов, ожидающих,  пока значение семафора не превысит
текущее.
Количество процессов, ожидающих, пока значение семафора не станет равным нулю.
С семафором связаны очереди приостановленных процессов.
При создании семафоры принадлежат множествам. Множество может со­держать как один так и несколько создаваемых семафоров. Системный вызов semctl позволяет установить значения всех семафоров множества одновременно. Кроме того, имеется системный вызов semop, в качестве аргумента которому пе­редается список операций с семафорами (по одной для каждого семафора из множества). При этом вызове ядро выполняет указанные операции одновремен­но. Каждая из операций определяется значением sem_op.
Если sem_op положительно, ядро увеличивает значение семафора и активизирует все процессы, ожидающие увеличения значения семафора.

Если sem_op равно 0, ядро проверяет значение семафора. Если оно нулевое, то ядро  переходит к выполнению операций со следующим  семафором; в противном случае количество процессов, ожидающих обнуления семафора,
увеличивается, и процесс приостанавливается до тех пор, пока значение семафора не станет равным нулю.
Если sem_op отрицательно, а его абсолютное значение не превышает значение семафора,  ядро добавляет sem_op (отрицательное число!) к значению
семафора. Если полученный результат равен нулю, ядро активизирует все процессы, ожидавшие обнуления значения семафора.
Если sem_op отрицательно, а его абсолютное значение больше значения семафора, ядро приостанавливает процесс до тех пор, пока значение семафора не увеличится.
Такое обобщение семафоров обеспечивает значительную гибкость при вы­полнении синхронизации и координации процессов.

 

Сигналы

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

Процессы могут посылать сигналы друг другу; в обмене сигналами может принимать участие и ядро. Доставка сигнала выполняется путем обновления по­ля в таблице процесса, которому послан данный сигнал. Поскольку каждый сиг­нал соответствует отдельному биту, сигналы одного типа не могут накапливаться в виде очереди. Сигнал обрабатывается сразу же после активизации процесса или возврата его из системного вызова. Процесс может ответить на сигнал вы­полнением некоторых действий по умолчанию (например, завершением работы), выполнить функцию обработки сигнала или проигнорировать его.
В табл. 6.1 перечислены сигналы UNIX SVR4.
Таблица 6.1. Сигналы UNIX


Значение

      Имя

             Описание

1

SIGHUP

Завесить; посылается процессу, когда ядро полагает, что пользователь этого процесса выполняет бесполезную работу

2

SIGINT

Прерывание

3

SIGQUIT

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

4

SIGILL

Некорректная инструкция

5

SIGTRAP

Запуск кода трассировки процесса

6

SIGIOT

Инструкция ЮТ

7

SIGEMT

Инструкция ЕМТ

8

SIGFPT

Исключение при работе с числами с плавающей точкой

9

SIGKILL

Прекращение работы процесса

10

SIGBUS

Ошибка шины

11

SIGSEGV

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

12

SIGSYS

Неверный аргумент системного вызова

13

SIGPIPE

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

14

SIGALARM

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

15

SIGTERM

Завершение работы программы

16

SIGUSR1

Пользовательский сигнал 1

17

SIGUSR2

Пользовательский сигнал 2

18

SIGCLD

Завершение дочернего процесса

19

SIGPW

Сбой питания

Просмотров:

Вернуться в оглавление:Операционные системы




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.