Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра електронних
обчислювальних машин
Звіт
про виконання лабораторної роботи № 8
з курсу „ Системне програмування ”
Тема: Управлiння процесами. Органiзацiя дочiрнiх процесiв. Частина 1.
Львів – 2004
Мета роботи:
Ознайомитись з принципами управлiння процесами в MS-DOS. Дослiдити механiзм активацiї дочiрнiх процесiв з-пiд управлiння прикладних програм.
Короткі теоретичні відомості
Програми завантажуються в пам‘ять для виконання за допомогою функцiї DOS Exec (Int 21h, функцiя 4Bh), що виконує роль системного завантажувача
Програма, що завантажується функцiєю Exec в пам‘ять, включає такi компоненти:
оточення,
префiкс програмного сегмента,
власне програму.
Для завантаження i виконання дочiрнього процесу програма вищого рiвня повинна використати функцiю DOS Exec - Int 21h, функцiя 4Bh. При цьому стан регiстрiв повинен бути таким:
AH = 4Bh;
AL = 00h (пiдфункцiя завантаження дочiрньої програми);
DS:DX = адреса рядка iз специфiкацiєю файлу запуску дочiрньої програми;
ES:BX = адреса блоку параметрiв.
Блок параметрiв служить для передачi функцiї Exec необхiдних даних i включає в себе адреси таких об‘єктiв:
оточення (сегментна адреса, одне слово);
залишок командного рядка (повна адреса, два слова);
два блоки управлiння пам‘яттю (файлами) (FCB) (повнi адреси, комiрки по два слова).
Завдання на лабораторну роботу
Створити програму, що запускає дочiрнiй процес та аналiзує результат виконання по його завершеннi. В програмi дочiрнього процесу передбачити повертання коду завершення (“успiшне завершення” / “помилка”) в iнiцiалiзуючу програму.
В якостi основи для створення програми дочiрнього процесу необхiдно використати програму створену в процесi виконання лабораторної роботи № 4.
Вміст .asm-файлів
Основна програма:
.model small
.stack 64
.data
parameters dd fcb1
dd fcb2
fcb1 db 37 dup (0)
fcb2 db 37 dup (0)
progname db 'max4.exe', 0
Err1msg db 'Child process returned error code!',10,13,'$'
Err2msg db 'File not found or not enough memory.',10,13,'$'
.code
main PROC FAR
mov ah, 4ah
mov bx, stack
add bx, 4
int 21h ; alloc mem
mov ax, @data
mov ds, ax
mov es, ax
mov ah, 4bh
mov al, 00
lea bx, parameters
lea dx, progname
int 21h ; child launch
jc err2 ; launch failed?
mov ah, 4Dh
int 21h
cmp al,0 ; check return value of child process
jne err1
mov al, 00
jmp quit
err1:
mov dx,OFFSET Err1Msg
mov ah,09
int 21h
mov al, 01
jmp quit
err2:
mov dx,OFFSET Err2Msg
mov ah,09
int 21h
mov al, 02
quit:
mov ah, 4ch
int 21h
main ENDP
end main
Частини програми, що відповідають за код повернення дочірнього процесу (max4.exe):
.DATA
…
errcode db 0
…
.CODE
start:
jnc ok ; error check
mov errcode, 1
jmp quit
ok:
…
quit:
mov ah,4Ch
mov al,errcode ; return value
int 21h
END start
Результат виконання програми
1 випадок: файл max4.exe відсутній у каталозі програми.
File not found or not enough memory.
2 випадок: max4.exe повертає 0.
Executing max4.exe
3 випадок: max4.exe повертає 1.
Executing max4.exe
Child process returned error code!
Висновок: Виконуючи дану лабораторну роботу, я ознайомився із принципами управлiння процесами в MS-DOS, дослiдив механiзм активацiї дочiрнiх процесiв з-під управління прикладних програм.