У вас вопросы?
У нас ответы:) SamZan.net

Синхронизация процессов

Работа добавлена на сайт samzan.net: 2016-06-09

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 6.3.2025

Министерство Образования и Науки Украины

Одесский Национальный Политехнический Университет

Институт компьютерных систем

Кафедра Компьютерных Систем

Протокол

Лабораторной работы № 24

« Синхронизация процессов »

                                                                                                                                                                                          

                                                                                     Выполнил

                                                                                                                    Студент гр. АЕ – 082

  Суслов А.Н.                                                                                                                                                       

                                                                           Проверил

                                                                                                                                    Нестерюк А. Г.                                                                                                                                          

Одесса 2011

Цель работы:

  •  Изучить технологию использования семафоров и мутексов
  •  Изучить технологию организации обмена данными между тремя    процессами с помощью объекта именованного файлового отображения и семафора.

5. Задание:

5.1. Изучить приведенные примеры и использованные в них функции.

5.2. Исследовать работу программ. Убедиться, что при попытке запуска программа SlaveSemaphore сразу завершает свою работу.

5.3. Запустить программу MasterSemaphore и открыть с ее помощью файл a.txt. Убедиться, что каждые 5 секунд в окно отладки выводятся сообщения от программы master. Затем запустить программу SlaveSemaphore и убедиться, что она передает в программу master свою информацию.

5.4*. Создать необходимые средства диагностики и доказать, что третий экземпляр SlaveSemaphore находится в режиме ожидания до завершения работы одного из предыдущих процессов SlaveSemaphore.

Листинг программ.

Процедура MasterSemaphore программы :

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

.IF uMsg==WM_CREATE

 invoke GetMenu,hWnd

 mov  hMenu,eax

 mov ofn.lStructSize,SIZEOF ofn

 push hWnd

 pop  ofn.hWndOwner

 push hInstance

 pop  ofn.hInstance

 mov  ofn.lpstrFilter, OFFSET FilterString

 mov  ofn.lpstrFile, OFFSET buffer

 mov  ofn.nMaxFile,MAXSIZE

.ELSEIF uMsg==WM_DESTROY

 invoke KillTimer,hWnd,0 ;âèäàëèòè òàéìåð

 .if hMapFile!=0

  call CloseMapFile

 .endif

 invoke PostQuitMessage,NULL

.elseif uMsg==WM_TIMER

 ;Show Mapping content

 PrintStringByAddr MappingAddress

.ELSEIF uMsg==WM_COMMAND                                     

 mov eax,wParam

 .if lParam==0

  .if ax==IDM_OPEN

   mov  ofn.Flags, OFN_FILEMUSTEXIST or \

                               OFN_PATHMUSTEXIST or OFN_LONGNAMES or\

                               OFN_EXPLORER or OFN_HIDEREADONLY

   invoke GetOpenFileName, ADDR ofn

   .if eax==TRUE

    invoke CreateFile,ADDR buffer,\

                                               GENERIC_READ or GENERIC_WRITE,\

                                               0,\

                                               NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,\

                                               NULL

    mov hFileRead,eax

    PrintHex hFileRead

    mov eax,OFFSET buffer

    PrintStringByAddr OFFSET buffer

    invoke SetWindowText,hWnd,eax

    invoke CreateFileMapping,hFileRead,NULL, PAGE_READWRITE,0,0,OFFSET FileMappingName

    mov  hMapFile,eax

    invoke MapViewOfFile,hMapFile,FILE_MAP_ALL_ACCESS,0,0,0

    mov MappingAddress,eax

    invoke EnableMenuItem,hMenu,IDM_OPEN,MF_GRAYED

    invoke EnableMenuItem,hMenu,IDM_SAVE,MF_ENABLED

    invoke CreateSemaphore,NULL,2,2,offset SemaphoreName

    mov hSemaphore,eax

    PrintHex hSemaphore  

    PrintLine

    invoke SetTimer,hWnd,0,5000,0 ;ñòâîðèòè òàéìåð  

   .endif

  .else

   invoke DestroyWindow, hWnd

  .endif

 .endif

.ELSE

 invoke DefWindowProc,hWnd,uMsg,wParam,lParam

 ret

.ENDIF

xor    eax,eax

ret

WndProc endp

Процедура SlaveSemaphore программы :

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

.IF uMsg==WM_CREATE

 invoke OpenSemaphore,SEMAPHORE_ALL_ACCESS,FALSE,offset SemaphoreName

 mov hSemaphore,eax

 PrintHex hSemaphore,"Slave OpenSemaphore"

 .IF hSemaphore == 0

  PrintHex eax,"Slave NoSemaphore"

  invoke CloseAll;,hWnd

 .else

  invoke WaitForSingleObject,hSemaphore, INFINITE

  .if eax == WAIT_OBJECT_0

   PrintHex 0,"Slave Signaled"

   invoke OpenFileMapping,FILE_MAP_ALL_ACCESS,FALSE,\

    OFFSET FileMappingName

   mov MappingAddress,eax

   .IF eax == 0

    ;Terminate process

    PrintHex eax,"Slave OpenFileMapping failed!"

    invoke CloseAll;,hWnd

    ;call CloseAll

   .ELSE

    PrintHex eax,"Slave MappingHandle Value"

    mov  hMapFile,eax

    invoke MapViewOfFile,hMapFile,FILE_MAP_ALL_ACCESS,0,0,0

    mov MappingAddress,eax

    .IF eax == 0

     PrintHex MappingAddress, "Slave MapViewOfFile failed"

     ;Terminate process

     invoke CloseAll;,hWnd

     ;call CloseAll

    .ELSE

     PrintHex MappingAddress, "Slave MapViewOfFile address"

     invoke SetTimer,hWnd,0,2500,0 ;ñòâîðèòè òàéìåð

    .ENDIF

   .ENDIF

  .elseif eax == WAIT_TIMEOUT

   PrintHex eax,"Slave TimeOut"

   mov hSemaphore,0

   invoke CloseAll;,hWnd

   ;call CloseAll

  .elseif eax == WAIT_FAILED

   PrintHex eax,"Slave WAIT_FAILED"

   mov hSemaphore,0

   invoke CloseAll;,hWnd

   ;call CloseAll

  .else

   PrintHex eax,"Slave What?"

  .ENDIF

 .endif

.ELSEIF uMsg==WM_DESTROY

 invoke CloseAll;,hWnd

 ;call CloseAll

.elseif uMsg==WM_TIMER

  ;Change and show counter

 inc CNTR

 mov eax,CNTR

 PrintHex CNTR,"Slave Cntr"

  ;Change Mapping content

 mov edx, MappingAddress

 or al,30h

 mov [edx],al

.ELSE

 invoke DefWindowProc,hWnd,uMsg,wParam,lParam

 ret

.ENDIF

xor    eax,eax

ret

WndProc endp

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




1. Расчёт трёхкорпусной прямоточной выпарной установки
2. Які існують підходи до визначень PR Паблик рилейшнз это особая функция управления призванная уста
3. Лабораторная работа 5 ТемаРазработка модели программной системы с использованием диаграммы состояний
4. ІЯ Горбачевського Міністерства охорони здоров~я України
5. Разработка технологического процесса изготовления корпуса
6. Технологічний процес виготовлення палітурної кришки
7. Реферат з біології- Вітамін D Вітамін D або антирахітичний вітамін найчастіше асоціюється з синтезом к
8. Социология Научное и обыденное знание
9. Руслан и Людмила
10. Использование корреляционного анализа в работе школьного психолога