Проектирование с использованием IDE (Отчет о выполнении научно-исследовательской работы), страница 10

Поток 2 – сервер, ему отправляют пульсы потоки 3 и 4. На рис. 20 отправка пульса заняла 1.8 мс, а на рис. 21 всего 250 мкс. Различие времен связано с диспетчеризацией потоков и не является объективным показателем для оценки быстродействия механизма обмена пульсами.

                        для файловой модели,

Write.c

#include <sys/types.h>

#include <fcntl.h>

#include <unistd.h>

#include <stdlib.h>

#include <stdio.h>

int main (int argc, char* argv[])

{

      int     file;

char buffer[] = {"Message\n"};

      while(1){

file = creat (argv[1], 666);

write (file,buffer ,sizeof(buffer));

            close (file);

            sleep(1);

}

    return (EXIT_SUCCESS);

}

Read.c

#include <sys/types.h>

#include <fcntl.h>

#include <unistd.h>

#include <stdlib.h>

#include <stdio.h>

int main(int argc, char* argv[])

{

    int file;

    int size_read;

    char buffer[100];

    while(1){

      file = open(argv[1], O_RDONLY );

      sleep(1);

      size_read = read( file, buffer, sizeof( buffer ) );

      if( size_read == -1 )

      {

        printf( "Error reading %s", argv[1] );

        return EXIT_FAILURE;

      }

      close( file );

      printf ("%s", buffer);

    }

    return EXIT_SUCCESS;

}

Рис. 22.

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

Вышеописанный инструмент позволяет провести не только динамический, но и статический анализ кода. Для этого в конфигурации запуска Run -> Run Configuration ->Tools выбрать метод профилирования Sampling and Call Count Instrumentation. Кроме того, необходимо автоматически переключиться на окно этого инструмента при запуске.

Рис. 23

На рис. 24 приведены результаты статического анализа программы, в которой пульсами обмениваются потоки.

Рис. 24

На рис. 24 видно, что при данной реализации на выполнение потоков отводятся равные временные ресурсы.

Выводы:

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