Лекция: Средства синхронизации параллельных процессов
Все известные средства для решения проблемы взаимного исключения основаны на использовании специально введенных аппаратных возможностей, к которым относятся блокировка памяти, специальные команды типа «проверка и установка» и управление системой прерываний. Что позволяет организовать такие механизмы, как семафорные операции, мониторы, почтовые ящики.
Блокировка памяти – это средство запрещает одновременное исполнение двух (и более) команд, которые обращаются к одной и той же ячейке памяти. Команды типа «проверка и установка» – когда один из процессов выполняет свой критический интервал, любой другой процесс, который пытается войти в свою критическую секцию, попадает в цикл проверки соответствующих переменных-флагов, регламентирующих доступ к критическим переменным.
Семафор— переменная специального типа, которая доступна параллельным процессам для проведения над ней только двух неделимых операций: «закрытия» и «открытия», названных соответственно Р- и V-операциями.
Семафорный механизм работает по схеме, в которой сначала исследуется состояние критического ресурса, идентифицируемое значением семафора, а затем уже осуществляется допуск к критическому ресурсу или отказ от него на некоторое время.
Монитор — это механизм организации параллелизма, который содержит как данные, так и процедуры, необходимые для реализации динамического распределения конкретного общего ресурса или группы общих ресурсов.
Тесное взаимодействие между процессами предполагает не только синхронизацию — обмен временными сигналами, но и передачу, и получение произвольных данных — обмен сообщениями. В системе с одним процессором посылающий и получающий процессы не могут работать одновременно. Для хранения посланного, но еще не полученного сообщения необходимо место. Оно называется буфером сообщений, или почтовым ящиком.
Кэширование – это универсальный метод, пригодный для ускорения доступа к оперативной памяти, к диску и к другим видам запоминающих устройств. Если кэширование применяется для уменьшения среднего времени доступа к оперативной памяти, то в качестве кэша используют быстродействующую статическую память. Если кэширование используется системой ввода-вывода для ускорения доступа к данным, хранящимся на диске, то в этом случае роль кэш-памяти выполняют буферы в оперативной памяти, в которых оседают наиболее активно используемые данные.
Рис. 99
Согласование скоростей обмена и кэширование данных. Обеспечивается буферизацией данных в оперативную память или на диск. Другой путь – использование большой буферной памяти в контроллерах внешних устройств.
· Кэширование дескрипторов сегментов в скрытых регистрах. Для каждого сегментного регистра в процессоре имеется так называемый скрытый регистр дескриптора. В скрытый регистр при загрузке сегментного регистра помещается информация из дескриптора, на который указывает данный сегментный регистр. Информация из дескриптора сегмента используется для преобразования виртуального адреса в физический при чисто сегментной организации памяти либо для получения линейного виртуального адреса при страничном механизме.
· Кэширование пар номеров виртуальных и физических страниц в буфере ассоциативной трансляцииTLB позволяет ускорять преобразование виртуальных адресов в физические при сегментно-страничной организации памяти. TLB представляет собой ассоциативную память небольшого объема, предназначенную для хранения интенсивно используемых дескрипторов страниц. В процессоре Pentium имеются отдельные TLB для инструкций и данных.
· Кэширование данных и инструкций в кэш-памяти первого уровня (внутренняя кэш-память) имеет объем 16/32 Кбайт. В процессоре Pentium кэш первого уровня разделен на память для хранения данных и память для хранения инструкций. Согласование данных выполняется только методом сквозной записи.
· Кэширование данных и инструкций в кэш-памяти второго уровня (внешняя кэш-память).Кэш-память второго уровня является общей для данных и инструкций и имеет объем 256/512 Кбайт. Поиск в кэше второго уровня выполняется в случае, когда констатируется промах в кэше первого уровня. Для согласования данных в кэше второго уровня может использоваться как сквозная, так и обратная запись.
Рис. 100
Разделение устройств и данных между процессами. Устройства ввода-вывода могут предоставляться процессам как в монопольное, так и в совместное (разделяемое) использование. При этом ОС должна обеспечивать контроль доступа теми же способами, что и при доступе процессов к другим ресурсам вычислительной системы – путем проверки прав пользователя или группы пользователей, от имени которых действует процесс, на выполнение той или иной операции над устройством.
Современные ОС поддерживают файловую модель периферийных устройств, когда любое устройство выглядит для прикладного программиста последовательным набором байт, с которым можно работать с помощью унифицированных системных вызовов (например, read и write), задавая имя файла-устройства и смещение от начала последовательности байт.
Рис. 101
Менеджер ввода-вывода.Модули, организующие согласованную работу всех остальных компонентов подсистемы ввода-вывода и взаимодействие с пользовательскими процессами и другими подсистемами ОС, распределенные по всем уровням, образуют оболочку, называемую менеджером ввода-вывода.
Верхний слой поддерживает пользовательский интерфейс ввода-вывода, создавая для прикладных программистов максимум удобств по манипулированию внешними устройствами и расположенными на них данными.
Нижний слой реализует непосредственное взаимодействие с контроллерами внешних устройств, экранируя драйверы от особенностей аппаратной платформы компьютера. Он принимает от драйверов запросы на обмен данными с регистрами контроллеров в некоторой обобщенной форме, а затем преобразует эти запросы в зависящий от аппаратной платформы формат.
Рис. 102
Многоуровневые драйверы.Функции по управлению устройством не концентрируются в одном программном модуле, а распределяются между несколькими модулями в соседних слоях иерархии. Традиционные драйверы, которые стали называть аппаратными драйверами, низкоуровневыми драйверами, подчеркивая их непосредственную связь с управляемым устройством, освобождаются от высокоуровневых функций и занимаются только низкоуровневыми операциями.
При таком подходе повышается гибкость и расширяемость функций по управлению устройством. Если различным приложениям необходимо работать с различными логическими моделями одного и того же физического устройства, то для этого достаточно установить в системе несколько драйверов на одном уровне, работающих над одним аппаратным драйвером.
Высокоуровневые драйверы оформляются по тем же правилам и придерживаются тех же внутренних интерфейсов, что и аппаратные драйверы. Высокоуровневые драйверы, как правило, не вызываются по прерываниям, так как взаимодействуют с управляемым устройством через посредничество аппаратных драйверов. Менеджер ввода-вывода управляет драйверами однотипно, независимо от того, к какому уровню он относится.
Рис. 103
Принцип независимости программ от внешних устройств. Связь программ с конкретными устройствами производится не на уровне трансляции программы, а в период планирования ее исполнения. В результате перекомпиляция при работе программы с новым устройством, на котором располагаются данные, не требуется. Принцип позволяет одинаково осуществлять операции управления внешними устройствами независимо от их конкретных физических характеристик.
Рис. 104
Рис. 105
Использование блокирующих (синхронных) и неблокирующих (асинхронных) передач. Большинство операций физического ввода-вывода выполняется асинхронно – процессор начинает передачу и переходит на другую работу, пока не наступает прерывание. Пользовательские программы намного легче писать, если операции ввода-вывода блокирующие — после команды READ программа автоматически приостанавливается до тех пор, пока данные не попадут в буфер программы. ОС выполняет операции ввода-вывода асинхронно, но представляет их для пользовательских программ в синхронной форме.
Многослойное построение программного обеспечения, характерное для ОС вообще, оказывается особенно естественным и полезным при построении подсистемы ввода-вывода. При большом разнообразии устройств ввода-вывода, обладающих существенно различными характеристиками, иерархическая структура программного обеспечения позволяет соблюсти баланс между двумя такими противоречивыми требованиями, как:
1. Учет всех особенностей каждого устройства.
2. Обеспечение единого логического представления и унифицированного интерфейса для устройств всех типов.
Рис. 106
При этом нижние слои подсистемы ввода-вывода должны включать индивидуальные драйверы, написанные для конкретных физических устройств, а верхние слои должны обобщать процедуры управления этими устройствами.
Менеджер ввода-вывода.Модули, организующие согласованную работу всех остальных компонентов подсистемы ввода-вывода и взаимодействие с пользовательскими процессами и другими подсистемами ОС, распределенные по всем уровням, образуют оболочку, называемую менеджером ввода-вывода
Верхний слой поддерживает пользовательский интерфейс ввода-вывода, создавая для прикладных программистов максимум удобств по манипулированию внешними устройствами и расположенными на них данными.
Нижний слой реализует непосредственное взаимодействие с контроллерами внешних устройств, экранируя драйверы от особенностей аппаратной платформы компьютера. Он принимает от драйверов запросы на обмен данными с регистрами контроллеров в некоторой обобщенной форме, а затем преобразует эти запросы в зависящий от аппаратной платформы формат.
Важной функцией менеджера ввода-вывода является создание некоторой среды для остальных компонентов подсистемы, которая бы облегчала их взаимодействие друг с другом. Эта задача решается за счет создания некоторого стандартного внутреннего интерфейса взаимодействия модулей ввода-вывода между собой
Еще одной функцией менеджера ввода-вывода является организация взаимодействия модулей ввода-вывода с модулями других подсистем ОС, таких как подсистема управления процессами, виртуальной памятью и другими.
Многоуровневые драйверы.Функции по управлению устройством не концентрируются в одном программном модуле, а распределяются между несколькими модулями в соседних слоях иерархии. Традиционные драйверы, которые стали называть аппаратными драйверами, низкоуровневыми драйверами, подчеркивая их непосредственную связь с управляемым устройством, освобождаются от высокоуровневых функций и занимаются только низкоуровневыми операциями.
При таком подходе повышается гибкость и расширяемость функций по управлению устройством. Если различным приложениям необходимо работать с различными логическими моделями одного и того же физического устройства, то для этого достаточно установить в системе несколько драйверов на одном уровне, работающих над одним аппаратным драйвером.
Высокоуровневые драйверы оформляются по тем же правилам и придерживаются тех же внутренних интерфейсов, что и аппаратные драйверы. Высокоуровневые драйверы, как правило, не вызываются по прерываниям, так как взаимодействуют с управляемым устройством через посредничество аппаратных драйверов. Менеджер ввода-вывода управляет драйверами однотипно, независимо от того, к какому уровню он относится.
Специальные файлы.Специальные файлы, называемые иногда виртуальными, не связаны со статичными наборами данных, хранящихся на дисках, а являются удобным унифицированным представлением устройств ввода-вывода. Специальный файл всегда связан с некоторым устройством ввода-вывода и представляет его для остальной части операционной системы и прикладных процессов в виде неструктурированного набора байт. Со специальным файлом можно работать так же, как и с обычным, то есть открывать, считывать из него определенное количество байт или же записывать в него определенное количество байт, а после завершения операции закрывать. Для этого используются те же системные вызовы, что и для работы с обычными файлами.
Файл – это именованная область внешней памяти, в которую можно записывать и из которой можно считывать данные. Файлы хранятся в памяти, не зависящей от энергопитания, обычно на магнитных дисках.
Основные цели использования файла перечислены ниже.
· Долговременное и надежное хранение информации.
· Совместное использование информации.
Рис. 107
Файловая система— это часть общей системы управления памятью, ответственная преимущественно за управление файлами, которые хранятся во внешней памяти.
Файловая система – способ организации хранения и доступа к данным на внешних носителях.
Файловая система (ФС) – это часть операционной системы, включающая:
· совокупность всех файлов на диске;
· наборы структур данных, используемых для управления файлами;
· комплекс системных программных средств, реализующих различные операции над файлами, такие как создание, уничтожение, чтение, запись, именование и поиск файлов.
Основные функции ФС нацелены на решение следующих задач:
· именование файлов;
· программный интерфейс для приложений;
· отображения логической модели файловой системы на физическую организацию хранилища данных;
· устойчивость файловой системы к сбоям питания, ошибкам аппаратных и программных средств;
· организация совместного доступа к файлу из нескольких процессов.
· в многопользовательских системах появляется еще одна задача: защита файлов одного пользователя от несанкционированного доступа другого пользователя.
Типы файлов:
· обычные файлы, содержат информацию произвольного характера, которую заносит в них пользователь или которая образуется в результате работы системных и пользовательских программ;
· файлы-каталоги, содержат системную справочную информацию о наборе файлов, сгруппированных пользователями по какому-либо неформальному признаку;
· специальные файлы – фиктивные файлы, ассоциированные с устройствами ввода-вывода, которые используются для унификации механизма доступа к файлам и внешним устройствам;
· именованные конвейеры,
· отображаемые в память файлы и другие.
·
Рис. 108
Рис. 109