КАТЕГОРИИ: Архитектура-(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; Просмотров: 569; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |