Базовые определения и формализм — различия между версиями
(Первые определения) |
Anverk (обсуждение | вклад) (Ещё определения) |
||
Строка 5: | Строка 5: | ||
* <tex> H - </tex> множество '''операций''' <tex> e, f, g\ldots </tex> (чтение, запись ячеек памяти и т.п.), произошедших во время исполнения | * <tex> H - </tex> множество '''операций''' <tex> e, f, g\ldots </tex> (чтение, запись ячеек памяти и т.п.), произошедших во время исполнения | ||
* <tex> \rightarrow_H - </tex> это отношение частичного строгого порядка на множестве операций (транзитивное, антирефлексивное, асимметричное) | * <tex> \rightarrow_H - </tex> это отношение частичного строгого порядка на множестве операций (транзитивное, антирефлексивное, асимметричное) | ||
− | * <tex> e \rightarrow_H f | + | * <tex> e \rightarrow_H f </tex> означает, что операция <tex> e </tex> '''произошла до''' операции <tex> f </tex> в исполнении <tex> H </tex> |
'''Замечание''': чаще всего исполнение <tex> H </tex> понятно из контекста и опускается | '''Замечание''': чаще всего исполнение <tex> H </tex> понятно из контекста и опускается | ||
}} | }} | ||
Строка 11: | Строка 11: | ||
{{Определение | {{Определение | ||
|id = parallel_ops | |id = parallel_ops | ||
− | |definition = Пусть <tex> e, f \in H. </tex> Тогда говорят, что <tex> e </tex> '''параллельна''' <tex> f </tex>, если <tex> e \not \rightarrow f \land f \not \rightarrow e. </tex> | + | |definition = Пусть <tex> e, f \in H. </tex> Тогда говорят, что <tex> e </tex> '''параллельна''' <tex> f </tex>, если <tex> e \not \rightarrow f \land f \not \rightarrow e. </tex> <br /> Обозначение: <tex> e || f </tex> |
− | Обозначение: <tex> e || f </tex> | ||
}} | }} | ||
{{Определение | {{Определение | ||
|id = system | |id = system | ||
− | |definition = '''Система''' <tex>–</tex> это множество всех возможных исполнений. Говорим, что '''система имеет свойство <tex>P</tex>''', если ''каждое'' исполнение системы имеет свойство <tex> P </tex> | + | |definition = '''Система''' <tex>–</tex> это множество всех возможных исполнений. <br />Говорим, что '''система имеет свойство <tex>P</tex>''', если ''каждое'' исполнение системы имеет свойство <tex> P </tex> |
+ | }} | ||
+ | |||
+ | {{Определение | ||
+ | |id = global_time_model | ||
+ | |definition = '''Модель глобального времени''' определим так, что это модель, в которой в качестве '''операции''' используется временной интервал: <tex> e = [t_{inv}(e), t_{res}(e)], </tex> причём <tex> t_{inv}(e), t_{res}(e) \in \mathbb{R} </tex>. Зададим в этой модели отношение <tex> \rightarrow </tex> следующим образом: <tex> e \rightarrow f = t_{inv}(f) > t_{res}(e) </tex>. Неформально это означает, что вход в функцию, выполняющую операцию <tex> f </tex>, был осуществлён строго позже, чем был получен результат работы функции, выполняющей операцию <tex> e </tex>. <br />'''Замечание''': глобального времени не существует из-за физических ограничений, поэтому в доказательствах такая модель не используется, но помогает при визуализации различных исполнений | ||
+ | }} | ||
+ | |||
+ | {{Определение | ||
+ | |id = sequenced_control_flow | ||
+ | |definition = Исполнение системы <tex> H </tex> называется '''последовательным''', если <tex> \forall e, f \in H: (e = f) \lor (e \rightarrow f) \lor (f \rightarrow e) </tex>. То есть, если все операции линейно-упорядочены отношением "произошло до". | ||
+ | }} | ||
+ | |||
+ | ;Конфликты и гонки данных | ||
+ | : {{Определение | ||
+ | |id = conflict | ||
+ | |definition = Две операции над одной переменной, одна из которых это запись, называются '''конфликтующими'''. Соответственно, бывают '''read-write''' и ''write-write''' конфликты. | ||
+ | }} | ||
+ | : {{Определение | ||
+ | |id = data_race | ||
+ | |definition = Если две конфликтующие операции произошли параллельно, то такая ситуация называется '''гонка данных (data race)''' <br /> '''Замечание''': наличие гонки данных является свойством конкретного '''исполнения'''. | ||
+ | }} | ||
+ | : {{Определение | ||
+ | |id = data_race | ||
+ | |definition = Программа называется '''корректно синхронизированной''', если в '''любом допустимом''' исполнении нет гонок данных. | ||
}} | }} |
Версия 17:19, 30 сентября 2018
Определения
Определение: |
Исполнение системы
| это пара , где:
Определение: |
Пусть Обозначение: | Тогда говорят, что параллельна , если
Определение: |
Система Говорим, что система имеет свойство , если каждое исполнение системы имеет свойство | это множество всех возможных исполнений.
Определение: |
Модель глобального времени определим так, что это модель, в которой в качестве операции используется временной интервал: Замечание: глобального времени не существует из-за физических ограничений, поэтому в доказательствах такая модель не используется, но помогает при визуализации различных исполнений | причём . Зададим в этой модели отношение следующим образом: . Неформально это означает, что вход в функцию, выполняющую операцию , был осуществлён строго позже, чем был получен результат работы функции, выполняющей операцию .
Определение: |
Исполнение системы | называется последовательным, если . То есть, если все операции линейно-упорядочены отношением "произошло до".
- Конфликты и гонки данных
Определение: |
Две операции над одной переменной, одна из которых это запись, называются конфликтующими'. Соответственно, бывают read-write и write-write конфликты. |
Определение: |
Если две конфликтующие операции произошли параллельно, то такая ситуация называется гонка данных (data race) Замечание: наличие гонки данных является свойством конкретного исполнения. |
Определение: |
Программа называется корректно синхронизированной, если в любом допустимом исполнении нет гонок данных. |