Главная страница

Лекция 1 Введение в системное программное обеспечение


Скачать 0.9 Mb.
НазваниеЛекция 1 Введение в системное программное обеспечение
Дата14.05.2022
Размер0.9 Mb.
Формат файлаdoc
Имя файлаf66a995.doc
ТипЛекция
#528406
страница5 из 10
1   2   3   4   5   6   7   8   9   10

Мьютекс


Мью́текс (англ. mutex, от mutual exclusion — взаимное исключение) — одноместный семафор, служащий в программировании для синхронизации одновременно выполняющихся потоков.

Мьютексы (mutex)это один из вариантов семафорных механизмов для организации взаимного исключения. Они реализованы во многих ОС, их основное назначение – организация взаимного исключения для потоков из одного и того же или из разных процессов.

Мьютексы – это простейшие двоичные семафоры, которые могут находиться в одном из двух состояний – отмеченном или неотмеченном (открыт и закрыт соответственно). Когда какой-либо поток, принадлежащий любому процессу, становится владельцем объекта mutex, последний переводится в неотмеченное состояние. Если задача освобождает мьютекс, его состояние становится отмеченным.

Организация последовательного доступа к ресурсам с использованием мьютексов становится несложной, поскольку в каждый конкретный момент только один поток может владеть этим объектом. Для того, чтобы объект mutex стал доступен потокам, принадлежащим разным процессам, при создании ему необходимо присвоить имя. Потом это имя нужно передать «по наследству» задачам, которые должны его использовать для взаимодействия. Для этого вводятся специальные системные вызовы (CreateMutex), в которых указывается начальное значение мьютекса и его имя.

Для работы с мьютексом имеется несколько функций. Помимо уже упомянутой функции создания такого объекта (CreateMutex), есть функции открытия (OpenMutex) и функция освобождения этого объекта (ReleaseMutex). Конкретные обращения к этим функциям и перечни передаваемых и получаемых параметров нужно смотреть в документации на соответствующую ОС.

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

Цель использования мьютексов — защита данных от повреждения; однако им порождаются другие проблемы, такие как взаимная блокировка (клинч) и «соревнование за ресурс».

См. также


  • Многопоточность

  • Фьютекс, быстрый пользовательский мьютекс

Именованный канал


В программировании именованный канал или именованный конвейер (англ. namedpipe) — расширение понятия конвейера в Unix и подобных ОС, один из методов взаимодействия между процессами (англ.) (англ. IPC, inter-processcommunication). Это понятие также существует и в Microsoft Windows, хотя там его семантика существенно отличается. Традиционный канал — «безымянен», потому что существует анонимно и только во время выполнения процесса. Именованный канал — существует в системе и после завершения процесса. Он должен быть «отсоединён» или удалён когда уже не используется. Процессы обычно подсоединяются к каналу для осуществления взаимодействия между процессами.

Именованные каналы в Unix


Вместо традиционного, безымянного конвейера оболочки (англ. shellpipeline), именованный канал создаётся явно с помощью mknod или mkfifo, и два различных процесса могут обратиться к нему по имени.

Например, можно создать канал и настроить gzip на сжатие того, что туда попадает:

mkfifo pipe

gzip -9 -c < pipe > out

Параллельно, в другом процессе можно выполнить:

cat file > pipe

что приведёт к сжатию передаваемых данных gzip-ом.

Именованные каналы в Windows


В Windows дизайн именованных каналов смещён к взаимодействию «клиент-сервер», и они работают во многом как сокеты: помимо обычных операций чтения и записи, именованные каналы в Windows поддерживают явный «пассивный» режим для серверных приложений (для сравнения: Unix domain socket (англ.)). Windows 95 поддерживает клиенты именованных каналов, а системы ветви Windows NT могут служить также и серверами.

К именованному каналу можно обращаться в значительной степени как к файлу. Можно использовать функции Windows API CreateFile, CloseHandle, ReadFile, WriteFile, чтобы открывать и закрывать канал, выполнять чтение и запись. Функции стандартной библиотеки Си такие как fopen, fread, fwrite и fclose, тоже можно использовать, в отличие от сокетов Windows (англ.), которые не реализуют использование стандартных файловых операций в сети. Интерфейс командной строки (как в Unix) отсутствует.

Именованные каналы — не существуют постоянно и не могут, в отличие от Unix, быть созданы как специальные файлы в произвольной доступной для записи файловой системе, но имеют временные имена (освобождаемые после закрытия последней ссылки на них), которые выделяются в корне файловой системы именованных каналов (англ. namedpipefilesystem, NPFS) и монтируются по специальному пути «\\.\pipe\» (т. е. у канала под названием «foo» полное имя будет «\\.\pipe\foo»). Анонимные каналы, использующиеся в конвейерах — это на самом деле именованные каналы со случайным именем.

Именованные каналы обычно не доступны непосредственно пользователю, но есть существенные исключения. Например, средство виртуализации рабочих станций VMWare может открывать эмулируемый последовательный порт для главной системы как именованный канал, а отладчик уровня ядра kd от Microsoft поддерживает именованные каналы в качестве средства сообщения при отладке (фактически, так как kd обычно требует подключения к целевому компьютеру по последовательному порту, VMware и kd можно соединить вместе для отладки драйверов устройств на одном компьютере). Обе программы требуют от пользователя указания имён канала в виде «\\.\pipe\имя».

Именованные каналы в Windows NT могут наследовать контекст безопасности.

Именованные каналы в сетях Windows


Именованные каналы — это также сетевой протокол в SMB, основанный на использовании особой части IPC (англ.). IPC в SMB может бесшовно и прозрачно передавать контекст аутентификации пользователя на другую сторону именованного канала. Наследование аутентификации для именованных каналов Windows NT для пользователя и разработчика настолько прозрачно, что почти незаметно, в связи с чем его часто неправильно понимают.

См. также


  • Анонимный канал

Внешние ссылки


  • The Linux Programmer's Guide: Named Pipes

  • Linux Journal: Introduction to Named Pipes

  • MSDN Library: Named Pipes

  • Better Pipes for Windows 95/NT (1996 Bill Heyman)

  • Programing with named pipes (from Sun and for Solaris, but a general enough intro for anyone)
1   2   3   4   5   6   7   8   9   10


написать администратору сайта