66546

МНОГОПОТОЧНОСТЬ. МЕЖПРОЦЕССНЫЕ ВЗАИМОДЕЙСТВИЯ

Лабораторная работа

Информатика, кибернетика и программирование

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

Русский

2014-08-22

64.6 KB

0 чел.

Министерство образования и науки Российской Федерации

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

Кафедра «Информационная безопасность компьютерных систем»

ОТЧЕТ

по лабораторной работе №5

«МНОГОПОТОЧНОСТЬ. МЕЖПРОЦЕССНЫЕ ВЗАИМОДЕЙСТВИЯ»

по курсу «Операционные системы»

Выполнил

студент гр. 2088/4    А.А.Чернышев

                           <подпись>

Руководитель     А.С. Коноплев

                           <подпись>

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

2011

  1.  Формулировка задания

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

2. Использованные теоретические сведения

Материалы из методического пособия 05.pdf, материалы интернет ресурсов msdn.com, и rus-linux.net, unix-manuals.com.

3. Результаты работы

3.1. Выполнение индивидуального задания

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

Была разработана следующая программа: один поток находит сумму всех элементов и записывает эту сумму в первый элемент; второй поток выводит элементы массива.

//=========================CRIT=============================//

//========================WINDOWS===========================//

#include<windows.h>

#include<iostream>

using namespace std;

CRITICAL_SECTION cs;

int ar[]={2,5,6,4,3};

int coutn;

void SumArr();

int sem=0;

int main() {

       HANDLE htr;

       DWORD dwId;

       InitializeCriticalSection(&cs);

 htr=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)SumArr,NULL,0,&dwId);

       Sleep(130);

  while(ar[0]<1000) {

   while (sem == 0);

   sem = 1;

               EnterCriticalSection(&cs);

               for(int i=0;i<5;i++)

               cout<<ar[i]<<" ";

               cout<<endl;

               LeaveCriticalSection(&cs);

   sem = 0;

       }

       

       CloseHandle(htr);

       DeleteCriticalSection(&cs);

       cin.get();

       return 0;

}

void SumArr() {

       while(ar[0]<1000) {

  while (sem == 1);

   sem = 0;

       int sum=0;

  EnterCriticalSection(&cs);

               for(int i=0;i<5;i++)

               sum+=ar[i];

   ar[0]=sum;

       LeaveCriticalSection(&cs);

 sem = 1;

       }

}

В результате работы получаем:

3.2. Ответы на контрольные вопросы

Как организовать критическую секцию программы при помощи функций работы с семафорами потоков Linux?

Перед входом в критическую секцию необходимо осуществить вызов sem_wait(), с целью захвата ресурса – оповещения других потоков о входе в критическую секцию. После выходя необходимо освободить ресурс, осуществив вызов sem_post().

Как организовать критическую секцию в Windows?
Способ аналогичен приведённому выше, но следует использовать вызовы EnterCriticalSection() и LeaveCriticalSection()

Какие средства межпроцессорного взаимодействия в UNIX вы знаете?

Каждый процесс в ОС UNIX выполняется в собственном виртуальном адресном пространстве. Адресные пространства процессов изолированы, даже родственные процессы, образованные в результате ветвления через системный вызов fork(), принадлежащие одному пользователю и исполняющие одну программу не могут напрямую обращаться к данным в адресном пространстве друг друга. Для обмена данными между несколькими параллельными процессами и обеспечения их синхронизации ядро UNIX поддерживает специальные ресурсы – средства межпроцессорного взаимодействия (inter - process communication facilities, IPC), доступ процессов к этим ресурсам осуществляется через системные вызовы ядра. Современные версии UNIX поддерживают широкий набор IPC, при использовании каждого из них ядро обеспечивает как взаимодействие процессов,

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

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

участки файлов (см. описание вызова fcntl()).

Другими характерными для UNIX средствами межпроцессного

взаимодействия являются: сигналы, неименованные каналы (pipe), именованные каналы (файлы fifo).

4. Выводы

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


 

А также другие работы, которые могут Вас заинтересовать

217. Экологическое право. История формирования экологического права России 256.02 KB
  История формирования экологического права России. Право природопользования. Виды прав на природные объекты и ресурсы. Охрана окружающей среды при осуществлении хозяйственной и иной деятельности. Международно-правовой механизм охраны окружающей среды.
218. Образовательный процесс на примере темы искусство Древней Месопотамии 607 KB
  Структурно-методический анализ учебного материала. Анализ учебно-программной документации. Определение обучающих, воспитывающих, развивающих и когнитивных целей. Методы конструирования на основе методического анализа учебного материала.
219. Проектирование механического привода с одноступенчатым редуктором 433 KB
  Расчеты и конструирование одноступенчатого конического зубчатого редуктора, приведены расчеты конических зубчатых передач, валов, шпонок на прочность, геометрия и кинематика зубчатой передачи.
220. Факультативный курс Параметры в геометрии 644 KB
  Общие вопросы организации и проведения факультативных курсов по математике. Анализ школьных учебников по геометрии федерального комплекта. Разработка факультативного курса Параметры в геометрии.
221. Совершенствование политики управления запасами коммерческой организации ОАО Бердский Хлебокомбинат 891.5 KB
  Разработка мероприятий по совершенствованию политики управления запасами для ОАО Бердский Хлебокомбинат. Для достижения этой цели необходимо решить следующие задачи. Материально-производственные запасы как элемент оборотного капитала.
222. Паротурбинные и газотурбинные установки 637.5 KB
  Расчет и оптимизация цикла газотурбинной установки. Выбор типа компрессора, определение его характеристик и основных размеров методом моделирования. Определение основных геометрических размеров турбины. Тепловой расчет проточной части по среднему диаметру.
223. Анализ общества с ограниченной ответственностью 597 KB
  Определение неудовлетворительной структуры баланса неплатежеспособности предприятия. Имущество предприятия является собственностью Общества. Общество несет ответственность по своим обязательствам любым принадлежащим ему имуществом.
224. Онкогенетика: сучасний стан і персективи розвитку 803 KB
  Історія розвитку онкогенетики та провідні вчені, які займалися цією проблемою. Сучасний стан онкогенетики, теорії виникнення пухлин та генетичні механізми виникнення пухлин. Шкідливі звички та онкологічні захворювання.
225. Использование теории мультимножеств в процессе реинжиниринга социальных систем 382 KB
  Практическое применение теории мультимножеств. Исследование работы отдела маркетинговой информации. Представление мультимножеств в Microsoft Excel. Реинжиниринг бизнес-процессов. Моделирование отдела маркетинговой информации.