Отчёт о лабораторной работе №2 «Изучение понятия сопроцессов и виртуальных линков» Преподаватель: Красюк В. И




Скачать 116.39 Kb.
НазваниеОтчёт о лабораторной работе №2 «Изучение понятия сопроцессов и виртуальных линков» Преподаватель: Красюк В. И
Дата публикации13.07.2013
Размер116.39 Kb.
ТипОтчет
odtdocs.ru > Информатика > Отчет
Министерство Образования Российской Федерации

Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»

Кафедра МО ЭВМ


Отчёт о лабораторной работе №2

«Изучение понятия сопроцессов и виртуальных линков»

Преподаватель: Красюк В.И.

Выполнил: студент гр. 3351

Ерёменок А.В.

Санкт-Петербург

2008

  1. Цель работы


    1. Написать программу, устанавливающую виртуальные связи между тремя сопроцессами на одном процессоре.

    2. Организовать синхронный приём/передачу сообщений между созданными процессами.
  2. ^

    Выполнение

    1. Порядок взаимодействия


Взаимодействующие процессы: Harry, Tony, Mary. Процессы обмениваются следующими сообщениями в следующем порядке:

  1. Harry опрашивает Tony и Mary и ждет ответа от каждого из них

  2. Tony и Mary отвечают Harry

Схема работы:




    1. ^

      Последовательность запуска


  1. Вычисление MyProcID.

  2. Запуск процесса Harry.

  3. Обработка ошибок запуска процесса Harry. В случае ошибки – выход из функции.

  4. Запуск процесса Tony.

  5. Обработка ошибок запуска процесса Tony. В случае ошибки – выход из функции.

  6. Запуск процесса Mary.

  7. Обработка ошибок запуска процесса Mary. В случае ошибки – выход из функции.

  8. Ожидание завершения процессов Harry, Tony и Mary.


В соответствии со схемой взаимодействия процессов, Harry создает линки с Tony и Mary, а Tony и Mary получают линки от Harry. Далее происходит обработка ошибок создания/получения линка(в случае ошибки – выход из функции) и реализация диалога (SendLink, RecvLink).


  1. ^

    Текст программы


#include

#include

#include
#include

#include

#include

#include
const int STACK_SIZE = 4096;

int myprocid;

int harry(void)

{

char answer[100];

int error;

LinkCB_t* TonyLink, *MaryLink;

int i;

char* question[] = {

"how are you?",

"what do you think of parix?"

};
TonyLink = MakeLink( myprocid, 1234, &error);

if (!TonyLink)

{

LogError(EC_ERROR, "harry", "errcode %d", error );

printf("tony link error");

exit(1);

}
MaryLink = MakeLink( myprocid, 1234, &error);

if (!MaryLink)

{

LogError(EC_ERROR, "mary", "errcode %d", error );

printf("mary link error");

exit(1);

}
for (i = 0; i < 2; i++){

SendLink( TonyLink, (byte*)question[i], strlen(question[i])+1);

SendLink( MaryLink, (byte*)question[i], strlen(question[i])+1);

printf("harry said: %s\n",question[i]);
RecvLink( MaryLink, (byte*)answer, 1024 );

printf("mary said: %s\n",answer);

RecvLink( TonyLink, (byte*)answer, 1024 );

printf("tony said: %s\n",answer);

}
return 0;

}
int tony(void)

{

char answer[100];

int error;

LinkCB_t* HarryLink;

int i;

char* question[] = {

"fine",

"it works"

};
printf(" tony working %d \r\n", myprocid);

HarryLink = GetLink(myprocid, 1234, &error);
if (!HarryLink)

{

LogError(EC_ERROR, "harry", "errcode %d", error );

exit(1);

}
for (i = 0; i < 2; i++){

RecvLink( HarryLink, (byte*)answer, 1024 );

SendLink( HarryLink, (byte*)question[i], strlen(question[i])+1 );

}
return 0;

}
int mary(void)

{

char answer[100];

int error;

LinkCB_t* HarryLink;

int i;

char* question[] = {

"could be better",

"it's too buggy"

};
printf(" mary working %d \r\n", myprocid);

HarryLink = GetLink(myprocid, 1234, &error);
if (!HarryLink)

{

LogError(EC_ERROR, "harry", "errcode %d", error );

exit(1);

}
for (i = 0; i < 2; i++){

RecvLink( HarryLink, (byte*)answer, 1024 );

SendLink( HarryLink, (byte*)question[i], strlen(question[i])+1 );

}
return 0;

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

{

Thread_t* tHarry;

Thread_t* tTony;

Thread_t* tMary;

int error, result;
myprocid = GET_ROOT()->ProcRoot->MyProcID;
tHarry = StartThread( harry, STACK_SIZE, &error, 0 );

if (tHarry==NULL)

{

LogError(EC_ERROR, "harry", "errcode %d", error );

printf("harry error");

exit(1);

}
tTony = StartThread( tony, STACK_SIZE, &error, 0 );

if (tTony == NULL)

{

LogError(EC_ERROR, "tony", "errcode %d", error );

exit(1);

}
tMary = StartThread( mary, STACK_SIZE, &error, 0 );

if (tTony == NULL)

{

LogError(EC_ERROR, "mary", "errcode %d", error );

exit(1);

}
WaitThread(tHarry, &result);

WaitThread(tTony, &result);

WaitThread(tMary, &result);
return 0;

}
  1. Вывод


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

Добавить документ в свой блог или на сайт

Похожие:

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

Отчёт по лабораторной работе на тему «3d графика»
В данной лабораторной работе использовалась программа Autodesk 3ds Max 2009 и Adobe Photoshop cs4

Кафедра икт отчет по лабораторной работе №3 «Изучение программных...
Московский государственный институт электроники и математики (технический университет)

Отчет по лабораторной работе №9 по курсу «компьютерная графика» Студент...
Вариант 28**: Забить пробный гвоздь в тестовую доску (прямоугольную в поперечном сечении)

Отчёт о лабораторной работе №3 «Применение протоколов связи приложений...
На Visual Basic for Application написать макрос, который с помощью dde создает новую группу на рабочем столе и в ней новый программный...

Отчёт о лабораторной работе №2 «Разработка приложений с использованием...
Освоить приемы создания приложений типа Model-View-Controller при помощи библиотеки mfc

Отчёт о лабораторной работе №2 «Анализ огм последовательных программ...
Для полученного графа построить соответствующую ему поглощающую цепь Маркова (пцм), определить ее фундаментальную матрицу(ФМ) и вектор...

Отчёт о лабораторной работе №2 «Анализ огм последовательных программ...
Для полученного графа построить соответствующую ему поглощающую цепь Маркова (пцм), определить ее фундаментальную матрицу(ФМ) и вектор...

Отчёт о лабораторной работе №2 «Исследование системы массового обслуживания...
Используя пакет gpss составить программу и провести моделирование простейшей системы массового обслуживания (смо)

Коммуникационных технологий отчет по лабораторной работе №1 «Утилиты...
Ознакомление с man- страницами утилит. Изучение ключей, используемых при запуске утилит

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
odtdocs.ru
Главная страница