Регистры: различия между версиями

Перейти к навигации Перейти к поиску
нет описания правки
(Новая страница: «== Ключевые слова и синонимы == Разделяемая память (без ожидания); регистры без ожидания; общие переменные без ожидания; аппаратные средства асинхронной связи == Постановка задачи == Рассмотрим систему асинхронных процессов, которые общаются между собой,...»)
 
Нет описания правки
Строка 3: Строка 3:


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




Задача состоит в конструировании общих переменных, для которых выполняются следующие два свойства. (1) Выполнение операций не обязательно атомарно, то есть они не являются неделимыми, а состоят из атомарных подопераций; (2) каждая операция завершает свое выполнение за ограниченное число собственных шагов, независимо от наличия других операций и их относительной скорости. Таким образом, выполнение операций не требует ожидания. Эти два свойства дают основание для классификации общих переменных в зависимости от их выходных характеристик. Лэмпорт [8] выделяет три категории общих переменных с одним райтером, используя отношение старшинства для выполнения операций, определяемое следующим образом: при выполнении операций A и B операция A предшествует B (обозначается A -> B), если A завершается до начала B; A и В перекрываются, если ни A не предшествует B, ни B не предшествует A. Среди переменных с одним райтером все операции записи полностью упорядочены согласно отношению "->". Лэмпорт следующим образом определяет три категории общих переменных с одним райтером:
Задача состоит в конструировании общих переменных, для которых выполняются следующие два свойства. (1) Выполнение операций не обязательно атомарно, то есть они не являются неделимыми, а состоят из атомарных подопераций; (2) каждая операция завершает свое выполнение за ограниченное число собственных шагов, независимо от наличия других операций и их относительной скорости. Таким образом, выполнение операций ''не требует ожидания''. Эти два свойства дают основание для классификации общих переменных в зависимости от их выходных характеристик. Лэмпорт [8] выделяет три категории общих переменных с одним райтером, используя отношение старшинства для выполнения операций, определяемое следующим образом: при выполнении операций A и B операция A ''предшествует'' B (обозначается <math> A \to B</math>), если A завершается до начала B; A и В ''перекрываются', если ни A не предшествует B, ни B не предшествует A. Среди переменных с одним райтером все операции записи полностью упорядочены согласно отношению "<math>\to</math>". Лэмпорт следующим образом определяет три категории общих переменных с одним райтером:


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


2. Обычная переменная – это безопасная переменная, для которой операция чтения, перекрывающаяся с одной или несколькими операциями записи, возвращает либо значение последней операции записи, предшествующей чтению, либо значение одной из перекрывающихся операций записи.
2. ''Обычная'' переменная – это безопасная переменная, для которой операция чтения, перекрывающаяся с одной или несколькими операциями записи, возвращает либо значение последней операции записи, предшествующей чтению, либо значение одной из перекрывающихся операций записи.


3. Атомарная переменная – это обычная переменная, для которой операции чтения и записи ведут себя так, словно они выполняются в некотором общем порядке, который является расширением отношения предшествования.
3. ''Атомарная'' переменная – это обычная переменная, для которой операции чтения и записи ведут себя так, словно они выполняются в некотором общем порядке, который является расширением отношения предшествования.




Общая переменная является булевой //булевы переменные называются битами// или многозначной в зависимости от того, может ли она содержать только одно из двух или одно из более чем двух значений. Общая переменная с несколькими райтерами может быть записана и прочитана (одновременно) несколькими процессами. Если имеется только один райтер и более одного ридера, такая переменная называется многоридерной.
Общая переменная является ''булевой'' //булевы переменные называются битами// или ''многозначной'' в зависимости от того, может ли она содержать только одно из двух или одно из более чем двух значений. ''Мультирайтерная'' переменная может быть записана и прочитана (одновременно) несколькими процессами. Если имеется только один райтер и более одного ридера, такая переменная называется ''мультиридерной''.


== Основные результаты ==
== Основные результаты ==
4446

правок

Навигация