Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Программная реализация задачи




· В данном фрагменте кода создается процесс «стрелки»:

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

hWatchdog = CreateSemaphore(NULL, 0, 1, "watchdog");

// запускаем процессы стрелков

for(int i = 0; i < COUNT; i++) {

processes[i] = startProcess(i);

}

· Создание процесса «офицер»:

PROCESS_INFORMATION startProcess(int index) {

std::stringstream ss;

ss << "Rifleman.exe " << index << " " << COUNT;

STARTUPINFO cif;

ZeroMemory(&cif,sizeof(STARTUPINFO));

PROCESS_INFORMATION pi;

CreateProcess(NULL, (LPTSTR)ss.str().c_str(), NULL,

NULL, FALSE, CREATE_NEW_CONSOLE,

NULL, NULL, &cif, &pi);

return pi;

}

· Взаимодействие двух процессов – «офицер» и «стрелки»:

HANDLE hFirstRiflemanSemaphore =

OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, "rifleman0");

ReleaseSemaphore(hFirstRiflemanSemaphore, 1, NULL);

· Уничтожение процесса «стрелки»:

for(int i = 0; i < COUNT; i++) { // завершаем процессы стрелков

TerminateProcess(processes[i].hProcess, NO_ERROR);

}

return 0;

· Уничтожение процесса «офицер»:

while (1) {

...

else if (GetAsyncKeyState(VK_ESCAPE)) {

break;

}

 

На рисунке 4 отображено графическое решение задачи о стрелках.

Рисунок 4 – Фрагмент работы программы

ЗАКЛЮЧЕНИЕ

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

Алгоритм Деккера – первое известное корректное решение проблемы взаимного исключения в конкурентном программировании. Он позволяет двум потокам выполнения совместно использовать неразделяемый ресурс без возникновения конфликтов, используя только общую память для коммуникации. Но алгоритм Деккера неудобен в случае использования более 2 процессов, более удобной будет являться его модификация, известная как алгоритм Петерсона. Одним из преимуществ алгоритма является то, что он не требует специальных Test-and-set инструкций и вследствие этого он легко переносим на разные языки программирования и архитектуры компьютеров. Таким образом, данный алгоритм оптимизирует управление работой многозадачных операционных и многопроцессорных вычислительных систем.

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

В ходе работы была решена задача "О синхронизации стрелков". В ней было продемонстрировано взаимодействие двух процессов с помощью семафоров, а именно взаимодействие процесса «офицер» и процесса «стрелки».

 


 

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. А. О. Ключев, П. В. Кустарев, Д. Р. Ковязина, Е. В. Петров. Программное обеспечение встроенных вычислительных систем. Учебное пособие. ИТМО. Санкт-Петербург, 2009. 92-95 с.

2. А. А. Безбогов, А. В. Яковлев, Ю. Ф. Мартемьянов. Безопасность операционных систем. Учебное пособие. Издательство «Машиностроение-1». Москва, 2007

3. Э. Таненбаум. Современные операционные системы, 2 издание. Издательство «Питер». Санкт-Петербург, 2002

4. Ю. В. Кочержинская. Курс лекций по дисциплине «Теория вычислительных процессов», 2014г.

5. «Средства коммуникации процессов» - [Электронный ресурс]. URL: http://txt.rushkolnik.ru/docs/index-7896.html (дата обращения 09.12.2014)

 




Поделиться с друзьями:


Дата добавления: 2014-12-16; Просмотров: 542; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.