ROZDZIAŁ DZIEWIĘTNASTY PROCESY, INFORMATYKA, „THE ART OF ASSEMBLY LANGUAGE” [PL]
[ Pobierz całość w formacie PDF ]
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
WYŁĄCZNOŚĆ DO PUBLIKOWANIA TEGO TŁUMACZENIA
POSIADA
RAG
„THE ART OF ASSEMBLY LANGUAGE”
tłumaczone by KREMIK
Konsultacje naukowe: NEKRO
wankenob@priv5.onet.pl
nekro@pf.pl
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
ROZDZIAŁ DZIEWIĘTNASTY:
PROCESY, WSPÓŁPROGRAMY I WSPÓŁBIEŻNOŚĆ
Kiedy większość ludzi mówi wielozadaniowość , zazwyczaj w znaczeniu zdolności do uruchamiania kilku
różnych aplikacji w tym samym czasie na jednej maszynie. Dana struktura oryginalnych chipów 80x86 i
projektowania oprogramowania MS-DOS jest trudna do osiągnięcia, kiedy jest uruchomiony DOS. Przypatrzymy się
jak Microsoft używa Windows do wielozadaniowości.
Po problemach dużych firm takich jak Microsoft z działaniem wielozadaniowości, możemy sądzić,że jest to
bardzo trudna rzecz do zarządzania. Jednak nie jest to prawda, Microsoft ma problemy próbując uczynić różne
aplikacje, które są nieświadome innych harmonijnych prac. Szczerze mówiąc nie mają one istniejących aplikacji
DOS działających dobrze w ramach wielozadaniowości. Zamiast tego, działają na rzecz rozwijania nowych
programów, które działają dobrze pod Windowsem.
Wielozadaniowość nie jest sprawą błahą, ale nie jest tak trudna, kiedy piszemy aplikację z
wielozadaniowością. Możemy nawet pisać programy, które są wielozadaniowe pod DOS’em, jeśli tylko
zabezpieczymy się kilkoma środkami ostrożności. W tym rozdziale będziemy omawiali koncepcję procesów DOS,
współprogramy i ogólnie procesy.
19.1 PROCESY DOS
Chociaż MS-DOS jest jednozadaniowym systemem operacyjnym, nie znaczy to, że może być tylko jeden
program w tym czasie w pamięci. Faktycznie głównym celem poprzedniego rozdziału było opisanie jak ulokować
dwa lub więcej działających w pamięci w tum samym czasie. Jednakże, nawet, jeśli zignorujemy początkowo
TSR’y, możemy jeszcze załadować kilka programów do pamięci w jednym czasie pod DOS’em. Jedyną pułapką jest
to, że DOS dostarcza zdolności im do działania tylko jednego w czasie w bardzo określony sposób. Chyba, że
procesy współpracują, ich profil wykonania podąża za bardzo ścisłym wzorcem.
19.1.1 PROCESY POTOMNE W DOS
Kiedy aplikacja DOS jest uruchomiona, można załadować i wykonywać jakiś inny program używając
funkcji EXEC DOS (zobacz „MS-DOS, PC-BIOS i I/O Plików”). W normalnych warunkach, kiedy aplikacja
(macierzysta) uruchamia drugi program (potomny), proces potomny wykonuje się do zakończenia i potem wraca do
macierzystej. Jest to bardzo podobne do wywołania procedury, z wyjątkiem tego, że jest trochę trudniejsze
przekazanie parametrów między nimi.
MS-DOS dostarcza kilka funkcji, jakie możemy zastosować do ładowania i wykonania kod programu,
kończymy proces i uzyskujemy stan wyjścia dla procesu. Poniżej mamy tablicę wielu z tych operacji.
Funkcja
(AH)
Parametry wejściowe
Parametry wyjściowe
Opis
4Bh
al – 0
ds:dx – wskaźnik do nazwy
programu
es:bx – wskaźnik do struktury
LOADEXEC
Ax – kod błędu, jeśli
ustawione przeniesienie
Ładuje i wykonuje program
4Bh
al. –1
ds:dx – wskaźnik do nazwy
programu
es:bx – wskaźnik do struktury
LOAD
ax – kod błędu jeśli
ustawione
Ładuje program
4Bh
al.- 3
ds:dx – wskaźnik do nazwy
programu
es:bx – wskaźnik do struktury
OVERLAY
ax – kod błędu jeśli
ustawione przeniesienie
Ładownie nakładki
4Ch
al. – proces zwracania kodu
Wykonanie zakończenia
4Dh
al – zwracana wartość
ah – metoda zakończenia
Tabela 67: Funkcje DOS zorientowane znakowo
19.1.1.1 ZAŁADUJ I WYKONAJ
Funkcja „załaduj i wykonaj” wymaga dwóch parametrów. Pierwszy w ds.:dx, jest wskaźnikiem do ciągu
zakończonego zerem zawierającego ścieżkę dostępu programu do wykonania. To musi być plik „.COM” lub „.EXE”
a ciag musi zawierać rozszerzenie nazwy programu. Drugi parametr, w es:bx, jest wskaźnikiem do struktury danych
LOADEXEC. Ta struktura danych przybiera postać:
LOADEXEC struct
EnvPtr
word ?
;wskaźnik do obszaru środowiska
CmdLinePtr
dword ?
;wskaźnik do lini poleceń
FCB1
dword ?
;wskaźnik do domyślnego FCB1
FCB2
dword ?
; wskaźnik do domyślnego FCB2
LOADEXEC ends ?
EnvPtr jest adresem segmentu bloku środowiska DOS stworzonego dla nowej aplikacji. Jeśli to pole
zawiera zero, DOS tworzy kopię aktualnego bloku środowiska procesu dla procesu potomnego. Jeśli program, jaki
jest uruchomiony nie uzyskuje dostępu do bloku środowiska, możemy zachować kilkaset bajtów do kilku kilobajtów
przez wskazanie wskaźnika pola środowiska dla ciągu czterech zer.
Pole CmdLinePtr zawiera adres lini poleceń dostarczonych do programu. DOS będzie kopiował linię
poleceń do offsetu 80h w nowym PSP stworzonym dla procesu potomnego. Poprawna linia poleceń składa się z
bajtu zawierającego licznik znaku, mniej ważną przestrzeń, znak należący do linii poleceń i kończący znak powrotu
karetki (0Dh). Pierwszy bajt powinien zawierać długość znaków ASCII w linii poleceń, nie wliczając powrotu
karetki. Jeśli ten bajt zawiera zero, wtedy drugi bajt linii poleceń powinien być powrotem karetki, nie przestrzeni.
Przykład:
MyCmdLine
byte
12, „file1, file2”, cr
Pola FCB1 I FCB2 muszą wskazywać dwa domyślne bloki kontrolne pliku dla tego programu. FCB’y stały
się przestarzałe wraz z DOS’em 2.0, ale Microsoft zachowała FCB’y dla kompatybilności. Dla większości
programów możemy wskazać oba te pole w następującym ciągu bajtów:
DfltFCB
byte·3, ‘ „, 0, 0 ,0 ,0
Funkcja załaduj i wykonaj będzie zakończona niepowodzeniem, jeśli jest niewystarczająca ilość pamięci dla
załadowania procesu potomnego. Kiedy tworzymy plik”..EXE’ używając MASM’a, tworzy on plik wykonywalny,
który przechwytuje całą dostępną pamięć, domyślnie. Dlatego też, jeśli nie będzie dostępnej pamięci dla procesu
potomnego DOS zawsze zwróci błąd. Dlatego też musimy ustawić alokację pamięci dla procesu macierzystego
zanim spróbujemy uruchomić proces potomny. Jak to zrobić opisuje sekcja „Programu półrezydentne”
Są inne możliwe błędy. Na przykład, DOS może nie być zdolny zlokalizować nazwy programu, jaka
określiliśmy ciągiem zakończonym zerem. Lub być może, jest zbyt dużo otwartych plików i DOS nie ma wolnego
dostępnego bufora dla I/O pliku. Jeśli wystąpi błąd, DOS zwróci ustawioną flagę przeniesienia i właściwy kod błędu
w rejestrze ax. Następujący przykład wykonuje program „COMMAND.COM”, pozwalając użytkownikowi
wykonywać polecenia DOS z wnętrza naszej aplikacji. Kiedy użytkownik wpisuje, „exit” w lini poleceń DOS, DOS
zwróci sterownie do naszego programu.
; RUNDOS.ASM- Demonstruje jak wywołać kopię COMMAND.COM, interpretera lini poleceń DOS z naszego
programu
include
stdlib.a
includelib
stdlib.lib
dseg
segment
para public ‘data’
; Struktura EXEC MS-DOS
ExecStruct
word 0
;używamy bloku środowiska macierzystego
dword CmdLine
; dla parametrów lini poleceń
dword DfltFCB
dword DfltFCB
DfltFCB
byte
3, „ „ , 0, 0 ,0 ,0
CmdLine
byte
0, 0dh
;linia poleceń dla programu
PgmName
dword filename
;wskazuje nazwę programu
filename
byte
„C:\command.com”, 0
dseg
ends
cseg
segemnt para public ‘code’
assume cs:cseg, ds:dseg
Main
proc
mov
ax, dseg
;pobranie wskaźnika do segmentu zmiennych
mov
ds., ax
meminit
;start menadżera pamięci
; Okay, zbudowaliśmy strukturę wykonawczą MS-DOS i potrzebną linię poleceń, teraz zobaczmy uruchamianie
programu
; Pierwszym krokiem jest zwolnienie całej pamięci, której ten program nie używa. To będzie wszystko od zzzzzzseg.
;
; Notka: podobnie jak w poprzednich przykładach w innych rozdziałach, jest okay wywoływać podprogramy
Biblioteki
; Standardowej w tym programie po zwolnieniu pamięci. Różnica tu jest to, że podprogramy Biblioteki Standardowej
są
; ładowane wcześniej w pamięci i nie możemy zwolnić pamięci , która jest tam usytuowana.
mov
ah, 62h
;pobranie wartości naszego PSP
int
21h
mov
es, bx
mov
ax, zzzzzzseg
;obliczenie
rozmiaru
rezydentnego
kodu
uruchomieniowego
sub
ax, bx
mov
bx, ax
mov
ah, 4ah
; zwolnienie nie używanej pamięci
int
21h
; powiedzenie użytkownikowi co się dzieje:
print
byte
cr, lf
byte
„RUNDOS – Wykonanie kopii command.com”, cr, lf
byte
„Wpisanie ‘EXIT’ zwraca sterowanie do RUN.ASM”, cr, lf
byte
0
; Ostrzeżenie! Żadnej funkcji Biblioteki Standardowej po tym punkcie. Zwolniliśmy pamięć, którą one zajmowały.
Więc
; ładując program zlikwidujemy kod Biblioteki Standardowej
mov
bx, seg ExecStruct
mov
es, bx
mov
bx, offset ExecStruct
;wskaźnik do rekordu programu
lds
dx, PgmName
mov
ax, 4b00h
;exec pgm
int 21h
; w MS-DOS 6.0 poniższy kod nie jest wymagany. Ale w starszych wersjach MS-DOS, stos jest rujnowany od tego
punktu.
; będzie bezpieczniej, jeśli zresetujemy wskaźnik stosu do przyzwoitego miejsca w pamięci.
;
;Zauważmy, że kod ten zachowuje flagę przeniesienia a wartość w rejestrze AX, więc możemy przetestować
warunki błędu dla
; DOS kiedy wykonaliśmy poprawiani stosu
mov
bx, sseg
mov
ss, ax
mov
sp, offset EndStk
mov
bx, seg dseg
mov
ds, bx
;Test dla błędu DOS:
jnc
GoodCommand
print
byte
„DOS error #”, 0
puti
print
byte
„ kiedy próbujesz uruchomić COMMAND.COM”, cr, lf
byte
0
jmp
Quit
;Wydruk wiadomości końcowej
GoodCommand: print
byte
„Witamy ponownie w RUNDOS. Mam nadzieję, że bawiłeś się dobrze”, cr, lf
byte
„Teraz wracamy do COMMAND.COM w wersji MS-DOS”
byte
cr, lf, lf,0
; Zwrócenie sterowania do MS-DOS
Quit:
ExitPgm
Main
endp
cseg
ends
sseg
segment para stack ‘stack’
dw
128 dup (0)
ends
zzzzzzseg
segment para public ‘zzzzzzseg’
Heap
db
200h dup (?)
Zzzzzzseg
ends
end
Main
19.1.1.2 ŁADOWANIE PROGRAMU
Funkcja ładowania i wykonywania daje procesowi macierzystemu bardzo małą kontrolę nad procesem
potomnym. Chyba, że potomek komunikuje się z procesem macierzystym poprzez przerwania kontrolowane lub
przerwania, DOS zawiesza proces macierzysty dopóki nie zakończy się potomek. W wielu przypadkach pogram
macierzysty może chcieć załadować kod aplikacji a potem wykonać jakąś dodatkowe działanie zanim przejmie to
proces potomny. Programy półrezydentne, pojawiające się w poprzedni rozdziale, dostarczają dobrych przykładów.
Funkcja DOS’a „ładowania programu” dostarcza tej zdolności; będzie ładować program z dysku i zwraca sterowanie
z powrotem do procesu macierzystego. Proces macierzysty może robić co konieczne jeśli jest to właściwe przed
przekazaniem sterowania do procesu potomnego.
Funkcja ładowania programu wymaga parametrów, które są bardzo podobne do funkcji ładowania i
wykonania. Faktycznie , jedyną różnica jest użycie struktury LOAD zamiast LOADEXEC, a nawet te struktury są
bardzo podobne do siebie. Struktura danych LOAD dołącza dwa nowe pola nie obecne w strukturze LAODEXEC:
LOAD
struct
EnvPtr
word ?
;wskaźnik do obszaru środowiska
CmdLinePtr
dword ?
;wskaźnik do lini poleceń
FCB1
dword ?
;wskaźnik do domyślnego FCB1
FCB2
dword ?
;wskaźnik do domyślnego FCB2
SSSP
dword ?
; wartość SS:SP dla procesu potomnego
CSIP
dword ?
;Inicjalizacja programu z punktu startowego
LOAD
ends
Polecenie LOAD jest użyteczna dla wielu celów. Oczywiście, funkcja ta dostarcza podstawowego narzędzia
dla tworzenia programów półrezydentnych’; jednakże, jest również całkiem użyteczne przy odzyskiwaniu
dodatkowego błędu,przeadresowywania aplikacji I/O i ładowanie kilku wykonywalnych procesów do pamięci dla
współbieżnego wykonania.
Po załadowaniu programu poleceniem load DOS’a, możemy uzyskać adres PSP dla tego programu przez
wydanie przez DOS funkcji pobrania adresu PSP (zobacz „MS-DOS, PC-BIOS i pliki I/O”). Pozwoliłoby to
procesowi macierzystemu na zmodyfikowanie jakiejś wartości pojawiającej się w PSP procesu potomnego przed
jego wykonaniem. DOS przechowuje adres zakończenia dla procedury w PSP. Jeśli nie zmieniasz tej lokacji,
program będzie wracał do pierwszej instrukcji poza instrukcja int 21h dla załadowanej funkcji. Dlatego też przed
rzeczywistym przekazaniem sterowania do aplikacji użytkownika, powinniśmy zmienić ten adres zakończenia.
19.1.1.3 ŁADOWANIE NAKŁADEK
Wiele programów zawiera bloki kodu, które są niezależne jeden od drugiego, to znaczy, jeśli podprogram w
jednym bloku kodu się wykonuje, program ni będzie wywoływał podprogramów w innym bloku kodu. Na przykład,
nowoczesne gry mogą zawierać jakiś kod inicjalizujący obszar „publicznego udostępnienia” gdzie użytkownik
wybiera pewne opcje, „obszar działania” gdzie użytkownik gra w grę i „obszar wypytywania”, który sprawdza
działania gracza. Kiedy uruchomimy maszynę w 640 k MS-DOS ,cały ten kod może nie zmieścić się w dostępnej
pamięci w tym samym czasie. Dla pokonania tego ograniczenia pamięci, wiele dużych programów używa nakładek.
Nakładka jest części kodu programu, która dzieli pamięć dla jego kodu z innymi modułami kodu. Funkcja DOS’a
ładowania nakładek dostarcza wsparcia dla dużych programów, które muszą używać nakładek.
[ Pobierz całość w formacie PDF ]
-
Linki
- Home
- Psych.9 - Psych 9 (2010) BRRip.XviD.x264.NAPiSY PL, sporo filmów do ściągnięcia
- Psych.9 - Psych 9 (2010) BRRip.XviD.NAPiSY PL, sporo filmów do ściągnięcia
- RED - Red (2010) BDRip.XviD.Napisy PL 3, sporo filmów do ściągnięcia
- RED - Red (2010) BDRip.XviD.Napisy PL, sporo filmów do ściągnięcia
- RED - Red (2010) BDRip.XviD.Napisy PL 2, sporo filmów do ściągnięcia
- Rambo-First.Blood.Part.II[1985]DvDrip-aXXo.pl, ● Filmy ●, -Rambo- kolekcja
- Radical 2017 PL, WĘDKARSTWO, Dokumenty wędkarskie PDF i KATALOGI
- Resident Evil Degeneration 2008 napisy PL, napisy do filmow
- Rambo.III[1988]DvDrip-aXXo.pl, ● Filmy ●, -Rambo- kolekcja
- Rakietowe szlaki 2,
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- streamer.htw.pl