К вопросу обеспечения устойчивого функционирования систем связи и автоматизации на железнодорожном транспорте

Введение

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

Как показал опыт создания и эксплуатации систем связи, систем управления и обработки информации на железнодорожном транспорте, их проектирование, разработка и дальнейшая модернизация осуществлялись не всегда системно, иногда с нарушениями этапности создания, иногда без учета возможности сопряжения с другими системами (без возможности дальнейшей интеграции). Нарушения в этапности проектирования одних систем (несоблюдение требований ГОСТ 34.601-90), отсутствие системных проектов при создании других систем или технических (рабочих) проектов третьих систем приводили к тому, что не все системные вопросы, а также вопросы по интеграции систем связи и их компонентов были проработаны, многие системные вопросы, в том числе вопросы по устойчивому функционированию остались без внимания. К тому же некоторые «силовые» методы внедрения разнородной техники на разных дорогах железнодорожного транспорта усложняют и сейчас их интеграцию в систему в рамках всего вида транспорта, иногда ранее принятые проектные решения, например, одних дорог не могут быть состыкованы (интегрированы) с техническими решениями других дорог.

Анализ состояния и функционирования систем и сетей связи железнодорожного транспорта показал, что во многих из них не достигнуты заданные показатели качества продукции и функционирования. У некоторых систем из-за сбоев и отказов не достигнуты требуемые показатели надежности, достаточно часто фиксировались зависания в уже развернутых системах, до сих пор обнаруживаются ошибки в программном обеспечении. Все это приводит к невысокой устойчивости функционирования систем связи в различных режимах и при разных нагрузках. Если новая система строится на компонентах уже существующих систем, то многие недостатки в вопросах устойчивости функционирования существующих систем перейдут и на вновь создаваемую.

Построение современных коммуникационных систем базируется, в основном, на интеграции наиболее передовых технологий, технических, программных и информационных компонентов из разных областей науки и техники. Поэтому в системах связи железнодорожного транспорта возможно как прямое применение одних компонентов, так и с некоторыми (иногда с существенными ) доработками других, а возможно, и разработка совершенно новых компонентов. Например, готовые компоненты систем управления из области вычислительной техники можно использовать в системах связи, в системах обработки, автоматизации и управления как проектируемых, так и модернизируемых.

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

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

Нормальное (устойчивое) функционирование систем связи и АСУ (далее по тексту - систем) железнодорожного транспорта в реальных условиях постоянно подвергается воздействию ряда дестабилизирующих факторов как внутреннего, так и внешнего характеров.

1. Основные дестабилизирующие факторы

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

К внешним дестабилизирующим факторам, также снижающим устойчивость функционирования, можно отнести аварийные и веерные отключения электропитания, а также вирусы и массовые атаки так называемых «хакеров». Результаты внешнего воздействия могут иметь катастрофические последствия вплоть до порчи технического, программного и информационного обеспечения систем и, как следствие, привести к нарушениям в выполнении процессов или отказам функционирования систем в целом.

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

 

Взаимосвязь и взаимовлияние дестабилизирующих факторов

Рис. 1. Взаимосвязь и взаимовлияние дестабилизирующих факторов

 

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

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

Ошибки в программном обеспечении - ситуации нарушенной последовательности закодированных операций по достижению конкретного результата.

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

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

Архитектурное несовершенство - несоответствие условий устойчивого функционирования совокупности процессов в системе и выбранных характеристик элементов архитектуры системы или выбранных механизмов управления информационными процессами.

Вирусы - недокументированная функциональная возможность в виде программного кода некоторого программного обеспечения (как правило, внешнего происхождения), приводящая к нарушениям безопасности информации и выполнения процессов в системах.

Атаки «хакеров» - несанкционированное получение доступа к ресурсам системы с целью умышленного нарушения безопасности информации и функционирования систем.

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

2. Предлагаемая математическая модель оценки устойчивости функционирования систем

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

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

Определение 3. Общий показатель устойчивости функционирования системы есть произведение частных показателей устойчивости.

Определение 4. Под частным показателем устойчивости функционирования понимается коэффициент устойчивости Кучi, определяемый из выражения:

формула

где Ктр - требуемое значение показателя качества функционирования системы;

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

Тогда общий показатель устойчивости системы, выражаемый как коэффициент устойчивости Ку, определяется выражением:

формула

где I - количество рассматриваемых дестабилизирующих систему факторов.

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

Так, время выполнения рассматриваемого процесса в системе оценивается его средним значением Твп j, которое определяется как статистическое среднее случайной величины tBJ выполнения j-го процесса в системе:

формула

где Твп j - среднее значение времени выполнения j-го процесса в системе;

NП - количество выполняющихся в системе процессов.

Коэффициент готовности системы Kri по выполнению некоторого процесса находится из выражения:

формула

где tnp - время производительной работы системы,

tiпотерь - потерянное (затраченное) время на обнаружение и устранение последствий от воздействия i-ro дестабилизирующего фактора.

Вполне очевидно, что уменьшение временных потерь на обнаружение и устранение последствий от воздействия каждого i-ro дестабилизирующего фактора приводит к увеличению коэффициента готовности по выполнению рассматриваемого процесса и, как следствие, к повышению устойчивости функционирования системы в целом.

Если за показатель качества функционирования системы взять коэффициент эффективности Кэф, то его значение можно найти из выражения:

формула

где M[tnp] - математическое ожидание суммарного времени производительной работы системы по реализации процессов, завершившихся в директивные сроки;

M[tiпотерь] - математическое ожидание суммарных непроизводительных потерь из-за воздействия i-ro дестабилизирующего фактора.

3. Варианты реализации компонентов обеспечения устойчивости

Для каждого i-ro дестабилизирующего фактора существует свой механизм его образования, поэтому на всех стадиях создания систем необходимо предусматривать соответствующие меры организационного, технического и программного исполнения по предотвращению, обнаружению и локализации последствий воздействия дестабилизирующих факторов. Из всего многообразия возможных вариантов обеспечения требуемой устойчивости в условиях воздействия рассматриваемого i-ro дестабилизирующего фактора выбирается тот вариант, при котором значение частного коэффициента устойчивости Kучi выше. Реализация компонентов, использование которых приводит к увеличению устойчивости функционирования системы, может быть технической, программно-технической и программной. На основе анализа механизмов возникновения дестабилизирующих факторов и соответствующих алгоритмов их нейтрализации возможно получение совокупности подходов, компонентов и механизмов, приводящих при их интегрированном применении к повышению устойчивости функционирования системы в целом.

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

Одной из стратегий обеспечения устойчивости функционирования систем может быть стратегия поэтапной (повременной) реализации последовательности фаз: фазы предотвращения, фазы обнаружения и фазы локализации. Такая же последовательность фаз должна сохраняться и при разработке компонентов по защите от воздействия дестабилизирующих факторов на этапах проектирования, развертывания и эксплуатации и дальнейшей модернизации систем.

Таблица 1. Средства обеспечения устойчивости системы

Фазы обеспечения устойчивостиДестабилизирующие факторыТехнические компоненты Программно-технические компонентыПрограммные компоненты
Фаза предотвращенияСбои
Отказы
Ошибки ПО++
Конфликты+
Тупики+
Архитектурное несовершенство++
Вирусы
Атаки «хакеров»
Аварийное откл. э/питания
Фаза обнаруженияСбои++
Отказы++
Ошибки ПО+
Конфликты+
Тупики++
Архитектурное несовершенство+
Вирусы++
Атаки «хакеров»+
Аварийное откл. э/питания
Фаза локализацииСбои++
Отказы++
Ошибки ПО
Конфликты+
Тупики+
Архитектурное несовершенство+
Вирусы+
Атаки «хакеров»++
Аварийное откл. э/питания+

В фазе предотвращения целесообразны разработка и реализация программно-технических компонентов на базе отдельных тестовых компьютеров или ЛВС, обеспечивающих при тестировании поиск ошибок в ПО и обнаружение вирусов. Программная реализация соответствующих этой фазе компонентов обеспечит повышение устойчивости систем в условиях возникновения и воздействия конфликтов, тупиков, архитектурного несовершенства элементов системы, вирусов и атак «хакеров» на основе прогноза и анализа. К этой же фазе относятся и мероприятия упреждающего характера по обеспечению безопасности информации в системе (табл. 1).

Для фазы обнаружения необходимы компоненты, реализованные технически и обеспечивающие обнаружение сбоев, отказов технических средств систем и аварийные отключения электропитания оборудования.

Программно-технические компоненты обеспечивают повышение устойчивости системы путем обнаружения сбоев и отказов, а также вирусов и атак «хакеров». Программная реализация позволяет обеспечить повышение устойчивости системы в условиях возникновения и воздействия тех конфликтов, тупиков, архитектурного несовершенства элементов системы, вирусов и атак «хакеров», последствия от которых полностью не упреждены в фазе предотвращения. К этой же фазе относятся и мероприятия по обеспечению безопасности информации в системе и реализующие в стратегии защиты фазу обнаружения дестабилизирующих факторов (табл. 1). В фазе локализации технические компоненты повышения устойчивости обеспечивают по возможности восстановление систем и выполнявшихся в них процессов от сбоев, отказов, аварийных отключений питания. Программно-технические компоненты обеспечивают восстановление процессов от сбоев, отказов, не восстановленных техническими компонентами. Программные компоненты локализуют последствия воздействия конфликтов, тупиков, вирусов и атак «хакеров», обнаруженных и не локализованных в фазе обнаружения (табл. 1).

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

Первый этап - проектирование, характеризуется совокупностью закладываемых при проектировании функциональных возможностей, выбором структур типовых объектов, выбором вариантов реализации требуемых функций. Некоторые принимаемые архитектурные проектные решения могут способствовать при определенных условиях возникновению ряда дестабилизирующих факторов на развертываемых или уже функционирующих системах. Поэтому требуются соответствующие методы и средства упреждающего характера, позволяющие еще на этапе проектирования систем свести к минимуму возникновение причин, приводящих впоследствии к снижению устойчивости функционирования развертываемых систем. Второй этап - разработка, установка и развертывание, характерен уточнением режимов функционирования, доводкой полученных ТТХ и показателей качества функционирования компонентов и систем до требуемых уровней, а также рядом организационных и программно-технических мероприятий по повышению как качества функционирования, так и устойчивости функционирования систем в целом.

Третий этап - этап тестирования, эксплуатации и модернизации, характеризуется наращиванием возможностей системы за счет ввода и интеграции новых с уже развернутыми компонентами системы, наращиванием объемов передаваемых данных, увеличением пропускной способности каналов связи, увеличением размеров буферной памяти узлов системы и т.п. Данные обстоятельства выявляют некоторые особенности, приводящие к достижению предельных значений некоторых параметров, превышение которых также может привести к снижению устойчивости систем.

4. Наиболее кризисные дестабилизирующие факторы

Из всех дестабилизирующих факторов, снижающих устойчивость функционирования систем, к самым тяжелым последствиям приводят такие внутренние дестабилизирующие факторы, как тупики, а также такие внешние дестабилизирующие факторы, как вирусы и атаки «хакеров». Поэтому имеет смысл рассмотреть их несколько подробнее.

Тупики являются наиболее «коварными» из указанного ряда дестабилизирующих факторов, природа возникновения которых лежит в параллельности выполнения процессов при одновременном использовании одной и той же совокупности ресурсов, и начало их образования исходит к конфликтам. То есть, если в какой-то момент времени параллельно выполняющимся процессам выделить некоторую запрашиваемую ими общую совокупность ресурсов, то ситуации до выделения ресурсов являются конфликтными, а после выделения - тупиковыми.

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

- тупики протокольного типа;

- тупики ресурсного типа;

- тупики архитектурного типа.

Тупики протокольного типа образуются из-за несовершенства протокольных механизмов, а также из-за ошибок в программном обеспечении, реализующем протоколы. Обнаружение и устранение причин возникновения тупиков протокольного типа называется верификацией протоколов. Для верификации протоколов разработаны и развернуты соответствующие автоматизированные системы, имитирующие события разного рода, в том числе и тупики, которые протоколы и должны корректно обрабатывать.

Тупики ресурсного типа образуются при параллельном выполнении процессов, когда имеется общая совокупность сетевых ресурсов, из-за занятости которых данные процессы не выполняются, ожидая освобождение занятых ресурсов другими процессами, которые находятся в аналогичной ситуации. Другими словами, каждый из процессов, вовлеченный в тупик, владеет некоторой совокупностью ресурсов, которые нужны другим, вовлеченным в этот же тупик, процессам. В общем случае, в системе может существовать несколько тупиков, и любой из процессов может быть вовлечен в несколько таких тупиков.

Тупики архитектурного типа порождаются вследствие некоторых выбранных характеристик элементов архитектуры системы (сети), некоторых выбранных механизмов управления информационными потоками и возникающими при этом сбоями, отказами и, чаще всего, переполнениями буферной памяти узлов системы (сети). На практике чаще всего встречались следующие тупики архитектурного типа: тупики при управлении темпом, тупики захламления, блокировка сборки, блокировка сборки при наличии резервирования, блокировка из-за порядка доставки, прямой тупик с промежуточным накоплением, косвенный тупик с промежуточным накоплением. Природа и механизмы возникновения этих тупиков различны, и необходимы особые методы и средства по обеспечению устойчивости системы в условиях воздействия тупиков.

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

5. Мероприятия по обеспечению устойчивости в условиях воздействия вирусов и атак «хакеров»

Устойчивость систем в условиях воздействия вирусов и атак «хакеров» должна обеспечиваться за счет мероприятий по созданию систем защиты информации (СЗИ). Средства СЗИ должны соответствовать требованиям, приведенным в «Доктрине информационной безопасности России», и обеспечивать следующие основные функции безопасности: аутентификацию и идентификацию; управление доступом; аудит; шифрование; контроль целостности и другие.

Аутентификация - это процесс, в котором один объект или участник безопасности (principal) проверяет подлинность другого объекта, то есть устанавливает, действительно ли он тот, за кого себя выдает. Участники безопасности - это пользователи системы, исполняемый код или компьютер. Аутентификация требует доказательства в виде реквизитов (credentials), которые могут принимать различные формы, но самые популярные - пароли, закрытые ключи, или даже отпечатки пальцев (если это биометрическая аутентификация).

Windows, например, поддерживает многие протоколы аутентификации. Некоторые из них встроены в ОС, другие можно использовать как блоки для построения собственной системы аутентификации.

После того, как подлинность участника безопасности подтверждена в процессе аутентификации, ему требуется доступ к ресурсам. Авторизация - это проверка, в процессе которой выясняется доступная аутентифицированному участнику совокупность ресурсов и предоставляется доступ к ним. Как правило, права участников безопасности на доступ к ресурсам различаются. Windows поддерживает много механизмов авторизации.

Привилегии - это право, предоставляемое пользователю, действующее в масштабах всей системы, например, возможность отладки программ, архивирования файлов, удаленного завершения работы компьютера. Некоторые действия являются привилегированными и доступны для выполнения только доверенным пользователям.

Серверные разрешения применяются для защиты своих объектов. Так, Microsoft SQL Server поддерживает разрешения, определяющие порядок доступа к таблицам, хранимым процедурам и представлениям. Приложения, основанные на СОМ+, поддерживают роли или классы пользователей для набора компонентов с одинаковыми правами доступа к наборам объектов. Роль определяет, каким пользователям разрешено вызывать интерфейсы компонента.

Множество сетевых протоколов поддерживают защиту от несанкционированного доступа (НСД), а также конфиденциальность данных. Защита от НСД подразумевает способность защитить данные от их удалений или от изменений (случайных или преднамеренных). Windows также поддерживает многие протоколы и технологии защиты от НСД.

Как показывает анализ причин проникновения «хакеров» и вирусов в системы связи, одной из основных причин является слабозащищенное или вовсе незащищенное программное обеспечение (ПО) и так называемые бреши в защите ПО.

6. Мероприятия по повышению устойчивости ПО

Защищенное ПО - это программа, которая обеспечивает конфиденциальность, целостность и доступность информации, а также целостность и доступность сетевых информационных и вычислительных ресурсов, управляемых системными администраторами.

Брешь в защите ПО - это такой недостаток, при котором даже правильное использование программы не предотвращает недружественных действий злоумышленников в части несанкционированного получения доступа к ресурсам системы или недокументированной функциональной возможности в виде программного кода для вскрытия защиты и получения доступа к информации конфиденциального типа.

Основные шаги по созданию защищенного ПО должны быть предприняты на стадиях проектирования, разработки, тестирования, поставок и сопровождения.

Как показывает опыт создания любого ПО, мероприятия по обеспечению безопасности следует проводить уже на стадии проекта. Замечено, что на стадии разработки устранение брешей в защите обходится примерно в 10 раз дороже, по времени - больше и с большими усилиями, чем на стадии проекта, а на стадии тестирования - также в 10 раз дороже, по времени - больше и труднее, чем на стадии разработки. Вывод таков: мероприятия по обеспечению безопасности нужно начинать, как можно раньше, проводить на всех стадиях - проектирования, разработки и тестирования, ибо то, что спроектировано правильно, после разработки и на стадии тестирования в корректировке не нуждается.

Вывод

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










Системы передачи данных

 


Комплексные проектные решения

 


Управление распределенными системами

 


Автоматизированные рабочие места

 


Системы и средства обеспечения безопасности движения

 


Цифровые сети технологической связи

 


Информационные системы управления движением

 


Автоматизированное управление разработками проектов

 




Программное обеспечение | Новости для гиков

 



Copyright (c) 2021