Научная статья на тему 'О полурешётке состояний процессов Linux'

О полурешётке состояний процессов Linux Текст научной статьи по специальности «Математика»

CC BY
93
18
i Надоели баннеры? Вы всегда можете отключить рекламу.
Журнал
Чебышевский сборник
Scopus
ВАК
RSCI
Область наук
Ключевые слова
МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ / ПРИКЛАДНАЯ АЛГЕБРА / ПОЛУГРУППЫ / ДЕРЕВЬЯ / UNIX-ПОДОБНЫЕ ОПЕРАЦИОННЫЕ СИСТЕМЫ / СИСТЕМНЫЕ ВЫЗОВЫ / ДЕРЕВО ПРОЦЕССОВ / ВОССТАНОВЛЕНИЕ ПО КОНТРОЛЬНЫМ ТОЧКАМ / ЗАМЫКАНИЯ / MATHEMATICAL MODELING / APPLIED ALGEBRA / SEMI-GROUPS / TREES / UNIX-LIKE OPERATING SYSTEMS / SYSTEM CALLS / PROCESS TREE / CHECKPOINT RESTORE / CLOSURES

Аннотация научной статьи по математике, автор научной работы — Ефанов Николай Николаевич

В работе рассматривается структура данных множество состояний процессов Linux, которая используется в задаче восстановления дерева процессов в Unix-подобных операционных системах. Целью исследования является анализ зависимостей в такой структуре, введение естественного порядка по зависимостям, предложение и обоснование возможности его введения как верхней полной полурешётки. Следующие из технических свойств прикладной задачи иерархии атрибутов позводяют ввести дополнительные ограничения на минимальные верхние границы в полурешётке. Ограничения формально описываются в виде подходящих операторов предзамыкания и замыкания. Из ограничений следует необходимое условие корректности дерева процессов. На основании свойств точек, возвращаемых введёнными операторами и схемы выполнения системного вызова, приводится достаточное условие корректности: для каждого атрибута, возникающего в контексте процесса, должно существовать решёточно упорядоченное относительно наследуемого порядка множество, содержащее промежуточные состояния процессов, через которые и разрешаются зависимости. Введённые условия формируют критерий корректности дерева процессов, что может быть полезно в таких задачах как генерация тестов для систем сохранения и восстановления состояний Unix-подобных ОС, поиск аномалий, повышение портабельности и надёжности программных комплексов. Приводятся также схемы зависимостей между атрибутами, которые вводят частные ограничения на реконструирующее множество. Рассматриваются открытые вопросы и предлагаются дальнейшие шаги.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

On semilattice of Linux processes’ states

The paper discusses a set of states of Linux processes as data structure, which is used in the task of process-tree reconstruction in Unix-like operating systems. The purpose of the study is to analyze dependencies in such structure, to introduce the natural order of dependencies, to propose the class of such reconstruction structure as upper complete semilattice. Following from the technical properties of the applied problem attributes’ hierarchy allow to introduce additional restrictions on the minimum upper bounds in such semilattice. Constraints are formally described as suitable pre-closure and closure operators. The constraints implies the necessary condition for the correctness of the process tree. Based on the properties of points returned by the proposed operators and system call execution scheme, a sufficient condition for correctness is given. The introduced conditions form the criterion for process-tree correctness, which can be useful in such tasks as generating tests for checkpoint-restore in Unix-like operating systems, anomalies detection, increasing portability and reliability of software. Dependency schemes between attributes that impose particular constraints on the reconstructing set are also shown. Opened questions are also highlighted and further steps are suggested.

Текст научной работы на тему «О полурешётке состояний процессов Linux»

ЧЕБЫШЕВСКИИ СБОРНИК

Том 20. Выпуск 4.

УДК 519.[172-178]

DOI 10.22405/2226-8383-2019-20-4-124-136

О полурешётке состояний процессов Linux

Н. Н. Ефанов

Ефанов Николай Николаевич — аспирант, ассистент/преподаватель кафедры информатики и вычислительной математики, Московский физико-технический институт (Национальный исследовательский университет) (г. Москва). e-mail: nefanov90@gmMil.com,

В работе рассматривается структура данных - множество состояний процессов Linux, которая используется в задаче восстановления дерева процессов в Unix-подобных операционных системах. Целью исследования является анализ зависимостей в такой структуре, введение естественного порядка по зависимостям, предложение и обоснование возможности его введения как верхней полной полурешётки. Следующие из технических свойств прикладной задачи иерархии атрибутов позводяют ввести дополнительные ограничения на минимальные верхние границы в полурешётке. Ограничения формально описываются в виде подходящих операторов предзамыкания и замыкания. Из ограничений следует необходимое условие корректности дерева процессов. На основании свойств точек, возвращаемых введёнными операторами и схемы выполнения системного вызова, приводится достаточное условие корректности: для каждого атрибута, возникающего в контексте процесса, должно существовать решёточно упорядоченное относительно наследуемого порядка множество, содержащее промежуточные состояния процессов, через которые и разрешаются зависимости. Введённые условия формируют критерий корректности дерева процессов, что может быть полезно в таких задачах как генерация тестов для систем сохранения и восстановления состояний Unix-подобных ОС, поиск аномалий, повышение портабельно-сти и надёжности программных комплексов. Приводятся также схемы зависимостей между атрибутами, которые вводят частные ограничения на реконструирующее множество. Рассматриваются открытые вопросы и предлагаются дальнейшие шаги.

Ключевые слова: математическое моделирование, прикладная алгебра, полугруппы, деревья, Unix-подобные операционные системы, системные вызовы, дерево процессов, восстановление по контрольным точкам, замыкания.

Библиография: 20 названий.

Аннотация

Для цитирования:

Н. Н. Ефанов. О полурешётке состояний процессов Linux // Чебышевский сборник, 2019, т. 20, вып. 4, с. 124-136.

CHEBYSHEVSKII SBORNIK Vol. 20. No. 4.

UDC 519.[172-1781 DOI 10.22405/2226-8383-2019-20-4-124-136

On semilattice of Linux processes' states

N. N. Efanov

Efanov Nikolay Nikolaevich — PhD Student Teaching assistant, Department of Informatics and Computational Mathematics, MIPT. Moscow Institute of Physics and Technology (National Research University) (Moscow). e-mail: nefanov90@gmMil.com,

Abstract

The paper discusses a set of states of Linux processes as data structure, which is used in the task of process-tree reconstruction in Unix-like operating systems. The purpose of the study is to analyze dependencies in such structure, to introduce the natural order of dependencies, to propose the class of such reconstruction structure as upper complete semilattice. Following from the technical properties of the applied problem attributes' hierarchy allow to introduce additional restrictions on the minimum upper bounds in such semilattice.

Constraints are formally described as suitable pre-closure and closure operators. The constraints implies the necessary condition for the correctness of the process tree. Based on the properties of points returned by the proposed operators and system call execution scheme, a sufficient condition for correctness is given. The introduced conditions form the criterion for process-tree correctness, which can be useful in such tasks as generating tests for checkpoint-restore in Unix-like operating systems, anomalies detection, increasing portability and reliability of software. Dependency schemes between attributes that impose particular constraints on the reconstructing set are also shown. Opened questions are also highlighted and further steps are suggested.

Keywords: mathematical modeling, applied algebra, semi-groups, trees, Unix-like operating systems, system calls, process tree, checkpoint restore, closures.

Bibliography: 20 titles. For citation:

N. N. Efanov, 2019, "On semilattice of Linux processes' states" , Chebyshevskii sbornik, vol. 20, no. 4, pp. 124-136.

1. Введение

Возможность сохранения и восстановления состояний процессов операционной системы (ОС) является важнейшей составляющей ряда системных, виртуализационных и прикладных программных технологий [1, 2, 3, 4, 5, 6], представляет основу многих технологий отложенной отладки программ, симуляции исполнения, обновления компонентов системы без перезагрузки, ускорения запуска программ, защиты от сбоев [2, 3]. В Unix-подобных ОС процессы объединяются в ориентированное дерево - дерево процессов [1, 4, 5, 6, 7]. Воспроизведение дерева процессов, соответствующего некоторому дереву, полученному при сохранении состояния, является важнейшей частью процедуры восстановления, а техника восстановления последовательностями системных вызовов следует из особенностей управления ресурсами системы из пользовательских программ. Такая техника применяется в случае восстановления состояний из пространства пользователя [2, 4, 5].

С целью построения гибкой процедуры реконструкции, разработаны различные математические модели, такие как анализ графа ресурсов системы [6], последовательная трансформация семантическими действиями входного дерева процессов как абстрактного синтаксического дерева в атрибутной грамматике [5], а также неявный атрибутный анализ результата ЬЛ - разбора строчной записи дерева, в которой иерархия кодируется правильными скобочными последовательностями [4]. В работах вышеперечисленных работах изучены свойства, получены полиномиальные алгоритмы восстановления некоторых типов деревьев процессов. Тем не менее, строгое исследование зависимостей между состояниями в деревьях, ровно как и разработка формальных методов проверки деревьев на корректность, являются открытыми вопросами. В работе представляются некоторые результаты исследования зависимостей между состояниями процессов, на основании изучения свойств графа восстановления - промежуточного представления, введённого в [5] (Рис. 1).

in in

Рис. 1: Исходное и промежуточные представления (слева направо): дерево процессов Т, некоторый его граф восстановления С(Т) и дополненный зависимостями (мульти)граф С(Т) и БЕР(Т). Числа при вершинах - атрибуты-идентификаторы процесса Р, группы С и сессии £ соответственно. Корневой процесс всегда имеет идентификаторы "1,1,1".

2. Промежуточные представления и их анализ

Рассматриваются два орграфа - дерево процессов

Т = (V,E) (1)

pi граф восстановления - промежуточное представление, на базе анализа которого производится восстановление дерева в работе [4]:

G(T ) = (V + ,Е +) (2)

где V + = V U Vmt - конечные вершины, дополненные промежуточными Vmi, соответствуют состояниям процессов в ходе выполнения системных вызовов, описываемых Е + как переходами между состояниями pi PiepapxpinecKPiMPi завргсршостямр! [4, 5]. Верпшны маркрфованы словарями атрибутов: W Е V + 3v.attr : v.key = val(v.attr[key])l'None', Укеу E К, где К - список ключей как ршён атрргбутов процесса: срютемных Р1дентр1фр1каторов, файловых дескрршторов, сигналов, отображений памяти и др, val(v.attr[key]) : К ^ val_with_type(key) - отображе-HPie ключей на тршрюрфованные значенрш атрр1бутов. Определяется также множество верпшн с равным значением атрибута u.attr\:D(attr\,u.attr\) = [v E V + Iv.attri = u.attri}

Definition 1. Определим зависимость между вершинами u,v Е V + как бинарное отношение (u,v) с семантикой "для реализации и требуется сначала реализовать v". Следовательно, зависимости определяют частичный порядок на V Будем говорить, что зависимость происходит по атрибуту attr, если v либо создаёт атрибут attr, либо в его контексте происходит системный вызов, выставляющий данный атрибут в v.

Используя данное определение, рассморим ещё одно промежуточное представление:

Definition 2. Графом зависимостей DEP(Т) называется мультиорграф:

DEP (T) = (V+,Edep) (3)

где Edep - множество зависимостей между вершинами.

Definition 3. Будем говорить, что атрибут attr2 доминирует над attri, если Vu е V + : Vv е D(attri, u.attri) ^ val(u.attr2) = const.

Definition 4. Доминирующий над attri атрибут attr2 назовём минимально доминирующим,тогда и только тогда, когда Vu £ V+3{f} £ V + : v.attr2 = u.attr2, VV' = {f} U v', и Vv' е V + \ {v} ^ v'.attr2 = const.

Такое определение задаёт минимальное по мощности множество, в которое включается и множество состояний с различными значениями атрибута attri, но с идентичными attr2, и его замыкание.

Definition 5. Глубиной изоляции атрибута attri называется число доминирующих над attri атрибутов: depth(attri) = Y1 ^-¡=2 attri : Vu е V + : Vv е D(attri,val(u.attri)) ^ val (u.attri) = const.

Vattrkey £ К ^ depth(attrkey) < те, в противном случае, для реализации состояния с таким атрибутом пришлось бы выполнить бесконечное число системных вызовов, так как каждый новый атрибут создаётся через отдельный вызов.

Definition 6. Максимальным по мощности доминирующим атрибутом называется attrx : Vv е V + ^ depth(v.attrx) = 0.

Для деревьев процессов такой attrx соответствует корневому PID-пространству имён [7], ввиду того, что построение дерева процессов начинается с корневого процесса Vinu, который находится в корневом PID-пространстве, и первые вызовы, создающие вложенные пространства, происходят именно в нём.

Свойства объектов, введённых в определениях 5 и 6, следуют из технических особенностей прикладной задачи, поэтому принимаются без доказательства.

Структурные свойства Vсвязанные с частичной упорядоченностью, ранее формально не исследовались. Покажем, что введение V + как верхней полурешётки [8] соответствует семантике восстановления дерева процессов.

Утверждение 1. V + с отношением зависим,ост,и образует, конечную верхнюю полурешет,ку.

Доказательство. Выберем произвольные состояния х, у, z, е V + : х = у. Рассмотрим бинарную операцию минимальной верхней границы U на V + : xUx = х; xUy = у ^^ (х, у) е Edep. U по определению идемпотентна. Докажем, что Vx, у е V +3z е V + : (х, z) е Edep, (у, z) е Edep,

U

1. (х,у) е Edep - тогда, очевидно, с = у. Случай (у,х) симметричен.

2. Покажем, что {(х,у), (у,х)} С Edep ^^ х = у.

• Допустим, что Эх, у е V+ : {(х,у), (у,х)} С Edep, и х = у. о определению зависимости, для реализации х нужно реализовать сначала у, но для этого нужно реализовать состояние, идентичное х. То есть на данном шаге нужно выполнить минимум 2 системных вызова, и требуется снова воспроизвести х.

• Пусть выполнено к — 1 итераций воспроизведения х,у, тогда нужно снова воспроизвести х, и выполнено 2(к — 1) системных вызовов.

• После шага к требуется снова воспроизвести х, следовательно, число системных вызовов не ограничено снизу, что противоречит самой схеме восстановления.

В результате заключаем, что циклические зависимости запрещены, и допустимы лишь формально в случае х = у, откуда следует коммутативность: у = х U у = у U х = х.

3. Пусть (x,y,attr\), (y,x,attr\) Е Еdep.

• Рассмотрим минимальный доминирующий атрибут: attr2- Если y.attr2 = x.attr2, и 3x'(attr2) Е D(attr2, x.attr2) - создатель ресурса, описываемого атрибутом attr2, доказательство завершено. Иначе, y.attr2 = x.attr2, и процедура повторяется.

• Пусть выполнено к — 1 = depth(attr\) шагов процедуры выше, и attrk суть атрибут корневого PID-пространства имён.

• корневое PID-пространство имён, по Определению 6, и, после к < те-шагов, % — Vinit'

Следовательно, (V U) - конечная верхняя полурешетка, с задаваемым зависимостями естественным частичным порядком и максимальным элементом Vinu-Что и требовалось доказать. □

3. Критерий корректности дерева процессов и другие результаты

Полурешеточная упорядоченность V + - крайне важный результат. В частности, для проверки корректности дерева процессов. Понятие корректности дерева процессов введено в работах [1, 4, 5] прагматично: дерево процессов Т = (V,E) является корректным, если 3G = (V+, Е+) - граф реконструкции, такой, что Е+ содержат метки-системные вызовы, и после топологической сортировки G последовательное выполнение таких меток восстанавливает V из начадьного состояния Vinu- Такое определение соответствует выразительному смыслу реконструкции: те деревья, которые заведомо невозможно восстановить, полагаются некорректными. Кроме того, все деревья, полученные из настоящих рабочих снимков [9] состояний операционных систем, полагаются корректными, так как получены именно последовательностями системных вызовов. Предыдущие работы [4, 5] рассматривали реальные, следовательно, корректные деревья процессов. С другой стороны, валидация произвольных деревьев на корректность может оказаться полезной, к примеру, в задачах генерации синтетических тестов [10] для систем сохранения и восстановления состояний ОС. Структурные свойства V+ могут представлять интерес для построения критериев такой валидации деревьев. Для обоснования данного факта, введём и докажем ряд вспомогательных утверждений.

Лемма 1. Пусть CL(v.attr\) : V+ ^ V+ - оператор, Vf Е V+ определяющий f Е V + с минимальным доминирующим атрибутом для некоторого attr\, такой, что v U CL(v) = CL(v). Тогда CL монотонный и экстенсивный.

Доказательство. Из свойств ресурсов ядра ОС, CL обладает:

1. Экстенсивностью: v < CL(v.attr\). Это свойство очевидно из факта, что атрибут не может появиться в дереве, пока соответствующий ресурс не создан.

2. Монотонностью: Vv,u Е V+ : v < и ^ CL(v.attr\) < CL(u.attr\). Предположим, что минимальный доминирующий атрибут attr\ это attr2 , и v < и . Пусть u.attr2 = v.attr2-Тогда ресурс, описываемый u.attr2 должен быть создан ранее, чем ресурс того же типа для v, либо они не сравнимы. Иначе они равны.

Definition 7. Будем обозначать оператор предзам,ы,кания[11] CL, если идемпотентность не обязана выполняться, как PCL.

Лемма 2. Пусть CL возвращает состояние, в котором минимальный доминирующий атрибут был создан. Тогда, CL - оператор замыкания [12], со строго одной неподвижной точкой для каждого f = CL(v.attri),Vv е V+, Vattri е attr в случае, если V+ соответствует порождению корректного дерева процессов.

Доказательство. Рассмотрим CL(CL(v.attri).attri).

CL(CL(v.attri).attrl) = CL(v.attri) & CL(v.attri)- создатель. Следовательно, CL идемпо-

т6нтный

Случай, если CL для вершины v с заданным атрибутом v.attri будет иметь более одной неподвижной точки, будет означать создание более одного ресурса с одним и тем же идентификатором в одной области действия данного идентификатора, что означает конфликт иден-□

Приведём некоторые результаты, следующие из полурешеточной упорядоченности V + и приведённых выше лемм:

Теорема 1. Если Т - корректное дерево процессов, то множество его вершин V до-полнимо до верхне полурешёточно упорядоченного по зависимостям V + : (\/х, у е V+ Эк : Vn > k,n < \К \ : attr к, attrn е К, depth(attrn) < \К \ — к) & (x.attrn = y.attrn) ^ {х U у = PCL(x.attrk)\PCL(y.attrk)\CL(x.attrk)) & (CL(x.attrk) = CL(y.attrk)), где CL,PCL - введённые выше операторы замыкания и предзамыкания на V+, и единственной неподвижной точкой СL является создатель минимально доминирующего атрибута для attrk.

Доказательство. (От противного).

Пусть либо V + не верхняя полурешётка, либо Эх, у е V+

VkЭn > к : (attrk, attrn е К, depth(attrn) < \К\ — depth(attrk)) & (x.attrn = y.attrn),

(ля которых х П у те равен ни PCL(x.attrk), ни PCL(y.attrk), ни CL(x.attrk), либо (CL(x.attrk) = CL(y.attrk)).

Пусть хПу не удовлетворяет состояниям, которые можно получить введением PCL(x.attrk) и PCL(x.attrk), то есть минимально доминирующие атрибуты не совпадают по значениям. Рассмотрим минимально доминирующий атрибут attrk+i для attrk; так как глубина изоляции depth(x.attrk+i) < \К\—depth(attrk) как доминирующего, следовательно, x.attrk+i = y.attrk+i. Противоречие, хПу = CL(x.attrk) соответствует случаю, когда х, у являются прямыми потомками создателя атрибута x.attrk+i, и для него рассуждения аналогичны. Кроме того, получение CL соответствует конечному числу применений PCL, при котором в силу монотонности достигается создатель атрибута x.attrk+i и y.attrk+i.

Пусть теперь CL(x.attrk) = CL(y.attrk). Но x.attrk+i = y.attrk+i, зашат, CL обязан вернуть единственную неподвижную точку - создателя attrk+i. В противном случае имеет место конфликт по идентификаторам.

Пусть теперь V + - не полурешётка. Покажем, что полурешёточная упорядоченность V+ восходит к процедуре его построения из V, если это вообще возможно. Возможны случаи:

1. Пусть Эх, у е V + : х U у не определяется однозначно, то есть существует несколько верхних границ, из любых из которых можно удовлетворить зависимости по attrk. В следствие выполнимости правой части конъюнкции из условия теоремы, все такие границы лежат в замыкании, задаваемом CL(x.attrk). Следовательно, V + следует урезать

выбором любой из данных границ в качестве наименьшей, что производится удалением лишних зависимостей. Удаление всех избыточных зависимоетей из (V + ,Еdep^j даст транзитивный остов [13] (V + ,Eexd(dep^ как граф искомой полурешётки [14].

2. Пусть для некоторых х,у Е V + таких, что в условиях правой части конъюнкции не существует наименьшей верхней границы, и её не получить из процедуры выше. Но тогда VkЗп > к : (attr^,attrn Е K,depth(attrn) < \К| — depth(attrk)) & (x.attrn = y.attrn), для которых х П у не равен ни PCL(x.attrk), ни PCL(y.attr^), ни CL(x.attrк), что, как доказано ранее, противоречит предположению о корректности дерева процессов.

Доказанная теорема представляет необходимое условие корректности дерева процессов.

Какие промежуточные состояния дают операторы PC LI Ответ на этот вопрос формулирует достаточное условие корректности дерева процессов. В частности, из него следует способ проверки произвольного дерева на корректность.

iwattn =cloj (u.attr i)

/ / 1 \ N

/ / \ Wncw.attr/ri/ \ \

/ 9

Рис. 2: Элементарный шаг восстановления состояния и : u.attr i = w.attri.

Рассмотрим некоторое состояние процесса, получаемое системным вызовом, производящимся успешно при выполнении следующих условий:

Предложение 1. Для реконструкции состояния и : u.attr i = w.attri с атрибутом attr\, созданным в состоянии wnew и "хранимым Ив состоянии w, из предшествующего состояния v : u.pid = v.pidl(u.pid = v.pid & syscall =' fork') системным вызовом, выполненным в контексте процесса с состоянием с, достаточно выполнения: c.attr2 = v.attr2 = wnew.attr2 = u.attr2, и оператор CL(w.attri) = CL(c.attri) = CL(u.attri) возвращает состояние с минимальным доминирующим атрибутом attr2 атрибута attri.

Проверка данного утверждения технически производится покрытием введённой конструкцией всех рассматриваемых случаев установки атрибута процессу, что является следствием из свойств иерархии процессов Linux [15] и особенностей использования интерфейса системных вызовов [4, 16]. Классификация атрибутных зависимостей и некоторые частные случаи таких восстанавливающих конструкций рассматриваются в Разделе 4.

Лемма 3. u,v,w,wnew,c,CL(u.attri) формируют полную решетку с частичным порядком, наследованным из V

Доказательство. c.attr2 = v.attr2 = wnew .attr2 = u.attr2jn CL(u.attri) единица peine тки. v наименьший элемент, и нет зависимостей от v, та он зависит от с, wnew^и^СL(u.attri), атрибуты attr2 которых равны между собой. То есть v - meet-элемент для любого подмножества из

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

подмножеств c,u,wnew ,CL(u.attri) и с, и, w, С L(u.attr ^, а для w,wnew - w является meet-элементом. следовательно, u,v,w,wnew, с, СL(u.attri) - полная решетка с нулем v и единицей CL(u.attri). □

Опишем данную решётку системой неравенств:

w < wnew < CL(u.attri), v < CL(u.attri), с < CL(u.attri), и < v, и < w, и < с.

V

Definition 8. Назовём v, с, w,wnew генерирующим множеством Gen(u.attri).

Существование генерирующего множества Gen(u.attri)Vu е V + \ Vinu, Vattri е К, подходящих для реконструкции - достаточное условие восстановления дерева процессов. Сформулируем критерий корректности.

Теорема 2. Дерево процессов Т коррект,но ^^ (Vu е V + \ Vinit, V + такое, что выполнены условия теоремы о необходимости, и Vattri е К ^ ЭСеп(и.аИгi) : Gen(u.attri) С V+).

Доказательство. Необходимость следует из Теоремы 1. Обоснуем достаточность. Для этого проведём некоторую процедуру реконструкции по предвосстановленным состояниям из V которая восстанавливает отношение зависимости на нём. Итак, Vu е V+ восстановление разбивается на 3 (возможно, совпадающие в частных случаях) цепочки, состояния в которых можно получить через PCL(u.attr) такой, что образ не меньше исходного состояния, причём все такие состояния лежат в замыкании, задаваемом CL(u.attr):

1. Восстанавливается создатель или "хранитель"нужного attrk- Создатель будет получен из хранителя в любом случае через конечное число применений PCL в силу монотонности. В виду восстановления в замыкании, сохраняется иерархия атрибутов: получая Vattrk е что CL(u.attrk), является создателем минимально доминирующего атрибута, повторяя данную процедуру, за конечное число шагов достигается максимально доминирующий - корневое пространсово имён.

2. Восстанавливается порядок следования состояний процессов: через отношение PCL находится в замыкании состояние-предшественник. При этом большая часть атрибутов наследуется. В конечном счёте, многократное применение PCL приводит к CL за исключением, когда attrk - это PID-пространство имён. Тогда естественным образом такие применения должны приводить к состоянию, в котором процесс был порождён, то есть его PID не совпадает с PID предшественника, и данное состояния является верхне неразложимым элементом по зависимостям: практически все атрибуты наследуются от предшественника, кроме PID, а ненаследуемые выставляются локально, без внешних зависимостей, то есть 3.dep(PCL(PCL(...(u))),parent(u)) - зависимость первого состояния процесса от его родителя. Таким образом, строится вся цепочка состояний целевого процесса.

3. Для каждой последовательной пары u,v состояний из пункта выше находится процесс, который будучи в состоянии с, выполняет системный вызов, порождающий и из v.

Восстановления выше выполняются Vu, е V + \ Vinu, Vattr е К : u.attr = v.attr, остальные атрибуты наследуются. Для всех найденных состояний w,wnew,c,v е V + и процедура поиска

также завершается успешно найденными промежуточными состояниями. Наконец, из 2-й и 3-й цепочек следует, что Vu е V + \ Vinu Эь и системный вызов, восстанавливающий отношение (и, v) в правильном порядке следования атрибутов, и такая конструкция ациклична, как

подмножество решеточно упорядоченного V + относительно наследуемого порядка. Следова-

4. Типы атрибутных зависимостей на практике

В соответствии с введёнными в Разделах 1 и 2 определениями и свойствами процессов и системных вызовов ОС Linux [15], выделим условно 4 типа атрибутных зависимостей (Рис. 3):

1. Жестко наследуемые (Hardly Inherited, HI) - bG существует цепь от создателя атрибута к наследующему ребёнку по Е+. Создатель не может изменить значение атрибута после создания соответствующего ресурса. Пример: сессии, PID-пространства имён.

2. Устанавливаемые в подобласти (Subset Inherited, SI) - "хранитель"значения, выставляемого атрибуту, предшествующее состояние процесса и состояние, из контекста которого выполняется системный вызов, лежат в замыкании, определяемом оператором CL. Данный случай представляет наиболее общее описание генерирующего множества как антицепи w, с, V, возможны также частные случаи: выставление процессу атрибута носителем с = w, выставление атрибута самому себе: с = v и др.

3. Мягко наследуемые (Mildly Inherited, MI): Создатель и наследник могут изменить значение атрибута сколь угодно раз, произведя соответствующий системный вызов. Усиление SI.

4. Свободно устанавливаемые в рамках текущего пространства имён. Согласно такой формулировке, это как наследуемые UID, GUID (Free Inherited, FI) , так и ненаследуемые (Free Non-inheritable, FN) — маски сигналов и др. На практике, большинство выставлений таких атрибутов происходит с частными условиями

и < V = с < CL(u.attr),w = wnew < CL(u.attr),

a CL(u.attr) является создателем пространства имён. Имеет место доупорядочивание генерирующего множества: с = v < w < wnew < CL(u.attr)

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

5. Заключение

В работе были исследованы свойства множества состояний процессов Linux, восстанавливающего дерево процессов, показано построение такого множества как полурешёточно упорядоченного по зависимостям. На основании свойств атрибутов процессов и полурешёточной упорядоченности был получен критерий корректности дерева процессов, то есть соответствия реальной конфигурации ОС и восстановимости. Тем не менее, представляет интерес построение формального алгоритма проверки по схеме из достаточного условия, исследования его временной и пространственной сложности. Получение и исследование частного случая критерия для деревьев процессов с набором атрибутов, урезанном до групп, сессий и процессов в едином пространстве имён, из работ [4, 5], будут исследованы и приведены в дальнейших работах автора. Одновременно с этим, представляет интерес получения частных случаев критерия для эвристических процедур из существующих систем сохранения и восстановления

111 111

а) б) в) г)

О - "конечная" вершина

(') - "промежуточная" вершина

д - точка создания ресурса (задания значения атрибуту) / - иерархические связи и системные вызовы

- зависимости по непосредственно предшествующим вершинам s - зависимости от дополнительных атрибутов

Рис. 3: Типы атрибутных зависимостей: а)строго наследуемые; б)выставляемые в подобласти; в)нестрого наследуемые; г)свободные.

состояния, таких как CRIU [2], BLCR [17], DMTCP [18], а также других приложений, к примеру, восстановления fork-join-последовательностей для многопоточного программирования [19] и для различных представлений задачи восстановления дерева процессов, например, в матричной форме [20]. На основании такого исследования будет проверена гипотеза о повышении эффективности вышеперечисленных методов за счёт уменьшения мощности множеств для поиска нужных состояний, так как состояния с нужными значениями атрибутов предположительно будут также замыкаться в соответствующих областях.

СПИСОК ЦИТИРОВАННОЙ ЛИТЕРАТУРЫ

1. Ефанов Н. Н. О некоторых комбинаторных свойствах деревьев процессов LINUX. Чебы-шевский сборник. 2018. 19(2). 151-162 сс.

2. Checkpoint-Restore In Userspace (CRIU) usage scenarios. 2019. https://criu.org/Usage_scenarios (Дата обращения: 24.05.2019)

3. Kraemer, S., Lenpers, R., Petras, D.,Philipp, Т., Hoffmann, A. Checkpointing SystemC-based virtual platforms // International Journal of Embedded and Real-Time Communication Systems, 2 (4), RWTH Aachen University, Germany 2011. pp. 21-37.

4. Efanov N. N., Einolyanov P. V. Constructing the formal grammar of system calls // In Proceedings of the 13th Central & Eastern European Software Engineering Conference in Russia (CEE-SECRT7). 2017. Article 12. 5 pages.

5. Efanov N. N., Einolyanov P. V. Linux Process Tree Reconstruction Using The Attributed Grammar-Based Tree Transformation Model // In Proceedings of the 14th Central & Eastern European Software Engineering Conference in Russia (CEE-SECR'18). 2018. ACM, NY, USA. Article 2. 7 pages.

6. Горбунов E. « Алгоритм генерации команд восстановления дерева процессов ОС Linux на основе модели жизненного цикла ресурсов ОС». Магистерская диссертационная работа, Труды Кафедры Математических и Информационных технологий, СПбАУ РАН, 2017.

7. Linux namespaces. https://en.wikipedia.org/wiki/Linux_namespaces (Дата обращения: 24.05.2019)

8. Alfred V. Aho , Jeffrey D. Ullman , The theory of parsing, translation, and compiling, Prentice-Hall, Inc., Upper Saddle River, NJ, USA, 1972. URL: dl .acm.org/citation. cfm?id=578789 (Дата обращения: 24.05.2019).

9. Sukadev Bhattiprolu, Eric W. Biederman, Serge Hallvn, and Daniel Lezcano. Virtual servers and checkpoint/г est art in mainstream Linux. SIGOPS Oper. Svst. Rev. 42, 5. July 2008, pp 104-113. doi: 10.1145/1400097.1400109

10. Kalaee, A., Rafe, V. Model-based test suite generation for graph transformation system using model simulation and search-based techniques, Information and Software Technology, Elsevier, 108, 2019, pp. 1-29.

11. A.V. Arkhangelskii, L.S.Pontrvagin, General Topology, Vol. 1, Springer-Verlag, Berlin, 1990.

12. Биркгоф, Г. Теория решеток. — М. : Наука. Главная редакция физико-математической литературы, 1984. — 568 с.

13. Aho, А. V., Garev, М. R., Ullman, J. D., The transitive reduction of a directed graph // SIAM Journal on Computing, 1 (2), 1972, pp 131-137.

14. Freese R. Automated lattice drawing //International Conference on Formal Concept Analysis.

- Springer, Berlin, Heidelberg, 2004. - pp 112-127.

15. Таненбаум Э., Бос X. Современные операционные системы. 4-е изд. — СПб.: Питер, 2015.

- 1120 с.

16. Linux system calls. MANual pages(2). 2019. http://man7.Org/linux/man-pages/man2/syscalls.2.html (Дата обращения: 24.05.2019)

17. Hargrove P. H., Duell J. C. Berkeley lab checkpoint/restart (BLCR) for linux clusters // Journal of Physics: Conference Series. - IOP Publishing, 2006. - T. 46. - Ж 1. - p. 494.

18. Arva K., Cooperman G. DMTCP: Bringing Checkpoint-Rest art to Python // Proceedings of the 12th Python in Science Conference. - 2013. 2-7 cc.

19. Zengin M.. Vafeiadis V. A programming language approach to fault tolerance for fork-join parallelism // Proceedings of the 7th International Symposium on Theoretical Aspects of Software Engineering (TASE 2013), Max Planck Institute for Software Systems (MPI-SWS), Saarsbruchen, Germany, 2013.

20. Marina Kudinova and Pavel Emelvanov. Building Mathematical Model for Restoring Processes Tree during Container Live Migration. // IVth International Conference on Engineering and Telecommunication (EnT), November 2017, Dolgoprudniv. doi: 10.1109/ICEnT.2017.41

REFERENCES

1. Efanov N.N. 2018. "On some combinatorial properties of LINUX process trees". Chebvshevskii Sbornik, 19 (2), pp. 151-162.

2. Checkpoint-Restore In Userspace (CRIU) usage scenarios. 2019. https://criu.org/Usage_scenarios

3. Kraemer, S., Leupers, R., Petras, D.,Philipp, T., Hoffmann, A. .2011. Checkpointing SvstemC-based virtual platforms. International Journal of Embedded and Real-Time Communication Systems, 2 (4), RWTH Aachen University, Germany, pp 21-37.

4. Efanov N. N., Emelvanov P. V. "Constructing the formal grammar of system calls", In Proceedings of the 13th Central k Eastern European Software Engineering Conference in Russia (CEE-SECR '17), ACM, New York, NY, USA, Article 12, 5 pages.

doi: 10.1145/3166094.3166106

5. Efanov N. N., "Emelvanov P. V. Linux Process Tree Reconstruction Using The Attributed Grammar-Based Tree Transformation Model", In Proceedings of the 14th Central k Eastern European Software Engineering Conference in Russia (CEE-SECR'18), ACM, New York, NY, USA, Article 2, 7 pages, doi: 10.1145/3290621.3290626

6. Gorbunov E. 2017. "Algoritm generatsii komand vosstanovleniva dereva processov OS Linux na osnove modeli zhiznennogo tsvkla resursov". Master's thesis, MIT SPbAU.

7. Leonardo Passos, Jianmei Guo, Leopoldo Teixeira, Krzvsztof Czarnecki, Andrzej W^sowski, and Paulo Borba 2013, "Coevolution of variability models and related artifacts: a case study from the Linux kernel", In Proceedings of the 17th International Software Product Line Conference (SPLC '13), ACM, New York, NY, USA, 91-100. doi: 10.1145/2491627.2491628

8. Alfred V. Aho , Jeffrey D. Ullman 1972, The theory of parsing, translation, and compiling, Prentice-Hall, Inc., Upper Saddle River, NJ, USA. Available at: dl.acm.org/citation.cfm? id=578789

9. Sukadev Bhattiprolu, Eric W. Biederman, Serge Hallvn, and Daniel Lezcano, 2008, "Virtual servers and checkpoint/restart in mainstream Linux", SIGOPS Operation Systems Rev. 42, no. 5, July 2008, pp. 104-113. doi:10.1145/1400097.1400109

10. Kalaee, A., Rafe, V. 2019, "Model-based test suite generation for graph transformation system using model simulation and search-based techniques Information and Software Technology, 108, Elsevier, pp. 1-29.

11. A.V. Arkhangelskii, L.S.Pontrvagin, 1990, General Topology, Vol 1, Springer-Verlag, Berlin.

12. Birkhoff, G. 1973, Lattice Theory, 3rd ed., Providence, RI : American Mathematical Society.

13. Aho, A. V., Garev, M. R., Ullman, J. D., 1972, "The transitive reduction of a directed graph", SIAM Journal on Computing, 1 (2), pp 131-137.

14. Freese, R., 2004, "Automated lattice drawing". In International Conference on Formal Concept Analysis, pp. 112-127. Springer, Berlin, Heidelberg.

15. Tanenbaum, A. S., Bos, H. 2014. Modern Operating Systems. 4th. edition.

16. Linux system calls. MANual pages(2). 2019.

http://man7.org/linux/man-pages/maii2/syscalls.2.html

17. Hargrove, P. H., k Duell, J. C. 2006. Berkeley lab checkpoint/restart (BLCR) for linux clusters. In Journal of Physics: Conference Series Vol. 46, No. 1, p. 494. IOP Publishing.

18. Arva, K., k Cooperman, G. 2013. DMTCP: Bringing Checkpoint-Rest art to Python. In Proceedings of the 12th Python in Science Conference, pp. 2-7.

19. Zengin М, Vafeiadis V. 2013, "A programming language approach to fault tolerance for fork-join parallelism", Proceedings of the 7th International Symposium on Theoretical Aspects of Software Engineering (TASE 2013), Max Planck Institute for Software Systems (MPI-SWS), Saarsbruchen, Germany, 2013. Available at:

http://plv.mpi-sws.org/ftpar/tase2013-ftpar.pdf

20. Marina Kudinova and Pavel Emelvanov. 2017, "Building Mathematical Model for Restoring Processes Tree during Container Live Migration", IVth International Conference on Engineering and Telecommunication (EnT), November 2017, Dolgoprudniv. doi: 10.1109/ICEnT.2017.41

Получено 30.05.2019 г. Принято в печать 20.12.2019 г.

i Надоели баннеры? Вы всегда можете отключить рекламу.