Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metod_lab_ps_2_SPO_ch2_lab_rab (1).doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
341.5 Кб
Скачать

4.3 Самостійна підготовка

  • Підготуйте бланк звіту. Проробіть рекомендовану літературу [1],[2].

  • При підготовці зверніть увагу на такі питання:

а) основні особливості використання об’єктів ядра для синхронізації;

б) перелік об’єктів ядра та їх створення;

в) використання Wait – функцій;

г) організація доступу до ресурсів, що розділяються, за допомогою подій і м’ютексів.

  • Уважно проаналізуйте текст програми synchr3.asm (додаток Г), в якої два дочірніх потоки видають запит на введення рядку з консолі та записують свої рядки в один буфер, який потім виводиться батьківським потоком на екран консолі. Введення з консолі і зміна змісту буфера виконуються як клієнтський запит в монопольному режимі. Для розподілу доступу до виконання цієї операції використаний об’єкт “подія”.

4.4 Порядок виконання роботи

  • В будь якому текстовому редакторі наберіть текст модуля synchr3.asm, який наведено у додатку Г і збережіть його на диску.

  • Сформуйте модуль, що виконується (файл synchr3.exe).

  • Перевірте роботу програми synchr3.exe.

  • Дослідіть як зміниться результат виводу на консоль, якщо закоментувати рядки коду, пов’язані з викликом функції WaitForSingleObject та функції SetEvent, яка переводить об’єкт – “подію” у вільний стан.

  • Модифікуйте програму таким чином, щоб та же задача була вирішена за допомогою об’єкта ядра – “м’ютекс”.

  • Підготуйте модифіковану Вами програму до виконання за допомогою засобів пакету TASM.

  • Протестуйте роботу Вашої програми і занесіть у звіт її текст.

Перелік посилань

1. Рихтер Д. Windows для профессионалов: создание эффективных Win32 – приложений., 2001.- 825с.

2. Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение., 2001.- 736с.

Дотаток а Текст програми read_pe.Asm

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

;read_pe.asm - Win32-консольна програма для дослідження

;структури файлів формату PE за допомогою відладчика.

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

.486

.model flat,STDCALL ;модель пам’яті flat,

;STDCALL - передача параметрів в стилі С (справа наліво),

; процедура, що викликається, чистить за собою стек

%NOINCL ;заборонити виведення тексту файлів включення.

include WindowConA.inc

;Объявлення зовнішніми функцій Win32 (ASCII), що використовуються:

extrn AllocConsole:PROC

extrn SetConsoleTitleA:PROC

extrn ReadFile:PROC

extrn CloseHandle:PROC

extrn ExitProcess:PROC

extrn CopyFileA:PROC

extrn MoveFileA:PROC

extrn CreateFileA:PROC

extrn GetFileInformationByHandle:PROC

extrn GetLastError:PROC

extrn GetFileTime:PROC

extrn SetFileTime:PROC

extrn BeginPaint:PROC

extrn CreateWindowExA:PROC

extrn DefWindowProcA:PROC

extrn DispatchMessageA:PROC

extrn EndPaint:PROC

extrn ExitProcess:PROC

extrn FindWindowA:PROC

extrn GetMessageA:PROC

.data

lpbuff db 1000 dup(0)

TitleText db ‘Читання файла в форматі PE’,0

lpfnam db "my_file.exe",0

hFile dd 0

numbyte dd 1000

numread dd 0

pheader dd 0

.code

start proc near ;точка входу до програми

;запит консолі

call AllocConsole

;перевірка успіху запиту консолі

test ax,ax

jz exit ;якщо невдача

;----------------------CreateFile--------------------------------------

;відкриття файлу (CreateFileA)

push 0

push NULL ;атрибути (вони ігноруються)

push OPEN_EXISTING ;відкриття існуючого файлу,

;якщо його немає - помилка

push 0 ;захист файла не потребується

push FILE_SHARE_READ ;дозволено сумісне

; використання файла (за читанням)

push GENERIC_READ ;дозволено читання з файла

push offset lpfnam

call CreateFileA

cmp eax,0ffffffffh

je exit ;якщо невдача

mov hFile,eax ;дескриптор файла

;-----Читання перших numbyte байтів з відкритого файла (ReadFile)-----

push NULL ;синхронне введення

push offset numread ;покажчик на буфер з кількістю

; прочитаних байтів

push numbyte ;кількість байтів для читання

push offset lpbuff ;покажчик на буфер для читання

push hFile ;дескриптор відкритого файла

call ReadFile

cmp eax,NULL

je exit ;якщо неуспіх

;------------Закриття файла (CloseHandle)-------------------------

mov eax,dword ptr (lpbuff+003ch)

mov ebx,dword ptr (lpbuff+eax)

mov pheader,ebx

;результат дивимось у відладчику TD32.exe

;… … …

push hFile

call CloseHandle

exit:

;вихід з програми

;готуємо виклик VOID ExitProcess(UINT uExitCode)

push 0

call ExitProcess

start endp

end start