Комплексирование программных средств: использование в C#-программах системы команд и программ ОС Windows

  • Технические науки

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

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

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

Если известно, на каком языке были написаны исходные тексты, и каким компилятором были получены исполняемые модули, то можно попробовать дизассемблирование для восстановления исходных текстов, и затем - внесение необходимых изменений и дополнений в исходные тексты. Но чаще всё это недоступно.

В общем виде постановка задачи выглядит так: известно, что программа «А» выдаёт несколько необходимых нам данных, и группу ненужных. Программа «В» выдаёт несколько других необходимых нам данных, и тоже группу ненужных.

Задача заключается в том, что

  • и в результатах, полученных программой «А»,
  • и в результатах, полученных программой «В»
  • надо выделить необходимые нам данные,
  • и соединив их, представить программе «С».

Другими словами, нам необходимо:

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

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

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

Существует три способа использования этих команд:

  1. Разрозненное использование команд;
  2. Конвейеризация команд ОС;
  3. Группировка команд в программы (скрипты).

Разрозненное использование системы команд ОС требует наличия командного процессора. В ОС Windowsиспользуется два командных процессора: command.comи cmd.exe. Первый из них -это 16-битный, доставшийся в наследство от операционной системы DOS. Второй - 32-битный, для более поздних операционных систем.

Оба командных процессора используют практически одинаковый состав команд. Но cmd.exe, как более поздний, имеет дополнительные       возможности, обеспечиваемые микропроцессорами, начиная с i486. К ним относятся: система защиты памяти, возможность работы с длинными именами, и др.

Конвейеризация команд операционной системы позволит соединить команды ОС для совместного использования. В этом случае благодаря использованию специальной команды создания конвейера (|) результат работы одной команды ОС (т.е. выходной поток этой команды) передаётся другой команде в виде её входного потока

Группировка команд ОС в программы позволяет создавать командные файлы (скрипты). Для командного процессора command.comкомандные файлы имеют расширение .bat. Для процессора cmd.exeкомандные файлы имеют расширение .cmd.

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

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

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

В значительной мере возможности ОС расширяются за счёт использования программ, допускающих командное управление.

Кроме упомянутого архиватора RAR- внешней по отношению к ОС программе - аналогичные возможности предоставляют программы ОС msinfo32, findstr, sort, ftype, xcopy, debug, ntsdи др. Так например, программа debugпозволяет выполнять запись сектора на магнитном носителе, использовать программные вставки в виде команд ассемблера, производить чтение и запись основной памяти и регистров микропроцессорного комплекта ЭВМ, и т.д.

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

В отличие от C++ в языке C# не предусмотрено использование в программе ассемблерных вставок. Может сложиться впечатление, что использование ассемблерных вставок для C# недоступно. Это обманчивое впечатление. Команды псевдоассемблера можно использовать в C#, обратившись к стандартным средствам ОС -программам debugи ntsd. Кроме того, такие пакеты, как MASMразрешают режим командного управления и делают работу с ассемблером доступной для C#.

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

  1. Анализ системы команд ОС Windows2000/XP
  2. Исследование возможностей практического использования системы команд ОС
  3. Определение возможности использования системы команд ОС из языка высокого уровня.

В приложениях приведены необходимые для комплексирования программных средств справочные данные некоторых команд ОС и системы команд стандартных отладчиков Windows-программ debugи ntsd.

В результате анализа системы команд ОС Windows 2000/XP, прикладных программ Windows и возможностей алгоритмического языка C# установлено, что

  1. Система команд ОС может быть существенно расширена за счёт использования в качестве внешних команд скриптов (командных файлов) и внешних для ОС программных средств, управляющих внешними программами, такими, как архиваторы, антивирусные средства, программные комплексы для обслуживания алгоритмических языков (например, ассемблера), и др.
  2. Необходимые для комплексирования программных средств операции, такие, как перехват результатов работы программ, выделение из перехваченных данных сведений, необходимых для дальнейшего использования, соединение данных, полученных из разных источников и передача их программе для дальнейшей обработки, могут быть выполнены, в основном, средствами ОС и дополнительными командными файлами.
  3. Языки высокого уровня, такие, как C#, имеют всё необходимое и допускают разработку программ, содержащих низкоуровневые операции, необходимые для комплексирования программных средств. В ходе анализа возможность комплексирования программных средств подтверждена совершенствованием тестирующей программы; построением структуры каталогов при выявлении длинных имён файлов; принципиальным решением проблемы коррекции неправильных каталогов, содержащих длинные имена.

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