Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodychka-lab_OS.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.35 Mб
Скачать

5. Контрольні запитання

  1. Назвати основні механізми міжпроцесової взаємодії.

  2. Назвати основні механізми синхронізації процесів та потоків.

  3. Які об’єкти використовують для синхронізації процесів та потоків?.

  4. Назвати основні типи очікуючих функцій.

  5. Що таке атом?

  6. Як компонувати та транслювати консольні програми в MASM32?

6.Список використаної літератури

  1. Help по функціях API - www.nan32asm.cjb.net

  2. Microsoft Windows Help - Win32 Programmers Reference

  3. Технічна документація Microsoft - MSDN

Додаток 1

Текст програми синхронізації спільного доступу до файлу.

Дана програма створює семафор та файл і чекає на під’єднання іншої програми.

----------------------------------

; Sem_File.asm

;----------------------------------

.386

.model flat, stdcall

option casemap:none

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

include \masm32\include\user32.inc

includelib \masm32\lib\user32.lib

includelib \masm32\lib\kernel32.lib

wsprintfA PROTO C :DWORD, :VARARG

wsprintf equ <wsprintfA>

.data

MsgCaption db "Повiдомлення!",0

ErrorCreateSem db "Помилка створення семафору",0

ErrorCreateFile db "Помилка створення файлу",0

ErrorWriteFile db "Помилка запису у файл",0

Message db "Повiдомлення для файлу",0

Success db "Успiшне завершення програми",0

TimeOut db "Завершився час очiкування",0

ErrorRelease db "Помилка знищення семафору",0

buffer db 256 dup (?)

parameter db "%u"

check DWORD 0

written DWORD 0

sName db "MySemaphore",0

fName db "C:\Temp\MYFILE.TXT",0

.data?

hSemaphore HANDLE ?

hFile HANDLE ?

.code

start:

invoke CreateSemaphore, NULL, 0, 1, addr sName

.if eax==0

invoke MessageBox, NULL,addr ErrorCreateSem,\

addr MsgCaption, MB_OK

jmp exit

.endif

mov hSemaphore, eax

invoke CreateFile, addr fName,\

GENERIC_READ or GENERIC_WRITE,\

FILE_SHARE_READ, NULL, CREATE_ALWAYS,\ FILE_ATTRIBUTE_NORMAL,NULL

.if eax==INVALID_HANDLE_VALUE

invoke GetLastError

invoke wsprintf,addr buffer,addr parameter,eax

invoke MessageBox, NULL,addr ErrorCreateFile, \

addr buffer, MB_OK

invoke ReleaseSemaphore, hSemaphore, 1, NULL

jmp exit

.endif

mov hFile, eax

invoke WriteFile, hFile, addr Message, 23,\

addr written, NULL

.if eax==0

invoke GetLastError

invoke wsprintf,addr buffer,addr parameter,eax

invoke MessageBox, NULL,addr ErrorWriteFile,\

addr buffer, MB_OK

invoke ReleaseSemaphore, hSemaphore, 1, NULL

jmp exit

.endif

invoke CloseHandle, hFile

invoke WaitForSingleObject, hSemaphore, 10000

.if eax==WAIT_OBJECT_0

invoke MessageBox, NULL,addr Success,\

addr MsgCaption, MB_OK

invoke ReleaseSemaphore, hSemaphore, 1, NULL

jmp exit

.endif

.if eax==WAIT_TIMEOUT

invoke MessageBox, NULL, addr TimeOut, \

addr MsgCaption, MB_OK

invoke ReleaseSemaphore, hSemaphore, 1, NULL

.if eax==0

invoke GetLastError

invoke wsprintf,addr buffer,\

addr parameter,eax

invoke MessageBox, NULL, addr ErrorRelease,\

addr buffer, MB_OK

jmp exit

.endif

jmp exit

.endif

exit:

invoke ExitProcess,NULL

e nd start

Результат виконання програми:

Дана програма створює семафор та файл, записує у файл інформацію, очікує поки інша програма не прочитає даний файл і не знищить семафор .

У випадку успішного створення семафору і файлу, та зчитування з файлу, результат має виглядати так:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]