Добавил:
Yanus
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Metod_OS
.TXT ЊЁЁбвҐабвў® ®ЎйҐЈ® Ё Їа®дҐббЁ® «м®Ј® ®Ўа §®ў Ёп ђ”
_________________
‘ Єв-ЏҐвҐаЎгаЈбЄЁ© Ј®бг¤ аб⢥л©
н«ҐЄва®вҐеЁзҐбЄЁ© гЁўҐабЁвҐв
____________________________________________________
ЊҐв®¤ЁзҐбЄЁҐ гЄ § Ёп
Є « Ў®а в®ал¬ а Ў®в ¬ Ї® ¤ЁбжЁЇ«ЁҐ
"ЋЏ…ђЂ–€ЋЌЌ›… ‘ђ…„› Ђ‘Ћ€“"
‘ Єв-ЏҐвҐаЎгаЈ
1997
ЊЁЁбвҐабвў® ®ЎйҐЈ® Ё Їа®дҐббЁ® «м®Ј® ®Ўа §®ў Ёп ђ”
_________________
‘ Єв-ЏҐвҐаЎгаЈбЄЁ© Ј®бг¤ аб⢥л©
н«ҐЄва®вҐеЁзҐбЄЁ© гЁўҐабЁвҐв
____________________________________________________
ЊҐв®¤ЁзҐбЄЁҐ гЄ § Ёп
Є « Ў®а в®ал¬ а Ў®в ¬ Ї® ¤ЁбжЁЇ«ЁҐ
"ЋЏ…ђЂ–€ЋЌЌ›… ‘ђ…„› Ђ‘Ћ€“"
‘ Єв-ЏҐвҐаЎгаЈ
1997
“„Љ 681.518.3:681.3.06
ЊҐв®¤ЁзҐбЄЁҐ гЄ § Ёп Є « Ў®а в®ал¬ а Ў®в ¬ Ї® ¤ЁбжЁЇ«ЁҐ
"ЋЇҐа жЁ®лҐ баҐ¤л Ђ‘Ћ€“" / ‘®бв.: ‚.‚ ‘Ё¤Ґ«мЁЄ®ў, ‚.‚. Ёа®-
Є®ў; ѓќ’“. ‘ЏЎ., 1997. 36 б.
ЏаЁўҐ¤Ґл ®ЎйЁҐ ᢥ¤ҐЁп Ё ४®¬Ґ¤ жЁЁ Ї® ўлЇ®«ҐЁо « Ў®-
а в®але а Ў®в Ї® ¤ЁбжЁЇ«ЁҐ "ЋЇҐа жЁ®лҐ баҐ¤л Ђ‘Ћ€“".
ЏаҐ¤ § зҐл ¤«п бв㤥⮢ бЇҐжЁ «м®бвЁ 220200 "Ђўв®¬ вЁ-
§Ёа®ў лҐ бЁбвҐ¬л ®Ўа Ў®вЄЁ Ёд®а¬ жЁЁ Ё гЇа ў«ҐЁп".
“⢥তҐ®
। ЄжЁ®®-Ё§¤ ⥫мбЄЁ¬ б®ўҐв®¬ гЁўҐабЁвҐв
ў Є зҐб⢥ ¬Ґв®¤ЁзҐбЄЁе гЄ § Ё©
‘ ‘.-ЏЎ. ѓќ’“, 1997
- 3 -
я2‹ Ў®а в®а п а Ў®в 1
я2€‡“—…Ќ€… Ђ‹ѓЋђ€’ЊЋ‚ ђ…Ђ‹€‡Ђ–€€ € €‘ЏЋ‹њ‡Ћ‚ЂЌ€џ ‘ЋЏђЋѓђЂЊЊ
я1–Ґ«м а Ў®вля0 - ®§ Є®¬«ҐЁҐ б «Ј®аЁв¬ ¬Ё ॠ«Ё§ жЁЁ б®Їа®Ј-
а ¬¬ Ё бЇ®б®Ў ¬Ё Ёе ЁбЇ®«м§®ў Ёп ¤«п ®аЈ Ё§ жЁЁ ¬®Ј®§ ¤ з®б-
вЁ.
я2ЋЎйЁҐ ᢥ¤ҐЁп
‘®Їа®Ја ¬¬л - нв® б।бвў® ЇҐаҐ¤ зЁ гЇа ў«ҐЁп Ё§ ®¤®© Їа®-
楤гал ў ¤агЈго ЎҐ§ ®в®иҐЁп ў«®¦Ґ®бвЁ. ‚лЇ®«пҐ¬®© Їа®жҐ¤гаҐ
Ґв Ґ®Ўе®¤Ё¬®бвЁ ў®§ўа й вмбп ў ўл§ў ўиго ҐҐ Їа®жҐ¤гаг. ’а ¤ЁжЁ-
®лҐ ®ЇҐа в®ал ‚›‡Ћ‚ Ё ‚Ћ‡‚ђЂ’ ў б«гз Ґ б®Їа®Ја ¬¬ § ¬Ґповбп
®¤Ё¬ ®ЇҐа в®а®¬ - Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…. ‘®Їа®Ја ¬¬л ®Ў« ¤ ов б«Ґ-
¤гойЁ¬Ё бў®©бвў ¬Ё:
1) Ї®§ў®«пов Ё¬ЁвЁа®ў вм Ї а ««Ґ«м®бвм б Ї®¬®ймо пўле ЇҐ-
। з гЇа ў«ҐЁп;
2) пў«повбп б।бвў®¬ ॠ«Ё§ жЁЁ ¬®Ј®§ ¤ з®Ј® ०Ё¬ .
ђҐ «Ё§ жЁп б®Їа®Ја ¬¬ ®б®ў ўл¤Ґ«ҐЁЁ б®Ўб⢥®Ј®
б⥪ ¤«п Є ¦¤®© Ё§ Їа®жҐ¤га. ’®Ј¤ ®ЇҐа в®а Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…
Ї® бгйҐбвўг ўлЇ®«пҐв ®ЇҐа жЁо § ¬Ґл б⥪ ЇаЁ®бв ў«Ёў Ґ¬®©
б®Їа®Ја ¬¬л б⥪ ў®§®Ў®ў«пҐ¬®© б®Їа®Ја ¬¬л.
ђ Ў®в Їа®жҐ¤га ў Є зҐб⢥ б®Їа®Ја ¬¬ вॡгҐв ЇаҐ¤ў аЁвҐ«м-
®© Ї®¤Ј®в®ўЄЁ, б®бв®п饩 ў ўл¤Ґ«ҐЁЁ б⥪ Є ¦¤®© Ё§ Їа®жҐ¤га Ё
§ ЇЁбЁ ў б⥪ в®зЄЁ ўе®¤ ў Їа®жҐ¤гаг. ’ҐЄг饥 б®бв®пЁҐ б⥪
Є ¦¤®© Ё§ б®Їа®Ја ¬¬ еа Ёвбп ў бвагЄвгаҐ, §лў Ґ¬®© „…‘Љђ€Џ-
’Ћђ_‘ЋЏђЋѓђЂЊЊ›. Џ®н⮬г б®Їа®Ја ¬¬л ЇаҐ¤бв ў«повбп бў®Ё¬Ё ¤ҐбЄ-
аЁЇв®а ¬Ё.
я2’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ Ё а Ў®вл б®Їа®Ја ¬¬
Џ®бЄ®«мЄг а Ў®в б® б⥪®¬ вॡгҐв ¤®бвгЇ ҐЇ®б।б⢥® Є
ॣЁбва ¬ SS Ё SP, ®ЇҐа в®а Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€… ¬®¦Ґв Ўлвм ॠ«Ё-
§®ў в®«мЄ® б।бвў ¬Ё п§лЄ бᥬЎ«Ґа .
Ћд®а¬«ҐЁҐ бᥬЎ«Ґа®© Їа®жҐ¤гал ў б।Ґ Pascal:
Procedure Name_Proc(Џ а ¬Ґвал-§ 票п; Џ а ¬Ґвал-ЇҐаҐ¬ҐлҐ);
Assembler; {®Ўп§ ⥫мл© ваЁЎгв}
Asm {®Ўп§ ⥫мл© ваЁЎгв}
...
- 4 -
End;
‡ ЇЁбм ў ¤аҐб㥬го п祩Єг Ї ¬пвЁ Їа®Ё§ў®¤Ёвбп ®ЇҐа в®а®¬
MemW[Seg:Ofs] := ... .
’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ б®Їа®Ја ¬¬ ЇаҐ¤бв ў«Ґ ў д®а¬Ґ ®ЇЁб -
Ёп Ї®б«Ґ¤®ў ⥫м®б⥩ ¤Ґ©бвўЁ©, Їа®Ё§ў®¤Ё¬ле ЇаЁ б®§¤ ЁЁ б®Ї-
а®Ја ¬¬л Ё ЇаЁ ЇҐаҐ¤ зҐ гЇа ў«ҐЁп ®в ®¤®© б®Їа®Ја ¬¬л Є ¤агЈ®©.
Procedure ‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“;
Begin
‚›„…‹€’њ ЏЂЊџ’њ ЏЋ„ ‘’…Љ;
‚›„…‹€’њ ЏЂЊџ’њ ЏЋ„ „…‘Љђ€Џ’Ћђ;
‚›—€‘‹€’њ Ђ„ђ…‘ "„ЌЂ" ‘’…ЉЂ € ‡ЂЏ€‘Ђ’њ …ѓЋ ‚ „…‘Љђ€Џ’Ћђ;
ЏЋ Ђ„ђ…‘“ "„ЌЂ" ‘’…ЉЂ ‡ЂЏ€‘Ђ’њ ’Ћ—Љ“ ‚•Ћ„Ђ ‚ ЏђЋ–…„“ђ“;
End;
Procedure Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; Assembler;
Asm
‘—€’Ђ’њ Ђ„ђ…‘ „…‘Љђ€Џ’ЋђЂ Џђ€Ћ‘’ЂЌЂ‚‹€‚Ђ…ЊЋ‰ ‘ЋЏђЋѓђЂЊЊ›;
‡ЂЏ€‘Ђ’њ ‚ ќ’Ћ’ „…‘Љђ€Џ’Ћђ ‘Ћ‘’ЋџЌ€… ‘’…ЉЂ;
‘—€’Ђ’њ Ђ„ђ…‘ „…‘Љђ€Џ’ЋђЂ ‚Ћ‡ЋЃЌЋ‚‹џ…ЊЋ‰ ‘ЋЏђЋѓђЂЊЊ›;
‚Ћ‘‘’ЂЌЋ‚€’њ ‘Ћ‘’ЋџЌ€… ‘’…ЉЂ €‡ ќ’ЋѓЋ „…‘Љђ€Џ’ЋђЂ;
End;
’Ґе®«®ЈЁп а Ў®вл б®Їа®Ја ¬¬ ЇаҐ¤бв ў«Ґ ў д®а¬Ґ "§ Ј®в®ў-
ЄЁ" Їа®Ја ¬¬л:
Program Cor;
Procedure ‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“;
Begin
...
End;
Procedure Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; Assembler;
Asm
...
End;
Procedure User_1;
Begin
while true do begin
...
- 5 -
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; {ў ¤агЈго б®Їа®Ја ¬¬г}
end;
End;
...
Procedure User_N;
Begin
while true do begin
...
if “‘‹Ћ‚€… then {§ ўҐа襨Ґ ўлЇ®«ҐЁп}
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€… {ў Ј« ўго Їа®Ја ¬¬г}
else
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; {ў ¤агЈго б®Їа®Ја ¬¬г}
end;
End;
Begin
‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“; {User_1}
...
‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“; {User_N}
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; {ў ®¤г Ё§ б®Їа®Ја ¬¬}
End.
я2‡ ¤ ЁҐ
1. ђҐ «Ё§®ў вм Їа®жҐ¤гал ‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“ Ё Џ…ђ…„Ђ’њ_“Џ-
ђЂ‚‹…Ќ€… Ї® Ёе бЇҐжЁдЁЄ жЁп¬, ЇаҐ¤бв ў«Ґл¬ ўлиҐ.
2. ђҐ «Ё§®ў вм Їа®Ја ¬¬г Cor, § ¬ҐЁў б«®ўҐблҐ ®ЇЁб Ёп
¤Ґ©бвўЁ© ®ЇҐа в®а ¬Ё п§лЄ Pascal.
3. Ќ аЁб®ў вм б®бв®пЁп б⥪ б®Їа®Ја ¬¬л ЇаЁ ᮧ¤ ЁЁ, ЇаЁ-
®бв ®ўЄҐ Ё ў®§®Ў®ў«ҐЁЁ.
4. ‚ а §а Ў влў Ґ¬®© ¤Ґ¬®бва жЁ®®© Їа®Ја ¬¬Ґ ®аЈ Ё§®ў вм
¤Ё ¬ЁзҐбЄ®Ґ ўл¤Ґ«ҐЁҐ Ё ®бў®Ў®¦¤ҐЁҐ Ї ¬пвЁ Ї®¤ ¤ҐбЄаЁЇв®ал Ё
б⥪Ё б®Їа®Ја ¬¬.
5. ђҐ «Ё§®ў вм б®Їа®Ја ¬¬л, ЇаҐ¤бв ўЁў Ёе ў ўЁ¤Ґ ®ЎкҐЄв®ў,
ўЄ«оз ойЁе б«Ґ¤гойЁҐ ¤ лҐ - ¤аҐб б⥪ Ё § 票п ॣЁбва®ў SS
Ё SP, в Є¦Ґ ¬Ґв®¤л ᮧ¤ Ёп, гЁз⮦ҐЁп Ё ЇҐаҐ¤ зЁ гЇа ў«ҐЁп.
я1ЋвзҐв ¤®«¦Ґ ᮤҐа¦ вмя0 ⥪бвл Їа®Ја ¬¬ б Є®¬¬Ґв аЁп¬Ё Ё аЁ-
бгЄЁ, ®ва ¦ ойЁҐ б®бв®пЁп б⥪®ў б®Їа®Ја ¬¬.
- 6 -
я2‹ Ў®а в®а п а Ў®в 2
я2€‘‘‹…„Ћ‚ЂЌ€… Џђ€Ќ–€ЏЋ‚ „€‘Џ…’—…ђ€‡Ђ–€€ ЏђЋ–…‘‘Ћ‚
я1–Ґ«м а Ў®вля0 - ®§ Є®¬«ҐЁҐ б ЇаЁжЁЇ ¬Ё ॠ«Ё§ жЁЁ «Ј®аЁв-
¬®ў ¤ЁбЇҐвзҐаЁ§ жЁЁ Їа®жҐбб®ў ў ¬®Ј®§ ¤ зле б। е.
я2ЋЎйЁҐ ᢥ¤ҐЁп
ђҐ «Ё§ жЁп ЇбҐў¤®Ї а ««Ґ«м®Ј® ०Ё¬ б Ї®¬®ймо пў®Ј® ўЄ«о-
зҐЁп ў Ї®«м§®ў ⥫мбЄЁҐ Їа®жҐббл ®ЇҐа в®а Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…
®Ў« ¤ Ґв Ґ¤®бв вЄ ¬Ё:
1) Џ®«м§®ў ⥫мбЄЁҐ Їа®жҐббл ўЄ«оз ов ў бҐЎп ¤Ґ©бвўЁп, Є®в®-
алҐ Ї® бгйҐбвўг Ґ ®в®бпвбп Є Ёе дгЄжЁп¬.
2) €вҐаў «л Їа®жҐбб®а®Ј® ўаҐ¬ҐЁ, ЇаҐ¤®бв ў«пҐ¬лҐ Їа®жҐб-
б ¬, § ўЁбпв ®в б ¬Ёе Їа®жҐбб®ў, Ё Ґбвм ®Ї б®бвм § еў в Їа®жҐб-
б®а ¤«ЁвҐ«мл© ба®Є ®¤Ё¬ Їа®жҐбᮬ.
Џ®н⮬㠢 ¬®Ј®§ ¤ зле бЁб⥬ е ЁбЇ®«м§гҐвбп ЇаЁг¤ЁвҐ«м п
ЇҐаҐ¤ з гЇа ў«ҐЁп. Њ®¬Ґвл ЇаЁг¤ЁвҐ«м®© ЇҐаҐ¤ зЁ гЇа ў«ҐЁп
®ЇаҐ¤Ґ«повбп ЇаҐалў Ёп¬Ё ®в в ©¬Ґа . ’ Є®© бЇ®б®Ў ЇҐаҐ¤ зЁ гЇ-
а ў«ҐЁп §лў Ґвбп ¤ЁбЇҐвзҐаЁ§ жЁҐ©.
ђ Ў®в Ґв ¬®Ј®§ ¤ з п бЁб⥬ б ЇаЁг¤ЁвҐ«м®© ¤ЁбЇҐвзҐаЁ-
§ жЁҐ© б«Ґ¤гойЁ¬ ®Ўа §®¬.
‚лЇ®«ҐЁҐ ⥪г饩 б®Їа®Ја ¬¬л ЇаЁ®бв ў«Ёў Ґвбп ЇаҐалў Ё-
Ґ¬ ®в в ©¬Ґа . “Їа ў«ҐЁҐ ЇҐаҐ¤ Ґвбп Їа®Ја ¬¬Ґ-®Ўа Ў®взЁЄг ЇаҐал-
ў Ёп. ЋЎа Ў®взЁЄ ўлЇ®«пҐв ¤Ґ©бвўЁп Ї® ўлЎ®аг б«Ґ¤го饩 б®Їа®Ј-
а ¬¬л Ё ЇҐаҐ¤ Ґв Ґ© гЇа ў«ҐЁҐ ®ЇҐа в®а®¬ Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€….
’ ЄЁ¬ ®Ўа §®¬ Є ¦¤®© б®Їа®Ја ¬¬Ґ ўл¤Ґ«пҐвбп Єў ⠢६ҐЁ
¤«п ўлЇ®«ҐЁп.
я2‘ўҐ¤ҐЁп Ё§ п§лЄ Џ бЄ «м, ЁбЇ®«м§гҐ¬лҐ ЇаЁ ॠ«Ё§ жЁЁ
я2¤ЁбЇҐвзҐаЁ§ жЁЁ
“бв ®ўЄ ўҐЄв®а ЇаҐалў Ёп:
SetIntVec(IntNo : byte; Vector : pointer)
Ј¤Ґ IntNo - ®¬Ґа ўҐЄв®а ЇаҐалў Ёп;
Vector - ¤аҐб Їа®жҐ¤гал-®Ўа Ў®взЁЄ ЇаҐалў Ёп.
—⥨Ґ ўҐЄв®а ЇаҐалў Ёп:
GetIntVec(IntNo : byte; Var Vector : pointer)
Ј¤Ґ IntNo - ®¬Ґа ўҐЄв®а ЇаҐалў Ёп;
- 7 -
Vector - ЇҐаҐ¬Ґ п, ў Є®в®аго ЇЁиҐвбп ¤аҐб Їа®жҐ¤гал-®Ўа -
Ў®взЁЄ ЇаҐалў Ёп.
я1ЏаЁ¬Ґз ЁҐ.я0 Ќ®¬Ґа ўҐЄв®а ЇаҐалў Ёп ®в в ©¬Ґа - 8; ®¬Ґа
бў®Ў®¤ле ўҐЄв®а®ў ¤«п ЇҐаҐгбв ®ўЄЁ бЁб⥬®Ј® ®Ўа Ў®взЁЄ ЇаҐ-
алў Ё© ®в в ©¬Ґа : 60h-66h; 78h-7Fh.
‘вагЄвга Їа®жҐ¤гал-®Ўа Ў®взЁЄ ЇаҐалў Ёп:
Procedure Handler; interrupt; {®Ўп§ ⥫мл© ваЁЎгв}
Begin
...
End {Handler}.
я2’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ ¤ЁбЇҐвзҐаЁ§ жЁЁ
’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ ¤ЁбЇҐвзҐаЁ§ жЁЁ ў б।Ґ Џ бЄ «м ЇаҐ¤б-
в ў«Ґ "§ Ј®в®ўЄ®©" Їа®Ја ¬¬л:
Program User_Disp;
Procedure ‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ; Assembler;
Asm
...
End;
Procedure ‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“;
Begin
{ЋЇЁб а ҐҐ}
End;
Procedure Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; Assembler;
Asm
{ЋЇЁб а ҐҐ}
End;
Procedure Handler; interrupt;
Begin
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
{‚лЎа вм б«Ґ¤гойго б®Їа®Ја ¬¬г}
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…;
End;
Procedure User_1;
Begin
while true do begin
- 8 -
...
end;
End;
Procedure User_2;
Begin
while true do begin
...
if “‘‹Ћ‚€… then begin {§ ўҐа襨Ґ ўлЇ®«ҐЁп}
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
‚Ћ‘‘’ЂЌЋ‚€’њ_‚…Љ’Ћђ_Џђ…ђ›‚ЂЌ€џ_Ћ’_’Ђ‰Њ…ђЂ;
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; {ў Ј« ўго Їа®Ја ¬¬г}
end;
end;
End;
Begin
‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“; {User_1}
‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“; {User_2}
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
Џ…ђ…“‘’ЂЌЋ‚€’њ_‚…Љ’Ћђ_Џђ…ђ›‚ЂЌ€џ_Ћ’_’Ђ‰Њ…ђЂ;
“‘’ЂЌЋ‚€’њ_ЌЂ_‚…Љ’Ћђ_8_ЏђЋ–…„“ђ“_Handler;
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; {ў User_i}
End.
я2‡ ¤ ЁҐ
1. ђҐ «Ё§®ў вм Їа®Ја ¬¬г, а бЄалў ўбҐ ЇаҐ¤«®¦ҐЁп ®ЇҐа в®а -
¬Ё п§лЄ Џ бЄ «м.
2. Ќ аЁб®ў вм б®бв®пЁп б⥪ Їа®Ё§ў®«м®© б®Їа®Ја ¬¬л ЇаЁ
ЇаЁ®бв ®ўЄҐ ҐҐ ЇаҐалў ЁҐ¬ ®в в ©¬Ґа Ё ў®§®Ў®ў«ҐЁЁ Ё§ ®Ўа -
Ў®взЁЄ ЇаҐалў Ё©.
я1ЋвзҐв ¤®«¦Ґ ᮤҐа¦ вмя0 ⥪бв Їа®Ја ¬¬л б Є®¬¬Ґв аЁп¬Ё,
в Є¦Ґ аЁбгЄЁ, ®ва ¦ ойЁҐ б®бв®пЁп б⥪ б®Їа®Ја ¬¬ ЇаЁ ЇаҐалў -
Ёпе.
- 9 -
я2‹ Ў®а в®а п а Ў®в 3
я2€‘‘‹…„Ћ‚ЂЌ€… Џђ€Ќ–€ЏЋ‚ ђ…Ђ‹€‡Ђ–€€ ЏђЋ–…‘‘Ћ‚ € Ћ—…ђ…„…‰
я2ЊЌЋѓЋ‡Ђ„Ђ—ЌЋѓЋ џ„ђЂ
я1–Ґ«м а Ў®вля0 - ®§ Є®¬«ҐЁҐ б ЇаЁжЁЇ ¬Ё ॠ«Ё§ жЁЁ Їа®жҐбб®ў
Ё ®зҐаҐ¤Ґ© ў п¤аҐ ¬®Ј®§ ¤ з®© б।л.
я2ЋЎйЁҐ ᢥ¤ҐЁп
Џ а ««Ґ«м® ўлЇ®«пҐ¬лҐ ў ¬®Ј®§ ¤ з®© б।Ґ Їа®жҐ¤гал -
§лў овбп Їа®жҐбб ¬Ё.
Џ®бЄ®«мЄг Їа®жҐбб®а ®¤Ё, Їа®жҐбб®ў ¬®Ј®, в® Ї®пў«пҐвбп
б।бвў® гЇ®ап¤®зҐЁп ¤®бвгЇ Їа®жҐбб®ў Є Їа®жҐбб®аг, ЇаЁЁ¬ о饥
д®а¬г ®зҐаҐ¤Ё.
‚ ¦Ґ©иЁ¬ ўЁ¤®¬ ®зҐаҐ¤Ё пў«пҐвбп ®зҐаҐ¤м Їа®жҐбб®ў, Ј®в®ўле
Є ўлЇ®«ҐЁо.
„«п ®ЎҐбЇҐзҐЁп ў®§¬®¦®бвЁ ўЄ«озҐЁп Їа®жҐбб ў ®зҐаҐ¤Ё Ґ-
®Ўе®¤Ё¬® ¬®¤ЁдЁжЁа®ў вм ¤ҐбЄаЁЇв®а б®Їа®Ја ¬¬л, ॠ«Ё§го饩 Їа®-
жҐбб, ўўҐ¤п ў ҐЈ® Ї®«Ґ - гЄ § ⥫м б«Ґ¤гойЁ© Їа®жҐбб.
‘ гзҐв®¬ ў®§¬®¦®бвЁ ¤Ё ¬ЁзҐбЄ®Ј® ᮧ¤ Ёп Ё гЁз⮦ҐЁп
ЇаҐ¤бв ўЁ¬ Їа®жҐбб Є Є ®ЎкҐЄв б«Ґ¤го饣® ўЁ¤ :
ЏђЋ–…‘‘ = ЋЃљ…Љ’
{„ЂЌЌ›…:} ќ‹…Њ…Ќ’› „…‘Љђ€Џ’ЋђЂ ‘ЋЏђЋѓђЂЊЊ›;
‘‹…„“ћ™€‰;
Ђ„ђ…‘_‘’…ЉЂ;
{Њ…’Ћ„›:} Procedure €Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Procedure Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Procedure “‘’ЂЌЋ‚€’њ_‘‹…„“ћ™€‰;
Function ЏЋ‹“—€’њ_‘‹…„“ћ™€‰;
ЉЋЌ…–;
‚в®ал¬ ўЁ¤®¬ ®ЎкҐЄв®ў ¬®Ј®§ ¤ з®© б।л пў«пҐвбп Ћ—…ђ…„њ,
ЇаҐ¤бв ў«пҐ¬ п б«Ґ¤гойЁ¬ ®ЇЁб ЁҐ¬:
Ћ—…ђ…„њ = ЋЃљ…Љ’
{„ЂЌЌ›…:} ЌЂ—Ђ‹Ћ;
{Њ…’Ћ„›:} Procedure €Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Procedure Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Procedure ‚Љ‹ћ—€’њ_ЏђЋ–…‘‘;
Procedure €‘Љ‹ћ—€’њ_ЏђЋ–…‘‘;
- 10 -
Function ЏЋ‹“—€’њ_ЌЂ—Ђ‹Ћ;
ЉЋЌ…–;
‚ ¤ ®© а Ў®вҐ а бб¬ ваЁў Ґвбп ®зҐаҐ¤м Ј®в®ўле Їа®жҐбб®ў,
Є®в®а п ¬®¦Ґв Ўлвм ЇаҐ¤бв ў«Ґ Є Є вЁЇ, Їа®Ё§ў®¤л© ®в вЁЇ Ћ—…-
ђ…„њ:
Ћ—…ђ…„њ_ѓЋ’Ћ‚›• = ЋЃљ…Љ’(Ћ—…ђ…„њ)
{Њ…’Ћ„›:} Procedure €Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Procedure Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Procedure ‡ЂЏ“‘’€’њ_„€‘Џ…’—…ђ;
Procedure Ћ‘’ЂЌЋ‚€’њ_„€‘Џ…’—…ђ;
Procedure „ЋЃЂ‚€’њ_ЌЋ‚›‰_ЏђЋ–…‘‘;
Procedure ЂЉ’€‚€‡€ђЋ‚Ђ’њ_‘‹…„“ћ™€‰;
ЉЋЌ…–;
я2’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ Їа®жҐбб®ў Ё ®зҐаҐ¤Ё Ј®в®ўле Їа®жҐбб®ў
’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ Їа®жҐбб®ў Ё ®зҐаҐ¤Ё Ј®в®ўле Їа®жҐбб®ў
ЇаҐ¤бв ў«Ґ ў ўЁ¤Ґ б«®ўҐб®Ј® ®ЇЁб Ёп ЎЁЎ«Ё®вҐз®Ј® ¬®¤г«п, пў-
«по饣®бп ¤ «мҐ©иЁ¬ а §ўЁвЁҐ¬ Їа®Ја ¬¬л « Ў®а в®а®© а Ў®вл 2.
Unit DispObj;
Interface
Type
ЏђЋ–…‘‘ = ЋЃљ…Љ’
ќ‹…Њ…Ќ’› „…‘Љђ€Џ’ЋђЂ ‘ЋЏђЋѓђЂЊЊ›;
‘‹…„“ћ™€‰;
Ђ„ђ…‘_‘’…ЉЂ;
Procedure €Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Procedure Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Procedure “‘’ЂЌЋ‚€’њ_‘‹…„“ћ™€‰;
Function ЏЋ‹“—€’њ_‘‹…„“ћ™€‰;
ЉЋЌ…–;
Ћ—…ђ…„њ = ЋЃљ…Љ’
ЌЂ—Ђ‹Ћ;
Procedure €Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Procedure Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Procedure ‚Љ‹ћ—€’њ_ЏђЋ–…‘‘;
Procedure €‘Љ‹ћ—€’њ_ЏђЋ–…‘‘;
Function ЏЋ‹“—€’њ_ЌЂ—Ђ‹Ћ;
- 11 -
ЉЋЌ…–;
Ћ—…ђ…„њ_ѓЋ’Ћ‚›• = ЋЃљ…Љ’(Ћ—…ђ…„њ)
Procedure €Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Procedure Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Procedure ‡ЂЏ“‘’€’њ_„€‘Џ…’—…ђ;
Procedure Ћ‘’ЂЌЋ‚€’њ_„€‘Џ…’—…ђ;
Procedure „ЋЃЂ‚€’њ_ЌЋ‚›‰_ЏђЋ–…‘‘;
Procedure ЂЉ’€‚€‡€ђЋ‚Ђ’њ_‘‹…„“ћ™€‰;
ЉЋЌ…–;
Var
Readylist : Ћ—…ђ…„њ_ѓЋ’Ћ‚›•;
Implementation
Procedure ‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ; Assembler;
Asm
...
End;
Procedure ђЂ‡ђ…€’њ_Џђ…ђ›‚ЂЌ€џ; Assembler;
Asm
...
End;
Procedure ‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“;
Begin
...
End;
Procedure Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; Assembler;
Asm
...
End;
Procedure Handler; interrupt;
Begin
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
Readylist.ЂЉ’€‚€‡€ђЋ‚Ђ’њ_‘‹…„“ћ™€‰;
End;
Procedure Idler; {ўбҐЈ¤ ў ®зҐаҐ¤Ё Ј®в®ўле}
Begin
while true do;
End;
Procedure ЏђЋ–…‘‘.€Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Begin
- 12 -
‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“;
‡ЂЏЋ‹Ќ€’њ ЏЋ‹… Ђ„ђ…‘_‘’…ЉЂ;
End;
Procedure ЏђЋ–…‘‘.Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Begin
Ћ‘‚ЋЃЋ„€’њ ЏЂЊџ’њ, ‡ЂЌџ’“ћ ЏЋ„ ‘’…Љ;
End;
Procedure ЏђЋ–…‘‘.“‘’ЂЌЋ‚€’њ_‘‹…„“ћ™€‰;
Begin
‘‹…„“ћ™€‰ := ... ;
End;
Function ЏђЋ–…‘‘.ЏЋ‹“—€’њ_‘‹…„“ћ™€‰;
Begin
ЏЋ‹“—€’њ_‘‹…„“ћ™€‰ := ‘‹…„“ћ™€‰;
End;
Procedure Ћ—…ђ…„њ.€Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Begin
ЌЂ—Ђ‹Ћ := NIL;
End;
Procedure Ћ—…ђ…„њ.Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Begin
{–ЁЄ« Ї® ўбҐ¬ Їа®жҐбб ¬ ®зҐаҐ¤Ё}
ЏђЋ–…‘‘.Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
End;
Procedure Ћ—…ђ…„њ.‚Љ‹ћ—€’њ_ЏђЋ–…‘‘;
Begin
...
End;
Procedure Ћ—…ђ…„њ.€‘Љ‹ћ—€’њ_ЏђЋ–…‘‘;
Begin
...
End;
Function Ћ—…ђ…„њ.ЏЋ‹“—€’њ_ЌЂ—Ђ‹Ћ;
Begin
ЏЋ‹“—€’њ_ЌЂ—Ђ‹Ћ := ЌЂ—Ђ‹Ћ;
End;
Procedure Ћ—…ђ…„њ_ѓЋ’Ћ‚›•.€Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Begin
Ћ—…ђ…„њ.€Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
- 13 -
End;
Procedure Ћ—…ђ…„њ_ѓЋ’Ћ‚›•.Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Begin
Ћ—…ђ…„њ.Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
End;
Procedure Ћ—…ђ…„њ_ѓЋ’Ћ‚›•.‡ЂЏ“‘’€’њ_„€‘Џ…’—…ђ;
Begin
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
Џ…ђ…“‘’ЂЌЋ‚€’њ_‚…Љ’Ћђ_Џђ…ђ›‚ЂЌ€џ_Ћ’_’Ђ‰Њ…ђЂ;
“‘’ЂЌЋ‚€’њ_ЌЂ_‚…Љ’Ћђ_8_ЏђЋ–…„“ђ“_Handler;
ЏЋ‹“—€’њ_ЌЂ—Ђ‹Ћ;
€‘Љ‹ћ—€’њ_ЏђЋ–…‘‘;
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…;
End;
Procedure Ћ—…ђ…„њ_ѓЋ’Ћ‚›•.Ћ‘’ЂЌЋ‚€’њ_„€‘Џ…’—…ђ;
Begin
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
‚Ћ‘‘’ЂЌЋ‚€’њ_‚…Љ’Ћђ_Џђ…ђ›‚ЂЌ€џ_Ћ’_’Ђ‰Њ…ђЂ;
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; {ў Ј« ўго Їа®Ја ¬¬г}
End;
Procedure Ћ—…ђ…„њ_ѓЋ’Ћ‚›•.„ЋЃЂ‚€’њ_ЌЋ‚›‰_ЏђЋ–…‘‘;
Begin
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
ЏђЋ–…‘‘.€Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
‚Љ‹ћ—€’њ_ЏђЋ–…‘‘;
ђЂ‡ђ…€’њ_Џђ…ђ›‚ЂЌ€џ;
End;
Procedure Ћ—…ђ…„њ_ѓЋ’Ћ‚›•.ЂЉ’€‚€‡€ђЋ‚Ђ’њ_‘‹…„“ћ™€‰;
Begin
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
‚Љ‹ћ—€’њ_ЏђЋ–…‘‘; {⥪гйЁ©}
ЏЋ‹“—€’њ_ЌЂ—Ђ‹Ћ;
€‘Љ‹ћ—€’њ_ЏђЋ–…‘‘;
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…;
End;
Begin
Readylist.€Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Readylist.„ЋЃЂ‚€’њ_ЌЋ‚›‰_ЏђЋ–…‘‘;{ўЄ«о票Ґ Idler}
End.
- 14 -
‘ гзҐв®¬ ЇаЁўҐ¤Ґ®Ј® ЎЁЎ«Ё®вҐз®Ј® ¬®¤г«п Ї®«м§®ў ⥫мбЄ п
Їа®Ја ¬¬ ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬:
Program User;
Uses Disp;
Procedure User_1;
Begin
while true do begin
...
end;
End;
Procedure User_N;
Begin
while true do begin
...
if “‘‹Ћ‚€… then begin {§ ўҐа襨Ґ ўлЇ®«ҐЁп}
Readylist.Ћ‘’ЂЌЋ‚€’њ_„€‘Џ…’—…ђ;
end;
end;
End;
Begin
Readylist.„ЋЃЂ‚€’њ_ЌЋ‚›‰_ЏђЋ–…‘‘;{ўЄ«о票Ґ User_1}
Readylist.„ЋЃЂ‚€’њ_ЌЋ‚›‰_ЏђЋ–…‘‘;{ўЄ«о票Ґ User_N}
Readylist.‡ЂЏ“‘’€’њ_„€‘Џ…’—…ђ;
End.
я2‡ ¤ ЁҐ
1. ‚ ᮮ⢥вбвўЁЁ б ЇаЁўҐ¤Ґл¬Ё ўлиҐ § Ј®в®ўЄ ¬Ё ॠ«Ё§®-
ў вм ЎЁЎ«Ё®вҐзл© ¬®¤г«м, ®ЎҐбЇҐзЁў ойЁ© а Ў®вг б ®зҐаҐ¤мо Ј®в®-
ўле Їа®жҐбб®ў, гзЁвлў п ¤Ё ¬ЁзҐбЄ®Ґ ўл¤Ґ«ҐЁҐ Ї ¬пвЁ Ї®¤ Їа®жҐб-
бл.
2. ‘®бв ўЁвм ЇаЁ¬Ґа, Ё««обваЁагойЁ© а Ў®вг ЎЁЎ«Ё®вҐз®Ј® ¬®-
¤г«п.
я1ЋвзҐв ¤®«¦Ґ ᮤҐа¦ вмя0 ⥪бвл Їа®Ја ¬¬ ЎЁЎ«Ё®вҐз®Ј® ¬®¤г«п
Ё ЇаЁ¬Ґа б Є®¬¬Ґв аЁп¬Ё.
- 15 -
я2‹ Ў®а в®а п а Ў®в 4
я2€‘‘‹…„Ћ‚ЂЌ€… ‘€‘’…ЊЌ›• Ћ—…ђ…„…‰ ЊЌЋѓЋ‡Ђ„Ђ—ЌЋѓЋ џ„ђЂ
я1–Ґ«м а Ў®вля0 - Ё§г票Ґ бЁб⥬ле ®зҐаҐ¤Ґ© ¬®Ј®§ ¤ з®Ј® п¤-
а .
я2ЋЎйЁҐ ᢥ¤ҐЁп
‘ ¬®© ў ¦®© бЁб⥬®© ®зҐаҐ¤мо п¤а пў«пҐвбп ®зҐаҐ¤м Ј®в®-
ўле Їа®жҐбб®ў, а бᬮваҐ п ў « Ў®а в®а®© а Ў®вҐ 3. ‚ ¤ ®©
а Ў®вҐ а бᬮваЁ¬ ¤агЈЁҐ ®зҐаҐ¤Ё п¤а , Є®в®алҐ ЇаЁпв® ®в®бЁвм Є
бЁб⥬л¬.
я2ЋзҐаҐ¤м § ¤Ґа¦ ле Їа®жҐбб®ў
ќв ®зҐаҐ¤м ¤ ¦Ґ Їа®йҐ ®зҐаҐ¤Ё Ј®в®ўле Ё ЇаҐ¤бв ў«Ґ ¤«п
Ї®«®вл ®ЇЁб Ёп. „Ґ«® ў ⮬, зв® ўбҐ ҐўлЇ®«пойЁҐбп Їа®жҐббл
¤®«¦л 室Ёвмбп ў Є ЄЁе-«ЁЎ® ®зҐаҐ¤пе. Џ®н⮬г, Ґб«Ё Їа®Ја ¬¬-
®© бЁб⥬Ґ Ґ®Ўе®¤Ё¬® ЇаЁ®бв ®ўЁвм ўлЇ®«ҐЁҐ ҐЄ®в®а®Ј® Їа®-
жҐбб , ҐЈ® Ґ®Ўе®¤Ё¬® Ї®¬ҐбвЁвм ў бЇҐжЁ «м® ўл¤Ґ«Ґго ®зҐаҐ¤м,
Є®в®аго §®ўҐ¬ ®зҐаҐ¤мо § ¤Ґа¦ ле, Ј¤Ґ ® Ўг¤Ґв 室Ёвмбп ¤®
вҐе Ї®а, Ї®Є бЁб⥬Ґ Ґ Ї® ¤®ЎЁвбп ҐЈ® ў®§®Ў®ўЁвм. ‚ н⮬ б«г-
з Ґ Їа®жҐбб Ё§ў«ҐЄ Ґвбп Ё§ ®зҐаҐ¤Ё § ¤Ґа¦ ле Ё Ї®¬Ґй Ґвбп ў
®зҐаҐ¤м Ј®в®ўле Їа®жҐбб®ў.
ЋЇЁб ЁҐ в Є®© ®зҐаҐ¤Ё ¬®¦Ґв ўлЈ«п¤Ґвм б«Ґ¤гойЁ¬ ®Ўа §®¬:
Type
List = Object
First : Process;
Constructor Init;
Destructor Done; Virtual;
Procedure Insert(P : Process);
Procedure Remove(P : Process);
End {List}.
я2ЋзҐаҐ¤м Їа®жҐбб®ў, § ¤Ґа¦ ле ўаҐ¬п
„ л© ®ЎкҐЄв ўлЇ®«пҐв дгЄжЁЁ Є« ббЁзҐбЄ®© ўаҐ¬Ґ®© § -
¤Ґа¦ЄЁ ўлЇ®«ҐЁп Їа®Ја ¬¬л, ЇаЁ¬Ґа: Delay(T : Word), Є®в®а п
®ЎҐбЇҐзЁў Ґв " ЄвЁў®Ґ" ®¦Ё¤ ЁҐ, ¤®ЇгбвЁ¬®Ґ ў ®¤®§ ¤ з®© баҐ-
¤Ґ. ‚ ¬®Ј®§ ¤ з®© б।Ґ ЇаЁ Ґ®Ўе®¤Ё¬®бвЁ § ¤Ґа¦ вм Їа®жҐбб
- 16 -
ўаҐ¬п ҐЈ® 楫Ґб®®Ўа §® Ё§ў«Ґзм Ё§ ®зҐаҐ¤Ё Ј®в®ўле Ё ⥬ б ¬л¬
а бЇаҐ¤Ґ«пвм Їа®жҐбб®а®Ґ ўаҐ¬п 㦥 ¬Ґ¦¤г ¬ҐмиЁ¬ зЁб«®¬ Їа®жҐб-
б®ў.
’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ ®зҐаҐ¤Ё, ўлЇ®«по饩 дгЄжЁЁ § ¤Ґа¦ЄЁ
Їа®жҐбб®ў ўаҐ¬п, ®б®ў б«Ґ¤гойЁе Ї®«®¦ҐЁпе:
1. Њг«мвЁ§ ¤ з п б। "§ Ґв" ⥪г饥 ўаҐ¬п, Є®в®а®Ґ ¬®¦Ґв
Ї®¤бзЁвлў вмбп Ї® Є®«ЁзҐбвўг ўл§®ў®ў ¤ЁбЇҐвзҐа -®Ўа Ў®взЁЄ ЇаҐ-
алў Ё© ®в в ©¬Ґа .
2. ‚ ¬®¬Ґв ®Ўа йҐЁп Їа®жҐбб Є ¬Ґв®¤г "§ ¤Ґа¦ вм ўаҐ¬п
’" Їа®жҐбб ЇҐаҐў®¤Ёвбп ў ®зҐаҐ¤м, ў бЇҐжЁ «м®Ґ Ї®«Ґ ¤ҐбЄаЁЇв®-
а Їа®жҐбб § ®бЁвбп ўаҐ¬п ҐЈ® ЄвЁўЁ§ жЁЁ, а ў®Ґ б㬬Ґ ⥪гйҐ-
Ј® ўаҐ¬ҐЁ Ё ЁвҐаў « ’ § ¤Ґа¦ЄЁ.
3. „ЁбЇҐвзҐа Є ¦¤®¬ ЇаҐалў ЁЁ Їа®ўҐапҐв ®зҐаҐ¤м § ¤Ґа-
¦ ле «ЁзЁҐ Їа®жҐбб®ў, ¤«п Є®в®але ⥪г饥 ўаҐ¬п б®ўЇ «® б
ўаҐ¬ҐҐ¬ Ёе ЄвЁўЁ§ жЁЁ, Ё ЇҐаҐў®¤Ёв нвЁ Їа®жҐббл ў ®зҐаҐ¤м Ј®в®-
ўле.
‘ гзҐв®¬ ЇаЁўҐ¤Ґле Ї®«®¦ҐЁ© ®ЇЁб ЁҐ ®зҐаҐ¤Ё § ¤Ґа¦ ле
Ўг¤Ґв ўлЈ«п¤Ґвм б«Ґ¤гойЁ¬ ®Ўа §®¬:
Type
DelayList = Object(List)
Procedure Delay(T : Word);
Procedure Activisation;
End {DelayList}.
ЊҐв®¤ DelayList.Activisation Ї®¬Ґй Ґвбп ў ¤ЁбЇҐвзҐа.
„ ¤Ё¬ б«®ўҐб®Ґ ®ЇЁб ЁҐ ¬Ґв®¤ DelayList.Delay(T : Word).
Procedure DelayList.Delay(T : Word);
Var
ЏаҐ¤л¤гйЁ© : Џа®жҐбб;
Begin
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
ЏаҐ¤л¤гйЁ©^.Tact := T + Tcur;
‚Є«озЁвм(ЏаҐ¤л¤гйЁ©);
’ҐЄгйЁ© := ЋзҐаҐ¤м_ѓ®в®ўле.ЏҐаўл©;
ЋзҐаҐ¤м_ѓ®в®ўле.€§ў«Ґзм(’ҐЄгйЁ©);
ЏҐаҐ¤ вм_“Їа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
End {DelayList.Delay}.
„ ¤Ё¬ б«®ўҐб®Ґ ®ЇЁб ЁҐ ¬Ґв®¤ DelayList.Activisation:
Procedure DelayList.Activisation;
- 17 -
Var
’ҐЄгйЁ©, ‘«Ґ¤гойЁ© : Џа®жҐбб;
Begin
’ҐЄгйЁ© := ЏҐаўл©;
Џ®Є ’ҐЄгйЁ© <> NIL „Ґ« вм Ќ з «®
‘«Ґ¤гойЁ© := ’ҐЄгйЁ©^.‘«Ґ¤гойЁ©;
…б«Ё ’ҐЄгйЁ©^.Tact = Tcur ’® Ќ з «®
€§ў«Ґзм(’ҐЄгйЁ©);
ЋзҐаҐ¤м_ѓ®в®ўле.‚Є«озЁвм(’ҐЄгйЁ©);
Љ®Ґж {…б«Ё};
’ҐЄгйЁ© := ‘«Ґ¤гойЁ©;
Љ®Ґж {Џ®Є };
End {DelayList.Activisation}.
я2ЋзҐаҐ¤м гЁз⮦ Ґ¬ле Їа®жҐбб®ў
—в®Ўл гЁз⮦Ёвм Їа®жҐбб, 室пйЁ©бп ў Є Є®©-«ЁЎ® ®зҐаҐ¤Ё,
ҐЈ® Ґ®Ўе®¤Ё¬® Ё§кпвм Ё§ ҐҐ Ё а §агиЁвм ¤ҐбЄаЁЇв®а Їа®жҐбб . ЏаЁ
н⮬ ЁЄ ЄЁе Їа®Ў«Ґ¬ Ґ ў®§ЁЄ Ґв. ЋЁ Ї®пў«повбп, Є®Ј¤ вॡгҐв-
бп гЁз⮦Ёвм ЄвЁўл© Їа®жҐбб, в.Ґ. ўлЇ®«пойЁ©бп ў ⥪гйЁ© ¬®-
¬Ґв ўаҐ¬ҐЁ. Ќ ЇаЁ¬Ґа, Їа®жҐбб § Є®зЁ« ўлЇ®«ҐЁҐ ЇаҐ¤ЇЁб ле
Ґ¬г ¤Ґ©бвўЁ© Ё ¦Ґ« Ґв б ¬®гЁз⮦Ёвмбп. ‚ н⮬ б«гз Ґ Їа®бв® а §-
агиЁвм ¤ҐбЄаЁЇв®а Їа®жҐбб Ґ«м§п, в Є Є Є гЇа ў«ҐЁҐ ®в ЄвЁў®-
Ј® Їа®жҐбб ЇҐаҐ¤ Ґвбп ЇҐаў®¬г ў ®зҐаҐ¤Ё Ј®в®ўле Їа®жҐбб®ў зҐаҐ§
Ёе ¤ҐбЄаЁЇв®ал, Ё Ґб«Ё ¤ҐбЄаЁЇв®а ЄвЁў®Ј® Їа®жҐбб а §агиЁвм,
в® дгЄжЁЁ Transfer(Old, New : Process) Ўг¤Ґв ЇҐаҐ¤ гЄ § ⥫м
ҐбгйҐбвўгойЁ© ¤ҐбЄаЁЇв®а Ё бЁб⥬ § ўЁбҐв.
Џ®н⮬г вҐе®«®ЈЁп Є®а४⮣® гЁз⮦ҐЁп Їа®жҐбб б®бв®Ёв
ў б«Ґ¤го饬:
1. Џа®жҐбб, ¦Ґ« ойЁ© б ¬®гЁз⮦Ёвмбп, ЇҐаҐў®¤Ёвбп ў бЇҐжЁ-
«мго ®зҐаҐ¤м гЁз⮦ Ґ¬ле Їа®жҐбб®ў, ҐЈ® ¤ҐбЄаЁЇв®а Ґ а §аг-
и Ґвбп.
2. „ЁбЇҐвзҐа Є ¦¤®¬ ЇаҐалў ЁЁ ®зЁй Ґв ®зҐаҐ¤м гЁз⮦ Ґ-
¬ле Їа®жҐбб®ў, а §аги п Ёе ¤ҐбЄаЁЇв®ал.
‘ гзҐв®¬ ЇаЁўҐ¤Ґле Ї®«®¦ҐЁ© ®ЇЁб ЁҐ ®зҐаҐ¤Ё гЁз⮦ Ґ¬ле
Їа®жҐбб®ў ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬:
Type
KillList = Object(List)
Procedure SelfInsert;
- 18 -
Procedure Clear;
End {KillList}.
ЊҐв®¤ KillList.Clear ўл§лў Ґвбп Ё§ Їа®жҐ¤гал ¤ЁбЇҐвзҐа
Є ¦¤®¬ ЇаҐалў ЁЁ ®в в ©¬Ґа .
„ ¤Ё¬ б«®ўҐб®Ґ ®ЇЁб ЁҐ ¬Ґв®¤ KillList.Clear.
Procedure KillList.Clear;
Var
‚६Ґл© : Џа®жҐбб;
Begin
Џ®Є ЏҐаўл© <> NIL „Ґ« вм Ќ з «®
‚६Ґл© := ЏҐаўл©;
ЏҐаўл© := ‚६Ґл©^.‘«Ґ¤гойЁ©;
ђ §агиЁвм(‚६Ґл©);
Љ®Ґж {Џ®Є };
End {KillList.Clear}.
ЏаЁ¬ЁвЁў п¤а “Ќ€—’Ћ†€’њ_ЏђЋ–…‘‘(P : ЏђЋ–…‘‘) ўлЈ«п¤Ёв б«Ґ-
¤гойЁ¬ ®Ўа §®¬ KillList.Insert(P).
ЏаЁ б ¬®гЁз⮦ҐЁЁ Їа®жҐбб ¤®«¦Ґ ®Ўа вЁвмбп Є ¬Ґв®¤г:
KillList.SelfInsert.
‡ ¬ҐвЁ¬, зв® Їа®жҐбб ЁЄ®Ј¤ Ґ ¤®«¦Ґ § Є зЁў вмбп ўл室®¬
End Їа®жҐ¤гал, Є®в®а п ҐЈ® ®ЇЁблў Ґв, в®«мЄ® ўл§®ў®¬ Kill-
List.SelfInsert.
я2‡ ¤ ЁҐ
1. €бЇ®«м§гп ¬ вҐаЁ «л ЇаҐ¤л¤гйЁе « Ў®а в®але а Ў®в Ё
ЇаҐ¤бв ў«Ґ®Ґ ўлиҐ ®ЇЁб ЁҐ бЁб⥬ле ®зҐаҐ¤Ґ©, ॠ«Ё§®ў вм ®Ўк-
ҐЄвл: ®зҐаҐ¤м § ¤Ґа¦ ле Їа®жҐбб®ў, ®зҐаҐ¤м Їа®жҐбб®ў, § ¤Ґа¦ -
ле ўаҐ¬п, ®зҐаҐ¤м гЁз⮦ Ґ¬ле Їа®жҐбб®ў.
2. „®Ў ўЁвм ЇҐаҐзЁб«ҐлҐ ®ЎкҐЄвл ў ЎЁЎ«Ё®вҐзл© ¬®¤г«м, аҐ-
«Ё§гойЁ© п¤а®.
3. ђҐ «Ё§®ў вм Їа®Ја ¬¬г, ¤Ґ¬®бваЁагойго а Ў®в®бЇ®б®Ў®бвм
а §а Ў®в ле ®ЎкҐЄв®ў.
я1ЋвзҐв ¤®«¦Ґ ᮤҐа¦ вмя0 ⥪бвл Їа®Ја ¬¬л Ё ЎЁЎ«Ё®вҐз®Ј® ¬®-
¤г«п б Є®¬¬Ґв аЁп¬Ё.
- 19 -
я2‹ Ў®а в®а п а Ў®в 5
я2€‘‘‹…„Ћ‚ЂЌ€… Њ…’Ћ„Ћ‚ ‘€Ќ•ђЋЌ€‡Ђ–€€ ЏђЋ–…‘‘Ћ‚
я1–Ґ«м а Ў®вля0 - § Є®¬бвў® б ¬Ґв®¤ ¬Ё бЁеа®Ё§ жЁЁ Їа®жҐбб®ў
®б®ўҐ ᥬ д®а®ў.
я2ЋЎйЁҐ ᢥ¤ҐЁп
‘Ёеа®Ё§ жЁҐ© §лў Ґвбп ®ЎҐбЇҐзҐЁҐ § ¤ ®© ®зҐаҐ¤®бвЁ
Їа®е®¦¤ҐЁп Їа®жҐбб®ў зҐаҐ§ ®ЇаҐ¤Ґ«ҐлҐ б®бв®пЁп.
Ќ ЁЎ®«ҐҐ з бв® бЁеа®Ё§ жЁп вॡгҐвбп ¤«п Є®®а¤Ё жЁЁ ¤®б-
вгЇ ҐбЄ®«мЄЁе Їа®жҐбб®ў Є ®¤®¬г а §¤Ґ«пҐ¬®¬г аҐбгабг.
ђ бᬮваЁ¬ Їа®б⥩訩 ЇаЁ¬Ґа. ЏаҐ¤Ї®«®¦Ё¬, зв® ¤ў Їа®жҐбб
ўлў®¤пв Ёд®а¬ жЁо ў ўЁ¤Ґ бЁ¬ў®« ў а §лҐ в®зЄЁ нЄа .
”а Ј¬Ґв ⥪бв Їа®жҐ¤га, ᮮ⢥вбвўгойЁе Їа®жҐбб ¬, ўлЈ«п-
¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬:
Џа®жҐбб 1 Џа®жҐбб 2
(1) GoTo(X,Y); (3) GoTo(X,Y);
(2) Write(Ch); (4) Write(Ch);
ЏаЁ ўлЇ®«ҐЁЁ Їа®жҐбб®ў ў ०Ё¬Ґ а §¤Ґ«ҐЁп ўаҐ¬ҐЁ ў®§¬®¦-
бЁвг жЁп, Є®Ј¤ ®ЇҐа в®а®¬ GoTo(X,Y) Єгаб®а гбв ў«Ёў Ґвбп ў
г¦го в®зЄг нЄа ®¤Ё¬ Їа®жҐбᮬ, § ⥬ ¤ЁбЇҐвзҐа ЇҐаҐ¤ Ґв гЇ-
а ў«ҐЁҐ ¤агЈ®¬г Їа®жҐббг, Є®в®ал© ў нв® ўаҐ¬п ўлЇ®«пҐв ®ЇҐа жЁо
ўлў®¤ бЁ¬ў®« . ’® Ґбвм ®зҐаҐ¤®бвм ўлЇ®«ҐЁп ¤Ґ©бвўЁ© в Є®ў :
1, 3, 2, 4 Ё«Ё 3, 1, 4, 2. ЋзҐўЁ¤®, зв® ў н⮬ б«гз Ґ ®¤Ё Ё§
Їа®жҐбб®ў ўлўҐ¤Ґв Ёд®а¬ жЁо Ґ ў в® ¬Ґбв® нЄа , Єг¤ Ї« Ёа®-
ў «.
‘гвм ЁбЇа ў«ҐЁп ®иЁЎЄЁ б®бв®Ёв ў ®ЎҐбЇҐзҐЁЁ Ґ¤Ґ«Ё¬®бвЁ
ўлЇ®«ҐЁп Ї®б«Ґ¤®ў ⥫м®бвЁ ¤Ґ©бвўЁ© GoTo(X,Y) Ё Write(Ch).
‚ Ў®«ҐҐ ®ЎйҐ¬ б¬лб«Ґ бЁвг жЁп ЇаҐ¤бв ў«пҐвбп б«Ґ¤гойЁ¬ ®Ўа -
§®¬. ќЄа ў ¤ ®¬ б«гз Ґ ўлбвгЇ Ґв ў а®«Ё а §¤Ґ«пҐ¬®Ј® аҐбгаб ,
Є®в®ал© б®ў¬Ґбв® Ё ®¤®ўаҐ¬Ґ® ЁбЇ®«м§гов ¤ў Їа®жҐбб . ЋиЁЎЄ
ў®§ЁЄ Ґв ЇаЁ ®вбгвбвўЁЁ ॣ« ¬Ґв жЁЁ ¤®бвгЇ Є а §¤Ґ«пҐ¬®¬г аҐ-
бгабг, Є®в®а п § Є«оз Ґвбп ў ⮬, зв® Ґб«Ё ®¤Ё Їа®жҐбб а Ў®в Ґв
б ®ЎйЁ¬ аҐбгаᮬ, в® ¤агЈ®© Ґ ¤®«¦Ґ ў нв® ¦Ґ ўаҐ¬п а Ў®в вм б
Ё¬.
- 20 -
€бЇ®«м§гҐ¬л© б®ў¬Ґбв® ҐбЄ®«мЄЁ¬Ё Їа®жҐбб ¬Ё аҐбгаб §лў -
Ґвбп ЄаЁвЁзҐбЄЁ¬, гз бв®Є Їа®Ја ¬¬л Їа®жҐбб , ॠ«Ё§гойЁ© а Ў®вг
б ЄаЁвЁзҐбЄЁ¬ аҐбгаᮬ, §лў Ґвбп ЄаЁвЁзҐбЄЁ¬ гз бвЄ®¬, ०Ё¬,
ЇаЁ Є®в®а®¬ в®«мЄ® ®¤Ё Їа®жҐбб ў Їа®Ё§ў®«мл© ¬®¬Ґв ўаҐ¬ҐЁ ¬®-
¦Ґв а Ў®в вм б ЄаЁвЁзҐбЄЁ¬ аҐбгаᮬ (Ё«Ё 室Ёвмбп ў ЄаЁвЁзҐбЄ®¬
гз бвЄҐ), §лў Ґвбп ०Ё¬®¬ ў§ Ё¬®Ј® ЁбЄ«о票п.
‚ бЁб⥬ е ॠ«м®Ј® ўаҐ¬ҐЁ ЇаҐҐЎаҐ¦ҐЁҐ ॣ« ¬Ґв жЁҐ©
¤®бвгЇ ҐбЄ®«мЄЁе Їа®жҐбб®ў Є ЄаЁвЁзҐбЄ®¬г аҐбгабг ¬®¦Ґв ЇаЁў®-
¤Ёвм Є Є в бва®дЁзҐбЄЁ¬ Ї®б«Ґ¤бвўЁп¬.
я2ЊҐв®¤л ®ЎҐбЇҐзҐЁп ०Ё¬ ў§ Ё¬®Ј® ЁбЄ«о票п
Њ®¦® ўл¤Ґ«Ёвм ваЁ ЇаЁжЁЇЁ «мле ЇгвЁ ®ЎҐбЇҐзҐЁп ०Ё¬
ў§ Ё¬®Ј® ЁбЄ«о票п.
я11) ‡ ЇаҐв ЇаҐалў Ё© ўе®¤Ґ ў ЄаЁвЁзҐбЄЁ© гз бв®Є Ё а §аҐ-
я1襨Ґ ЇаҐалў Ё© ўл室Ґ Ё§ ҐЈ®.
‚ н⮬ б«гз Ґ да Ј¬Ґв Їа®Ја ¬¬л а Ў®вл б ЄаЁвЁзҐбЄЁ¬ гз бв-
Є®¬ ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬:
‡ ЇаҐв ЇаҐалў Ё©:
ЉаЁвЁзҐбЄЁ© гз бв®Є;
ђ §аҐиҐЁҐ ЇаҐалў Ё©.
ЏҐаўл¬ Ё Ґ¤ЁбвўҐл¬ ў бў®© ЄаЁвЁзҐбЄЁ© гз бв®Є ў®©¤Ґв в®в
Їа®жҐбб, Є®в®ал© ЇҐаўл¬ ¤®ЎҐаҐвбп ¤® ЁбвагЄжЁЁ CLI ў дгЄжЁЁ
я1"‡ ЇаҐв ЇаҐалў Ё©"я0. ЏаҐалў Ёп Ўг¤гв § ЇаҐйҐл, ¤ЁбЇҐвзҐа ЇаҐЄ-
а вЁв а Ў®вг Ё ўбҐ ¤агЈЁҐ Їа®жҐббл ҐбвҐбвўҐл¬ ®Ўа §®¬ Ўг¤гв
ЇаЁ®бв ®ў«Ґл. Џ®б«Ґ ўл室 Ё§ ЄаЁвЁзҐбЄ®Ј® гз бвЄ ЇаҐалў Ёп
Ўг¤гв а §аҐиҐл Ё Є Є®©-в® ¤агЈ®© Їа®жҐбб ᬮ¦Ґв ў®©вЁ ў бў®©
ЄаЁвЁзҐбЄЁ© гз бв®Є.
’ Є®© бЇ®б®Ў ®аЈ Ё§ жЁЁ ў§ Ё¬®Ј® ЁбЄ«озҐЁп ®Ў« ¤ Ґв бг-
йҐб⢥묨 Ґ¤®бв вЄ ¬Ё:
- ЇаЁ § ЇаҐвҐ ЇаҐалў Ё© бЁб⥬ бв ®ўЁвбп б«ҐЇ®© Ё Ј«ге®©
Є ўҐиЁ¬ ў®§¤Ґ©бвўЁп¬ ®Єаг¦ о饩 б।л, Є®в®алҐ д®а¬Ёаговбп, Є Є
Їа ўЁ«®, зҐаҐ§ бЁб⥬㠯аҐалў Ё©;
- ЇаЁ®бв ў«Ёў овбп ¤ ¦Ґ ⥠Їа®жҐббл, Є®в®алҐ ў®®ЎйҐ Ґ а -
Ў®в ов б ¤ л¬ аҐбгаᮬ.
Џ®н⮬㠤 л© бЇ®б®Ў ®аЈ Ё§ жЁЁ ў§ Ё¬®Ј® ЁбЄ«озҐЁп ЇаЁ-
¬ҐпҐвбп ў вҐе б«гз пе, Є®Ј¤ ЄаЁвЁзҐбЄЁ© гз бв®Є ®зҐм Є®а®вЄЁ©,
ЇаЁ¬Ґа, ҐбЄ®«мЄ® ЁбвагЄжЁ©.
- 21 -
я12) ЂЄвЁў®Ґ ®¦Ё¤ ЁҐ.
‚ н⮬ б«гз Ґ ўў®¤Ёвбп ҐЄ®в®ал© д« Ј § пв®бвЁ аҐбгаб , Є®-
в®ал© Їа®ўҐапҐвбп Їа®жҐбᮬ ЇҐаҐ¤ ⥬, Є Є ў®©вЁ ў ЄаЁвЁзҐбЄЁ©
гз бв®Є. …б«Ё д« Ј, Є®в®ал© ў з «Ґ гбв ў«Ёў Ґвбп ў б®бв®пЁҐ
‘‚ЋЃЋ„…Ќ, 室Ёвбп ў б®бв®пЁЁ ‘‚ЋЃЋ„…Ќ, в® Їа®жҐбб ЇҐаҐў®¤Ёв
ҐЈ® ў б®бв®пЁҐ ‡ЂЌџ’ Ё ўе®¤Ёв ў ЄаЁвЁзҐбЄЁ© гз бв®Є. ЏаЁ ўл室Ґ
Ё§ ҐЈ® Їа®жҐбб гбв ў«Ёў Ґв д« Ј ў б®бв®пЁҐ ‘‚ЋЃЋ„…Ќ. …б«Ё ЇаЁ
Ї®¤е®¤Ґ Є ЄаЁвЁзҐбЄ®¬г гз бвЄг д« Ј ®Є §лў Ґвбп ў б®бв®пЁЁ ‡Ђ-
Ќџ’, в® Їа®жҐбб зЁ Ґв Їа®ўҐапвм б®бв®пЁҐ д« Ј ў жЁЄ«Ґ ¤® вҐе
Ї®а, Ї®Є д« Ј Ґ Ўг¤Ґв гбв ®ў«Ґ ў б®бв®пЁҐ ‘‚ЋЃЋ„…Ќ ¤агЈЁ¬
Їа®жҐбᮬ.
”а Ј¬Ґвл Їа®жҐ¤гал, ®ЇЁблў ойЁҐ Їа®жҐбб нв Ї е ўе®¤ ў
ЄаЁвЁзҐбЄЁ© гз бв®Є Ё ўл室 Ё§ ҐЈ®, ўлЈ«п¤пв б«Ґ¤гойЁ¬ ®Ўа §®¬:
€ЁжЁ «Ё§ жЁп: FLAG := ‘‚ЋЃЋ„…Ќ;
While FLAG = ‡ЂЌџ’ Do Begin
End {While};
FLAG := ‡ЂЌџ’;
ЉаЁвЁзҐбЄЁ© гз бв®Є;
FLAG := ‘‚ЋЃЋ„…Ќ;
‚ ¤ ®¬ б«гз Ґ б ¬ д« Ј пў«пҐвбп ЄаЁвЁзҐбЄЁ¬ аҐбгаᮬ Ё
¤®бвгЇ Є Ґ¬г ¤®«¦Ґ Їа®Ё§ў®¤Ёвмбп ў ०Ё¬Ґ ў§ Ё¬®Ј® ЁбЄ«о票п.
”а Ј¬Ґв ўе®¤ ў ЄаЁвЁзҐбЄЁ© гз бв®Є б Їа®ўҐаЄ®© Ё гбв ®ўЄ®©
д« Ј ў ०Ё¬Ґ ў§ Ё¬®Ј® ЁбЄ«озҐЁп ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬
(б®бв®пЁо ‡ЂЌџ’ ᮮ⢥вбвўгҐв FLAG = 1):
LBL : STI
CLI
CMP FLAG, 1
JZ LBL
MOV FLAG, 1
STI
…б«Ё з⥨Ґ Ё гбв ®ўЄг д« Ј ўлЇ®«пвм § ®¤г ЁбвагЄжЁо,
Є®в®а п пў«пҐвбп Ґ¤Ґ«Ё¬л¬ ¤Ґ©бвўЁҐ¬, в® ўе®¤ ў ЄаЁвЁзҐбЄЁ© гз б-
в®Є ¬®¦® ўлЇ®«Ёвм Ў®«ҐҐ н«ҐЈ в®, Ё¬Ґ®:
MOV AX, 1
LBL : XCHG AX, FLAG
CMP AX, 1
- 22 -
JZ LBL
ЌҐ¤®бв вЄ®¬ ЇаЁўҐ¤Ґ®Ј® ¬Ґв®¤ ॠ«Ё§ жЁЁ ў§ Ё¬®Ј® ЁбЄ«о-
票п пў«пҐвбп ЄвЁў®Ґ ®¦Ё¤ ЁҐ, в. Ґ. Їа®жҐбб, Є®в®ал© ¦¤Ґв ®б-
ў®Ў®¦¤ҐЁп аҐбгаб , § Ё¬ Ґв Їа®жҐбб®а ў ®вў®¤Ё¬лҐ Ґ¬г ¤ЁбЇҐвзҐ-
஬ Єў вл ўаҐ¬ҐЁ, е®вп Ё Ґ ўлЇ®«пҐв ЁЄ ЄЁе Ї®«Ґ§ле ¤Ґ©б-
вўЁ©.
Џ®н⮬㠢 б«гз Ґ ®¦Ё¤ Ёп ®бў®Ў®¦¤ҐЁп аҐбгаб 楫Ґб®®Ўа §®
Ё§ў«Ґзм Їа®жҐбб Ё§ ®зҐаҐ¤Ё Ј®в®ўле Їа®жҐбб®ў Ё Ґ ЇаҐ¤®бв ў«пвм
Ґ¬г ЎҐбЇ®«Ґ§® ЁбЇ®«м§гҐ¬ле Єў в®ў ўаҐ¬ҐЁ. Ќ н⮬ Ї®«®¦ҐЁЁ
®б®ў ® ЁбЇ®«м§®ў ЁҐ ᥬ д®а®ў Є Є б।бвў ў§ Ё¬®Ј® ЁбЄ«о票п
ЇаЁ ¤®бвгЇҐ Є ЄаЁвЁзҐбЄ®¬г аҐбгабг.
я13) ‘Ґ¬ д®ал.
‘Ґ¬ д®а ЇаҐ¤бв ў«пҐв б®Ў®© ®ЎкҐЄв, ўЄ«оз ойЁ© бзҐвзЁЄ Ё ®зҐ-
।м. ‚ ®зҐаҐ¤м Ї®¬Ґй овбп Їа®жҐббл, ¦¤гйЁҐ бвгЇ«ҐЁп ҐЄ®в®а®-
Ј® б®ЎлвЁп, ЇаЁ¬Ґа ®бў®Ў®¦¤ҐЁп аҐбгаб . “б«®ўЁп Ї®¬ҐйҐЁп Їа®-
жҐбб ў ®зҐаҐ¤м Ё Ё§ў«ҐзҐЁп Ё§ ҐҐ б 楫мо ЄвЁўЁ§ жЁЁ ®ЇаҐ¤Ґ«п-
овбп б®бв®пЁҐ¬ бзҐвзЁЄ Ё Їа®ўҐаповбп ¤ўг¬п ®ЇҐа жЁп¬Ё ¤ ᥬ -
д®а®¬, Є®в®алҐ §лў овбп P- Ё V- ®ЇҐа жЁп¬Ё.
ЏаЁжЁЇл а Ў®вл б ᥬ д®а®¬ ¬®¦® ®ЇЁб вм б«Ґ¤гойЁ¬ ®Ўа §®¬.
‚ Ёб室®¬ б®бв®пЁЁ ᥬ д®а ®вЄалв. Џа®жҐбб Їа®е®¤Ёв зҐаҐ§ ®вЄ-
алвл© бҐ¬ д®а ў ЄаЁвЁзҐбЄЁ© гз бв®Є Ё § Єалў Ґв § б®Ў®© ᥬ д®а.
„агЈ®© Їа®жҐбб, Ї®¤е®¤п Є ЄаЁвЁзҐбЄ®¬г гз бвЄг, влЄ Ґвбп
§ Єалвл© бҐ¬ д®а Ё ўл㦤Ґ ¦¤ вм ҐЈ® ®вЄалвЁп ў ®зҐаҐ¤Ё ᥬ д®-
а . Џа®жҐбб, ўле®¤п Ё§ ЄаЁвЁзҐбЄ®Ј® гз бвЄ , ®вЄалў Ґв ᥬ д®а Ё
ЄвЁўЁ§ЁагҐв ЇҐаўл© ў ®зҐаҐ¤Ё ᥬ д®а Їа®жҐбб, Є®в®ал© вҐЇҐам
¬®¦Ґв ў®©вЁ ў ЄаЁвЁзҐбЄЁ© гз бв®Є Ё в Є¦Ґ § Єалвм § б®Ў®© ᥬ -
д®а.
‘®бв®пЁҐ бзҐвзЁЄ ᥬ д®а ЁЈа Ґв а®«м Ё¤ЁЄ в®а § пв®бвЁ
аҐбгаб . ЏаЁпв® ЁЁжЁ «Ё§Ёа®ў вм бзҐвзЁЄ ў 1, ¤ҐЄаҐ¬ҐвЁа®ў вм
ҐЈ® ЇаЁ Ї®¤е®¤Ґ Є ЄаЁвЁзҐбЄ®¬г гз бвЄг (ђ - ®ЇҐа жЁп) Ё ЁЄаҐ¬Ґ-
вЁа®ў вм ЇаЁ ўл室Ґ Ё§ ЄаЁвЁзҐбЄ®Ј® гз бвЄ (V - ®ЇҐа жЁп). ’ ЄЁ¬
®Ўа §®¬, а ўҐбвў® г«о бзҐвзЁЄ бўЁ¤ҐвҐ«мбвўгҐв ® ў®§¬®¦®бвЁ
ўе®¤ ў ЄаЁвЁзҐбЄЁ© гз бв®Є, ®ваЁж ⥫쮥 § 票Ґ бзҐвзЁЄ
бўЁ¤ҐвҐ«мбвўгҐв ® «ЁзЁЁ Їа®жҐбб ў ЄаЁвЁзҐбЄ®¬ гз бвЄҐ Ё Ґ®Ў-
室Ё¬®бвЁ Ў«®ЄЁа®ўЄЁ, в. Ґ. ® ЇҐаҐў®¤Ґ ў ®зҐаҐ¤м ᥬ д®а б ЇҐаҐ-
¤ 祩 гЇа ў«ҐЁп ¤агЈЁ¬ Їа®жҐбб ¬.
- 23 -
я2’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ ᥬ д®а
’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ ᥬ д®а ЇаҐ¤бв ў«Ґ ў ўЁ¤Ґ ®ЇЁб Ёп
ᥬ д®а Є Є ®ЎкҐЄв п§лЄ Їа®Ја ¬¬Ёа®ў Ёп.
Type
PSemaphore = ^TSemaphore;
TSemaphore = Object
‘зҐвзЁЄ : –Ґ«®Ґ;
ЋзҐаҐ¤м_ᥬ д®а : ЋзҐаҐ¤м Їа®жҐбб®ў;
Constructor Init(‘ : –Ґ«®Ґ);
Destructor Done; Virtual;
Procedure P;
Procedure V;
End {TSemaphore}.
Constructor TSemaphore.Init(–Ґ«®Ґ);
Begin
‘зҐвзЁЄ := ‘;
‘®§¤ вм ЋзҐаҐ¤м_ᥬ д®а ;
End {TSemaphore.Init};
Destructor TSemaphore.Done;
Begin
ђ §агиЁвм ЋзҐаҐ¤м_ᥬ д®а ;
End {TSemaphore.Done};
Procedure TSemaphore.P;
Var
ЏаҐ¤л¤гйЁ© : Џа®жҐбб;
Begin
‡ ЇаҐвЁвм_ЇаҐалў Ёп;
‘зҐвзЁЄ := ‘зҐвзЁЄ - 1;
If ‘зҐвзЁЄ < 0 Then Begin {Ў«®ЄЁа®ў вм Їа®жҐбб}
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
ЋзҐаҐ¤м_ᥬ д®а .‚Є«озЁвм(ЏаҐ¤л¤гйЁ©);
’ҐЄгйЁ© := ЋзҐаҐаҐ¤м_Ј®в®ўле.ЏҐаўл©;
ЋзҐаҐ¤м_Ј®в®ўле.€§ў«Ґзм(’ҐЄгйЁ©);
ЏҐаҐ¤ вм_гЇа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
End {If};
ђ §аҐиЁвм_ЇаҐалў Ёп;
End {TSemaphore.P};
- 24 -
Procedure TSemaphore.V;
Var
ЏаҐ¤л¤гйЁ© : Џа®жҐбб;
Begin
‡ ЇаҐвЁвм_ЇаҐалў Ёп;
‘зҐвзЁЄ := ‘зҐвзЁЄ + 1;
If ‘зҐвзЁЄ <= 0 Then Begin { ЄвЁўЁ§Ёа®ў вм Їа®жҐбб}
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
ЋзҐаҐ¤м_Ј®в®ўле.‚Є«озЁвм(ЏаҐ¤л¤гйЁ©);
’ҐЄгйЁ© := ЋзҐаҐ¤м_ᥬ д®а .ЏҐаўл©;
ЋзҐаҐ¤м_ᥬ д®а .€§ў«Ґзм(’ҐЄгйЁ©);
ЏҐаҐ¤ вм_гЇа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
End {If};
ђ §аҐиЁвм_ЇаҐалў Ёп;
End {TSemaphore.V}.
‡¤Ґбм Їа®жҐбб, ўл§ў ўиЁ© ¬Ґв®¤ TSemaphore.V, ЇҐаҐў®¤Ёвбп ў
®зҐаҐ¤м Ј®в®ўле Ё ЄвЁўЁ§ЁагҐв Їа®жҐбб, бв®пйЁ© ЇҐаўл¬ ў ®зҐаҐ¤Ё
ᥬ д®а .
я2’Ґе®«®ЈЁп ЁбЇ®«м§®ў Ёп ᥬ д®а®ў
‚ ЇҐаўго ®зҐаҐ¤м ᥬ д®ал ЁбЇ®«м§говбп Є Є б।бвў ў§ Ё¬®-
Ј® ЁбЄ«озҐЁп ЇаЁ ¤®бвгЇҐ Є ЄаЁвЁзҐбЄ®¬г аҐбгабг. Џа ўЁ«® ЁбЇ®«м-
§®ў Ёп ᥬ д®а ў н⮬ б«гз Ґ ЇаҐ¤бв ў«Ґ® ў ўЁ¤Ґ да Ј¬Ґв Їа®-
楤гал, ®ЇЁблў о饩 Їа®жҐбб ЇаЁ ўе®¤Ґ ў ЄаЁвЁзҐбЄЁ© гз бв®Є Ё ўл-
室Ґ Ё§ ҐЈ®.
ђ §¤Ґ« ®ЇЁб Ёп:
Var
Semaphore : TSemaphore;
ђ §¤Ґ« ЁЁжЁ «Ё§ жЁЁ:
Semaphore.Init(1);
Џа®жҐбб ЇаЁ а Ў®вҐ б ЄаЁвЁзҐбЄЁ¬ гз бвЄ®¬:
Semaphore.P;
ЉаЁвЁзҐбЄЁ© гз бв®Є;
Semaphore.V;
- 25 -
‡ ўҐа襨Ґ а Ў®вл б ᥬ д®а®¬:
Semaphore.Done;
‘Ґ¬ д®ал ¬®Јгв Ўлвм ЁбЇ®«м§®ў л Ґ в®«мЄ® ¤«п Є®®а¤Ё жЁЁ
¤®бвгЇ Є ЄаЁвЁзҐбЄ®¬г аҐбгабг ҐбЄ®«мЄЁе Їа®жҐбб®ў, ® Ё ¤«п гб-
в ®ў«ҐЁп вॡ㥬®© ®зҐаҐ¤®бвЁ Їа®е®¦¤ҐЁп Їа®жҐбб ¬Ё ®ЇаҐ¤Ґ-
«Ґле б®бв®пЁ©. Џгбвм, ЇаЁ¬Ґа, Ґ®Ўе®¤Ё¬®, зв®Ўл Їа®жҐбб ђ1
Їа®иҐ« зҐаҐ§ б®бв®пЁҐ, ®в¬ҐзҐ®Ґ ¬ҐвЄ®© Њ_ђ1, ЇаЁ¬Ґа з⥨Ґ
Ё§ п祩ЄЁ Ї ¬пвЁ Џ, в®«мЄ® Ї®б«Ґ в®Ј®, Є Є Їа®жҐбб ђ2 Їа®©¤Ґв зҐ-
१ б®бв®пЁҐ, ®в¬ҐзҐ®Ґ ¬ҐвЄ®© Њ_ђ2, ЇаЁ¬Ґа § ЇЁбм ў п祩Єг
Ї ¬пвЁ Џ, в.Ґ. § ЇЁбм ¤®«¦ Їа®Ё§®©вЁ а миҐ з⥨п.
‘ Ї®¬®ймо ᥬ д®а ¤ п § ¤ з аҐи Ґвбп б«Ґ¤гойЁ¬ ®Ўа §®¬:
€ЁжЁ «Ё§ жЁп ᥬ д®а : Semaphore.Init(0);
Џа®жҐбб ђ1 Џа®жҐбб ђ2
Semaphore.P;
Њ_ђ1 : —⥨Ґ Ё§ Џ; Њ_ђ2 : ‡ ЇЁбм ў Џ;
Semaphore.V;
…б«Ё Їа®жҐбб ђ1 Ї®¤®©¤Ґв Є ¬ҐвЄҐ Њ_ђ1 а миҐ, 祬 Їа®жҐбб ђ2
- Є ¬ҐвЄҐ Њ_ђ2, в® ® Ўг¤Ґв ўл㦤Ґ Ў«®ЄЁа®ў вмбп ў ®зҐаҐ¤Ё бҐ-
¬ д®а . Џа®жҐбб ђ2, ўлЇ®«Ёў § ЇЁбм ў п祩Єг Џ, ўл§®ўҐв Semapho-
re.V Ё ⥬ б ¬л¬ ЄвЁўЁ§ЁагҐв Їа®жҐбб ђ1, Ї®§ў®«Ёў Ґ¬г ўлЇ®«Ёвм
з⥨Ґ в®«мЄ® Ї®б«Ґ в®Ј® Є Є ®бгйҐбвў«Ґ § ЇЁбм.
— бв® Їа®жҐббл ॠ«Ё§говбп ў ўЁ¤Ґ ЎҐбЄ®Ґзле жЁЄ«®ў, Ї®нв®-
¬г, зв®Ўл Ё§ЎҐ¦ вм ҐбЄ®«мЄЁе § ЇЁбҐ© ў п祩Єг Џ ®¤Ё¬ Їа®жҐбᮬ
¤® ¬®¬Ґв звҐЁп Ё§ ҐҐ ¤агЈЁ¬ Їа®жҐбᮬ, Ґ®Ўе®¤Ё¬® Ї®б«Ґ¤гойЁҐ
§ ЇЁбЁ ®бгйҐбвў«пвм в®«мЄ® Ї®б«Ґ ®зҐаҐ¤®Ј® з⥨п. “Є § п
б奬 ॠ«Ё§гҐвбп б«Ґ¤гойЁ¬ ®Ўа §®¬:
€ЁжЁ «Ё§ жЁп ᥬ д®а : Semaphore1.Init(0);
€ЁжЁ «Ё§ жЁп ᥬ д®а : Semaphore2.Init(0);
- 26 -
Џа®жҐбб ђ1 Џа®жҐбб ђ2
While True Do Begin While True Do Begin
. . . . . .
Semaphore1.P;
Њ_ђ1 : —⥨Ґ Ё§ Џ; Њ_ђ2 : ‡ ЇЁбм ў Џ;
Semaphore2.V; Semaphore1.V;
Semaphore2.P;
. . . . . .
End {While}; End {While}.
’ҐЇҐам Їа®жҐбб ђ2, ўлЇ®«Ёў § ЇЁбм Ё бЁЈ «Ё§Ёа®ў ў ®Ў н⮬
ўл§®ў®¬ Semaphore1.V, ®¦Ё¤ Ґв, ЇаЁ®бв ®ў«Ґл© ўл§®ў®¬ Semapho-
re2.P, звҐЁп Їа®жҐбᮬ ђ1, ® 祬 ђ1 Ўг¤Ґв бЁЈ «Ё§Ёа®ў вм ўл§®-
ў®¬ Semaphore2.V. ‚ нв®© б奬Ґ ¬Ґв®¤л ᥬ д®а Semaphore2 б«г¦ в
¤«п ®¦Ё¤ Ёп Ё Ї®бл«ЄЁ ЄўЁв жЁЁ, Ї®¤вўҐа¦¤ о饩 з⥨Ґ.
я2‡ ¤ ЁҐ
1. ђҐ «Ё§®ў вм ®ЎкҐЄв - ᥬ д®а, ЁбЇ®«м§гп б।бвў , а §а -
Ў®в лҐ ЇаЁ ўлЇ®«ҐЁЁ « Ў®а в®але а Ў®в 1 - 4.
2. Ќ ЇЁб вм ¤Ґ¬®бва жЁ®го Їа®Ја ¬¬г, Ё««обваЁагойго Є®®а-
¤Ё жЁо ¤®бвгЇ Є ЄаЁвЁзҐбЄ®¬г аҐбгабг б Ї®¬®ймо ॠ«Ё§®ў ®Ј®
ᥬ д®а .
3. Ќ ЇЁб вм ¤Ґ¬®бва жЁ®го Їа®Ја ¬¬г, Ё««обваЁагойго бЁе-
а®Ё§ жЁо Їа®е®¦¤ҐЁп Їа®жҐбб®ў зҐаҐ§ ®ЇаҐ¤Ґ«ҐлҐ б®бв®пЁп б
Ї®¬®ймо ॠ«Ё§®ў ®Ј® ®ЎкҐЄв - ᥬ д®а.
я1ЋвзҐв ¤®«¦Ґ ᮤҐа¦ вмя0 ⥪бв ЎЁЎ«Ё®вҐз®Ј® ¬®¤г«п, ўЄ«оз о-
饣® ®ЇЁб ЁҐ Ё ॠ«Ё§ жЁо ®ЎкҐЄв - ᥬ д®а, ⥪бвл ¤Ґ¬®бва жЁ-
®ле Їа®Ја ¬¬ б Є®¬¬Ґв аЁп¬Ё, в Ў«Ёжл б®бв®пЁ© бзҐвзЁЄ®ў ᥬ -
д®а®ў ЇаЁ а §«Ёзле ў аЁ в е ®зҐаҐ¤®бвЁ Їа®е®¦¤ҐЁп Їа®жҐбб®ў
(¤«п зЁб« Їа®жҐбб®ў, Ў®«м襣® 祬 2) зҐаҐ§ ўл§®ўл P Ё V ЁбЇ®«м-
§гҐ¬ле ᥬ д®а®ў.
- 27 -
я2‹ Ў®а в®а п а Ў®в 6
я2€‘‘‹…„Ћ‚ЂЌ€… Њ…’Ћ„Ћ‚ Ѓ“”…ђ€‡Ђ–€€ ‘ЋЋЃ™…Ќ€‰
я1–Ґ«м а Ў®вля0 - Ё§г票Ґ ¬Ґв®¤ ®Ў¬Ґ б®®ЎйҐЁп¬Ё ¬Ґ¦¤г Їа®-
жҐбб ¬Ё б Ї®¬®ймо ЎгдҐа .
я2ЋЎйЁҐ ᢥ¤ҐЁп
ЃгдҐаЁ§ жЁп пў«пҐвбп б।бвў®¬ б®Ј« б®ў Ёп бЄ®а®бвЁ § ЇЁбЁ
б®®ЎйҐЁ© ®¤Ё¬ Їа®жҐбᮬ Ё бЄ®а®бвЁ Ёе звҐЁп ¤агЈЁ¬. ЏаЁ н⮬
ЎгдҐа пў«пҐвбп ®ЎйЁ¬, а §¤Ґ«пҐ¬л¬ ®ЎкҐЄв®¬ ¤«п ЇЁиг饣® Ё зЁв о-
饣® Їа®жҐбб®ў.
‘гйҐбвўгов б«Ґ¤гойЁҐ вॡ®ў Ёп Є «Ј®аЁв¬ ¬ дгЄжЁ®Ёа®ў -
Ёп ЎгдҐа :
1) Ґ«м§п § ЇЁб вм б®®ЎйҐЁҐ ў Ї®«л© ЎгдҐа; Їа®жҐбб, ¤Ґ« о-
йЁ© в Єго Ї®ЇлвЄг, ¤®«¦Ґ Ўлвм Ў«®ЄЁа®ў ¤® Ї®пў«ҐЁп бў®Ў®¤®©
п祩ЄЁ ў ЎгдҐаҐ;
2) Ґ«м§п Їа®зЁв вм б®®ЎйҐЁҐ Ё§ Їгбв®Ј® ЎгдҐа ; Їа®жҐбб,
¤Ґ« ойЁ© в Єго Ї®ЇлвЄг, ¤®«¦Ґ Ўлвм Ў«®ЄЁа®ў ¤® Ї®пў«ҐЁп б®®Ў-
йҐЁп ў ЎгдҐаҐ.
Љ Є Їа ўЁ«®, ¬Ґе Ё§¬л бЁеа®Ё§ жЁЁ § ЇЁбЁ ў ЎгдҐа Ё з⥨п
Ё§ ЎгдҐа пў«повбп бЄалвл¬Ё ¤«п Ї®«м§®ў ⥫п, Є®в®а®¬г ЇаҐ¤®бв ў-
«повбп «Ёим ЇаЁ¬ЁвЁўл ‘Ћ‡„Ђ’њ, “Ќ€—’Ћ†€’њ, ‡ЂЏ€‘Ђ’њ Ё ЏђЋ—€’Ђ’њ,
ўҐиҐ Ї®¬Ё ойЁҐ а Ў®вг б д ©« ¬Ё.
Џа®б⥩訩 ў аЁ в бЁеа®Ё§ жЁЁ § ЇЁбЁ Ё звҐЁп ¤«п ЎгдҐа
а §¬Ґа®¬ ў 1 п祩Єг Ї ¬пвЁ Ўл« а бᬮвॠў « Ў®а в®а®© а Ў®вҐ
5. ‚ ¤ ®© а Ў®вҐ а бб¬ ваЁў Ґвбп ®ЎйЁ© б«гз © ЎгдҐа а §¬Ґа®¬ ў
N н«Ґ¬Ґв®ў.
я2‘вагЄвга ЎгдҐа
ЃгдҐа ЇаҐ¤бв ў«пҐв б®Ў®© ¬ ббЁў Ё§ N н«Ґ¬Ґв®ў ®ЇаҐ¤Ґ«Ґ®Ј®
вЁЇ . ‘®бв®пЁҐ ЎгдҐа ®ЇЁблў Ґвбп Є®«ЁзҐбвў®¬ б®®ЎйҐЁ© n, е®-
¤пйЁебп ў ЎгдҐаҐ, Ё ¤ўг¬п Ё¤ҐЄб ¬Ё - Ё¤ҐЄб®¬ out звҐЁп Ё Ё-
¤ҐЄб®¬ in § ЇЁбЁ.
‡ ЇЁбм ў ЎгдҐа ЇаҐ¤ў апҐвбп Їа®ўҐаЄ®© гб«®ўЁп "ЎгдҐа Ї®«®",
в. Ґ. n = N, з⥨Ґ Ё§ ЎгдҐа - Їа®ўҐаЄ®© гб«®ўЁп "ЎгдҐа Їгбв",
в. Ґ. n = 0.
‚лЇ®«ҐЁҐ гб«®ўЁп "ЎгдҐа Ї®«®" ®§ з Ґв, зв® бЄ®а®бвм § -
ЇЁбЁ ЇаҐўлбЁ« бЄ®а®бвм з⥨п, ўлЇ®«ҐЁҐ гб«®ўЁп "ЎгдҐа Їгбв"
- 28 -
®§ з Ґв, зв® бЄ®а®бвм звҐЁп ўлиҐ бЄ®а®бвЁ § ЇЁбЁ. ‚ ®а¬ «м®¬
б®бв®пЁЁ § 票Ґ Ё¤ҐЄб § ЇЁбЁ Ґ¬®Ј® ЇаҐўли Ґв § 票Ґ Ё-
¤ҐЄб з⥨п, зв® Ё««обваЁагҐвбп б«Ґ¤гойЁ¬ аЁбгЄ®¬:
ЪДДДДДДДДДДДДДДДДДДї
і і
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і ДДДДДДДДД> Out з⥨Ґ
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і (‘«Ґ¤го饥 з⥨Ґ)
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і
ГДДДДДДДДДДДДДДДДДДґ
‡ ЇЁбм in ДДДДДД> і і
ГДДДДДДДДДДДДДДДДДДґ
(‘«Ґ¤гой п § ЇЁбм) і і
АДДДДДДДДДДДДДДДДДДЩ
ЋЎлз® ЎгдҐа а бб¬ ваЁў Ґвбп Є Є Є®«м楢®©, в. Ґ. Ї®б«Ґ § -
ЇЁбЁ ў Ї®б«Ґ¤оо п祩Єг ЎгдҐа § ЇЁбм Їа®¤®«¦ Ґвбп б ЇҐаў®© п祩-
ЄЁ, з⥨Ґ ®бгйҐбвў«пҐвбп «®ЈЁз®.
‘Ёеа®Ё§ жЁп § ЇЁбЁ Ё з⥨п ॠ«Ё§гҐвбп ЁбЇ®«м§®ў ЁҐ¬
®зҐаҐ¤Ґ© ®¦Ё¤ Ёп ¤ўге ўЁ¤®ў:
- ®зҐаҐ¤Ё Їа®жҐбб®ў, ¦¤гйЁе § ЇЁбЁ, Є®Ј¤ ЎгдҐа Ї®«®;
- ®зҐаҐ¤Ё Їа®жҐбб®ў, ¦¤гйЁе з⥨п, Є®Ј¤ ЎгдҐа Їгбв.
я2ЋЇЁб ЁҐ ЎгдҐа
ЏаҐ¤бв ўЁ¬ ЎгдҐа ў ўЁ¤Ґ ®ЎкҐЄв :
TBuffer = Object
in, out : [0..N-1];
n : [0..N];
Buf : Array[0..N-1] Of AnyType;
ReadList, WriteList : TList;
Constructor Init;
Destructor Done; Virtual;
Procedure Write(M : AnyType);
Procedure Read(Var M : AnyType);
Procedure Wait_Read;
Procedure Signal_Read;
Procedure Wait_Write;
- 29 -
Procedure Signal_Write;
End {TBuffer}.
Constructor TBuffer.Init;
Begin
in := 0; out := 0; n := 0;
ReadList.Init;
WriteList.Init;
End {TBuffer.Init};
Destructor TBuffer.Done;
Begin
ReadList.Done;
WriteList.Done;
End {TBuffer.Done};
‘Ёеа®Ё§ жЁп § ЇЁбЁ Ё з⥨п ॠ«Ё§гҐвбп б«Ґ¤гойЁ¬Ё зҐвлам-
¬п ¬Ґв®¤ ¬Ё ®ЎкҐЄв - ЎгдҐа .
Procedure TBuffer.Wait_Read;
{§ бв ў«пҐв Їа®жҐбб ¦¤ вм з⥨п, Ґб«Ё ЎгдҐа Їгбв®©}
Var
ЏаҐ¤л¤гйЁ© : Џа®жҐбб;
Begin
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
ReadList.‚Є«озЁвм(ЏаҐ¤л¤гйЁ©);
’ҐЄгйЁ© := ЋзҐаҐ¤м_Ј®в®ўле.ЏҐаўл©;
ЋзҐаҐ¤м_Ј®в®ўле.€§ў«Ґзм(’ҐЄгйЁ©);
ЏҐаҐ¤ вм_гЇа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
End {TBuffer.Wait_Read};
Procedure TBuffer.Wait_Write;
{§ бв ў«пҐв Їа®жҐбб ¦¤ вм § ЇЁбЁ, Ґб«Ё ЎгдҐа Ї®«л©}
Var
ЏаҐ¤л¤гйЁ© : Џа®жҐбб;
Begin
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
WriteList.‚Є«озЁвм(ЏаҐ¤л¤гйЁ©);
’ҐЄгйЁ© := ЋзҐаҐаҐ¤м_Ј®в®ўле.ЏҐаўл©;
ЋзҐаҐ¤м_Ј®в®ўле.€§ў«Ґзм(’ҐЄгйЁ©);
ЏҐаҐ¤ вм_гЇа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
End {TBuffer.Wait_Write};
Procedure TBuffer.Signal_Read;
{"бЁЈ «Ё§ЁагҐв" ® ⮬, зв® Їа®Ё§ўҐ¤Ґ § ЇЁбм Ё ў®§¬®¦ ЄвЁўЁ-
- 30 -
§ жЁп ®¤®Ј® Ё§ Їа®жҐбб®ў, ¦¤гйЁе з⥨п}
Var
‹®Є «мл© : Џа®жҐбб;
Begin
‹®Є «мл© := ReadList.ЏҐаўл©;
If ‹®Є «мл© <> NIL Then Begin {®зҐаҐ¤м Ґ Їгбв п}
ReadList.€§ў«Ґзм(‹®Є «мл©);
ЋзҐаҐ¤м_Ј®в®ўле.‚Є«озЁвм(‹®Є «мл©);
End {If};
End {TBuffer.Signal_Read}.
Procedure TBuffer.Signal_Write;
{"бЁЈ «Ё§ЁагҐв" ® ⮬, зв® Їа®Ё§ўҐ¤Ґ® з⥨Ґ Ё ў®§¬®¦ ЄвЁўЁ-
§ жЁп ®¤®Ј® Ё§ Їа®жҐбб®ў, ¦¤гйЁе § ЇЁбЁ}
Var
‹®Є «мл© : Џа®жҐбб;
Begin
‹®Є «мл© := WriteList.ЏҐаўл©;
If ‹®Є «мл© <> NIL Then Begin {®зҐаҐ¤м Ґ Їгбв п}
WriteList.€§ў«Ґзм(‹®Є «мл©);
ЋзҐаҐ¤м_Ј®в®ўле.‚Є«озЁвм(‹®Є «мл©);
End {If};
End {TBuffer.Signal_Write}.
Procedure TBuffer.Write(M : AnyType);
Begin
‡ ЇаҐвЁвм ЇаҐалў Ёп;
If n = N Then Wait_Write; {ЎгдҐа Ї®«л©}
n := n + 1;
Buf[in] := M;
in := (in + 1) MOD N;
Signal_Read;
ђ §аҐиЁвм ЇаҐалў Ёп;
End {TBuffer.Write};
Procedure TBuffer.Read(Var M : AnyType);
Begin
‡ ЇаҐвЁвм ЇаҐалў Ёп;
If n = 0 Then Wait_Read; {ЎгдҐа Їгбв®©}
n := n - 1;
Њ := Buf[out];
out := (out + 1) MOD N;
- 31 -
Signal_Write;
ђ §аҐиЁвм ЇаҐалў Ёп;
End {TBuffer.Read};
‚ ¬Ґв®¤ е Signal_Read Ё Signal_Write гЇа ў«ҐЁҐ Ґ ЇҐаҐ¤ Ґв-
бп ЄвЁўЁ§ЁагҐ¬л¬ Їа®жҐбб ¬, ®Ё «Ёим бв ўпвбп ў ®зҐаҐ¤м Ј®в®-
ўле Їа®жҐбб®ў. ќв® ¬®¦Ґв Ї®а®¤Ёвм Ґ®ЇаҐ¤Ґ«Ґ®бвм, в Є Є Є ҐЁ§-
ўҐбв®, зв® Ўг¤Ґв б ЎгдҐа®¬, Є®Ј¤ ¤® Ёе ўлЇ®«ҐЁп ¤®©¤Ґв ®зҐ-
।м. Џ®н⮬㠪⨢Ё§ жЁо Їа®жҐбб®ў «гзиҐ ўлЇ®«пвм Ґ ¤® ўЄ«озҐ-
Ёп ў ®зҐаҐ¤м Ј®в®ўле Їа®жҐбб®ў, ¤® ЇҐаҐ¤ зЁ гЇа ў«ҐЁп ЄвЁўЁ-
§Ёа㥬®¬г Їа®жҐббг. ЊҐв®¤ Signal_Read ¤«п нв®Ј® б«гз п ЇаҐ¤бв ў-
«Ґ Ё¦Ґ, ¬Ґв®¤ Signal_Write ॠ«Ё§гҐвбп «®ЈЁз®.
Procedure TBuffer.Signal_Read;
Var
ЏаҐ¤л¤гйЁ©, ‹®Є «мл© : Џа®жҐбб;
Begin
‹®Є «мл© := ReadList.ЏҐаўл©;
If ‹®Є «мл© <> NIL Then Begin {®зҐаҐ¤м Ґ Їгбв п}
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
’ҐЄгйЁ© := ‹®Є «мл©;
ReadList.€§ў«Ґзм(‹®Є «мл©);
ЋзҐаҐ¤м_Ј®в®ўле.‚Є«озЁвм(ЏаҐ¤л¤гйЁ©);
ЏҐаҐ¤ вм_гЇа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
End {If};
End {TBuffer.Signal_Read}.
я2‡ ¤ ЁҐ
1. ђҐ «Ё§®ў вм ®ЎкҐЄв - ЎгдҐа ў ЎЁЎ«Ё®вҐз®¬ ¬®¤г«Ґ ¤«п Ґ-
Є®в®а®Ј® вЁЇ ЇҐаҐ¤ ў Ґ¬ле ¤ ле.
2. Ќ ЇЁб вм ¤Ґ¬®бва жЁ®го Їа®Ја ¬¬г, Ё««обваЁагойго а Ў®-
вг ЎгдҐа ЇаЁ а §«Ёзле бЄ®а®бвпе § ЇЁбЁ Ё з⥨п б®®ЎйҐЁ©. ‘Є®-
а®бвЁ § ЇЁбЁ Ё звҐЁп ¬®¦® ¬Ґпвм Їг⥬ Ё§¬ҐҐЁп Є®«ЁзҐбвў
Їа®жҐбб®ў, ЇЁигйЁе ў ЎгдҐа Ё«Ё зЁв ойЁе Ё§ ҐЈ®, Ё«Ё ўЄ«оз п ®ЇҐ-
а в®ал § ¤Ґа¦ЄЁ ¬Ґ¦¤г б«Ґ¤гойЁ¬Ё ¤Ґ©бвўЁп¬Ё:
- Ї®а®¦¤ҐЁҐ¬ б®®ЎйҐЁп Ё § ЇЁбмо ҐЈ® ў ЎгдҐа;
- з⥨Ґ¬ б®®ЎйҐЁп Ё§ ЎгдҐа Ё ®Ўа Ў®вЄ®© б®®ЎйҐЁп.
я1ЋвзҐв ¤®«¦Ґ ᮤҐа¦ вмя0 ⥪бв Їа®Ја ¬¬л б Є®¬¬Ґв аЁп¬Ё Ё
ЎЁЎ«Ё®вҐзл© ¬®¤г«м б ॠ«Ё§ жЁҐ© ЎгдҐа .
- 32 -
я2‹ Ў®а в®а п а Ў®в 7
я2€‘‘‹…„Ћ‚ЂЌ€… Њ…’Ћ„Ђ ‚‡Ђ€ЊЋ„…‰‘’‚€џ ЏђЋ–…‘‘Ћ‚ ‘ ЏЋЊЋ™њћ
я2Ћ—…ђ…„…‰ ‘ЋЋЃ™…Ќ€‰
я1–Ґ«м а Ў®вля0 - Ё§г票Ґ ¬Ґв®¤®ў ў§ Ё¬®¤Ґ©бвўЁп Їа®жҐбб®ў б
Ї®¬®ймо ®зҐаҐ¤Ґ© б®®ЎйҐЁ©.
я2ЋЎйЁҐ ᢥ¤ҐЁп
ЋЎ¬Ґ б®®ЎйҐЁп¬Ё ¬Ґ¦¤г Їа®жҐбб ¬Ё ®б®ўҐ ЎгдҐа , а бб-
¬®ваҐл© ў « Ў®а в®а®© а Ў®вҐ 6, ®Ў« ¤ Ґв а冷¬ Ґ¤®бв вЄ®ў,
Ё¬Ґ®:
- ®Ја ЁзҐ® (а §¬Ґа®¬ ЎгдҐа ) Є®«ЁзҐбвў® б®®ЎйҐЁ©, Ї®¬Ґй -
Ґ¬ле ў ЎгдҐа;
- б®®ЎйҐЁп ЇҐаҐЇЁблў овбп ў ЎгдҐа Ё зЁв овбп Ё§ ЎгдҐа , в -
ЄЁ¬ ®Ўа §®¬ ўаҐ¬Ґ § ЇЁбЁ Ё звҐЁп ®ЇаҐ¤Ґ«повбп вЁЇ®¬ (а §¬Ґа®¬)
б®®ЎйҐЁп Ё ¬®Јгв Ўлвм Ў®«миЁ¬Ё.
Џ®н⮬㠢 а拉 ®ЇҐа жЁ®ле б।, Ё¬Ґ®: UNIX, OS/2 бг-
йҐбвўгҐв ¤агЈ®Ґ б।бвў® ®Ў¬Ґ б®®ЎйҐЁп¬Ё, §лў Ґ¬®Ґ ®зҐаҐ¤мо
б®®ЎйҐЁ© Ё ўЄ«оз о饥 Єа®¬Ґ ҐҐ ҐйҐ Ё б।бвў бЁеа®Ё§ жЁЁ § -
ЇЁбЁ Ё з⥨п.
‚ Є зҐб⢥ Ї®б«Ґ¤Ёе ўлбвгЇ ов ®зҐаҐ¤Ё Їа®жҐбб®ў, Ї®б« ўиЁе
б®®ЎйҐЁҐ Ё ¦¤гйЁе ҐЈ®.
„ ¤Ё¬ б«®ўҐб®Ґ ®ЇЁб ЁҐ ¬Ґв®¤®ў § ЇЁбЁ Ё з⥨п б®®ЎйҐЁп,
§ ⥬ ®ЇЁиҐ¬ ¤ ®Ґ б।бвў® ®Ў¬Ґ б®®ЎйҐЁп¬Ё Є Є ®ЎкҐЄв ®ЇҐ-
а жЁ®®© б।л.
‡ ЇЁбм б®®ЎйҐЁп ўЄ«оз Ґв ў ᥡп б«Ґ¤гойЁҐ ¤Ґ©бвўЁп:
- ўЄ«о票Ґ гЄ § ⥫п б®®ЎйҐЁҐ ў ®зҐаҐ¤м (®Ўа вЁ¬ ўЁ¬ -
ЁҐ, зв® Ё¬Ґ® гЄ § вҐ«м Ї®¬Ґй Ґвбп ў ®зҐаҐ¤м, Ґ б ¬® б®®ЎйҐ-
ЁҐ, зв® бгйҐб⢥® Ї®ўли Ґв бЄ®а®бвм ®Ў¬Ґ );
- ўЄ«о票Ґ Їа®жҐбб , Ї®б« ўиҐЈ® б®®ЎйҐЁҐ ў ®зҐаҐ¤м, ⥬
б ¬л¬ Їа®жҐбб, Ї®б« ўиЁ© б®®ЎйҐЁҐ, Ў«®ЄЁагҐвбп ¤® ¬®¬Ґв з⥨п
ҐЈ® ¤агЈЁ¬ Їа®жҐбᮬ;
- ЄвЁўЁ§ жЁо Їа®жҐбб , ¦¤г饣® б®®ЎйҐЁп, Ґб«Ё в Є®ў®© Ё¬Ґ-
Ґвбп.
—⥨Ґ б®®ЎйҐЁп ўЄ«оз Ґв ў ᥡп б«Ґ¤гойЁҐ ¤Ґ©бвўЁп:
- Ў«®ЄЁа®ўЄг Їа®жҐбб Їг⥬ Ї®бв ®ўЄЁ ҐЈ® ў ®зҐаҐ¤м, Ґб«Ё
б®®ЎйҐЁп ®вбгвбвўгов;
- з⥨Ґ б®®ЎйҐЁп, Ґб«Ё ®® Ї®бвгЇЁ«®;
- 33 -
- ЄвЁўЁ§ жЁо Їа®жҐбб , Ї®б« ўиҐЈ® б®®ЎйҐЁҐ.
’ ЄЁ¬ ®Ўа §®¬, Їа®жҐбб, Ї®б« ўиЁ© б®®ЎйҐЁҐ, ў®§®Ў®ўЁв бў®Ґ
ўлЇ®«ҐЁҐ в®«мЄ® Ї®б«Ґ в®Ј®, Є Є ҐЈ® б®®ЎйҐЁҐ Ўг¤Ґв Їа®зЁв ®
¤агЈЁ¬ Їа®жҐбᮬ.
‘奬 вЁз® ў§ Ё¬®¤Ґ©бвўЁп Їа®жҐбб®ў ¤«п б«гз Ґў, Є®Ј¤ ®Ўа -
饨Ґ ®¤®Ј® Їа®жҐбб Є ЇаЁ¬ЁвЁўг § ЇЁбЁ б®®ЎйҐЁп Їа®Ёб室Ёв
а миҐ ®Ўа йҐЁп ¤агЈ®Ј® Їа®жҐбб Є ЇаЁ¬ЁвЁўг з⥨п, Ё ®Ў®а®в,
ЇаҐ¤бв ў«Ґл аЁб. 7.1 Ё 7.2.
Џа®жҐбб 1 Џа®жҐбб 2
ЪДДДДДДБДДДДДДї і
і ‡ ЇЁбм і і
АДДДДДДВДДДДДДЩ і
іЋ¦Ё¤ ЁҐ і
ЪДДДДДДБДДДДДДї ЪДДДДДДДБДДДДДДДї
і‚®§®Ў®ў«ҐЁҐі і —⥨Ґ і
АДДДДДДВДДДДДДЩ---------------------------------АДДДДДДДВДДДДДДДЩ
ђЁб.7.1. Џа®жҐбб 1 Ї®¤®иҐ« Є ЇаЁ¬ЁвЁўг § ЇЁбЁ а миҐ, 祬
Їа®жҐбб 2 Ї®¤®иҐ« Є ЇаЁ¬ЁвЁўг з⥨п
Џа®жҐбб 1 Џа®жҐбб 2
і ЪДДДДДДБДДДДДДї
і іЌ з «® з⥨пі
і АДДДДДДВДДДДДДЩ
і Ћ¦Ё¤ ЁҐ і
ЪДДДДДДДБДДДДДДДї ЪДДДДДДБДДДДДДї
і ‡ ЇЁбм і іЉ®Ґж з⥨пі
АДДДДДДДВДДДДДДДЩ---------------------------------АДДДДДДВДДДДДДЩ
ђЁб.7.2. Џа®жҐбб 1 Ї®¤®иҐ« Є ЇаЁ¬ЁвЁўг § ЇЁбЁ Ї®§¦Ґ, 祬
Їа®жҐбб 2 Ї®¤®иҐ« Є ЇаЁ¬ЁвЁўг з⥨п
‘।бвў® ®Ў¬Ґ б®®ЎйҐЁп¬Ё, 㤮ў«Ґвў®апо饥 ЇаЁўҐ¤Ґ®¬г
ўлиҐ ®ЇЁб Ёо, ¬®¦Ґв Ўлвм ЇаҐ¤бв ў«Ґ® б«Ґ¤гойЁ¬ ®Ўа §®¬:
’PostBox = Object
MessageList : TMessageList;{®зҐаҐ¤м гЄ § ⥫Ґ© б®®ЎйҐЁп}
SendProcList : TList;{®зҐаҐ¤м Їа®жҐбб®ў, Ї®б« ўиЁе б®®ЎйҐЁп}
WaitProcList : TList; {®зҐаҐ¤м Їа®жҐбб®ў. ¦¤гйЁе б®®ЎйҐЁҐ}
Constructor Init;
Destructor Done; Virtual;
Procedure PutMsg(M : Pointer); {Ї®б« вм б®®ЎйҐЁҐ}
- 34 -
Function GetMsg : Pointer; {ЇаЁпвм б®®ЎйҐЁҐ}
End {TPostBox}.
ЋзҐаҐ¤м гЄ § ⥫Ґ© б®®ЎйҐЁп Ё¬ҐҐв ¬Ґв®¤л, ®зҐм Ї®е®¦ЁҐ
¬Ґв®¤л Їа®жҐбб®ў, § ЁбЄ«о票Ґ¬ в®Ј®, зв® ®ЇҐаЁагҐв б вЁЇ®¬
¤ ле Pointer, Ґ б вЁЇ®¬ ¤ ле Џа®жҐбб.
Constructor TPostBox.Init;
Begin
MessageList.Init;
SendProcList.Init;
WaitProcList.Init;
End {TPostBox.Init};
Destructor TPostBox.Done;
Begin
MessageList.Done;
SendProcList.Done;
WaitProcList.Done;
End {TPostBox.Done};
Procedure TPostBox.PutMsg(M : Pointer);
Var
ЏаҐ¤л¤гйЁ© : Џа®жҐбб;
Begin
‡ ЇаҐвЁвм_ЇаҐалў Ёп;
MessageList.Insert(M);
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
SendProcList.Insert(ЏаҐ¤л¤гйЁ©);
If WaitProcList.ЏҐаўл© <> NIL Then Begin
’ҐЄгйЁ© := WaitProcList.ЏҐаўл©;
WaitProcList.Remove(’ҐЄгйЁ©);
End Else Begin
’ҐЄгйЁ© := Readylist.ЏҐаўл©;
Readylist.Remove(’ҐЄгйЁ©);
End {If};
ЏҐаҐ¤ вм_гЇа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
ђ §аҐиЁвм_ЇаҐалў Ёп;
End {TPostBox.PutMsg};
Function TPostBox.GetMsg : Pointer;
Var
M : Pointer;
- 35 -
S : Џа®жҐбб;
ЏаҐ¤л¤гйЁ© : Џа®жҐбб;
Begin
‡ ЇаҐвЁвм_ЇаҐалў Ёп;
If MessageList.ЏҐаўл© = NIL Then Begin
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
WaitProcList.Insert(ЏаҐ¤л¤гйЁ©);
’ҐЄгйЁ© := Readylist.ЏҐаўл©;
Readylist.Remove(’ҐЄгйЁ©);
ЏҐаҐ¤ вм_гЇа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
‡ ЇаҐвЁвм_ЇаҐалў Ёп;
End {If};
M := MessageList.ЏҐаўл©;
MessageList.Remove(M);
GetMsg := M;
S := SendProcList.ЏҐаўл©;
SendProcList.Remove(S);
Readylist.Insert(S);
ђ §аҐиЁвм_ЇаҐалў Ёп;
End {TPostBox.GetMsg}.
ЏаҐ¤бв ў«Ґл© ®ЎкҐЄв «Ёим ¬®¤Ґ«ЁагҐв ў б।Ґ MS DOS а Ў®вг
®зҐаҐ¤Ґ© б®®ЎйҐЁ©, ॠ«Ё§®ў ле ў бЁб⥬ е UNIX Ё OS/2, ®¤ Є®
¤ Ґв ЇаҐ¤бв ў«ҐЁҐ ® Їгвпе аҐиҐЁп § ¤ зЁ бЁеа®Ё§ жЁЁ § ЇЁбЁ Ё
з⥨п б®®ЎйҐЁ© а §л¬Ё Їа®жҐбб ¬Ё.
‘ в®зЄЁ §аҐЁп бЁеа®Ё§ жЁЁ § ЇЁбЁ Ё з⥨п, б®бв®п饩 ў
⮬, зв® Їа®жҐббл ў®§®Ў®ў«пов а Ў®вг в®«мЄ® Ї®б«Ґ в®Ј®, Є Є § -
ЇЁбм Ё з⥨Ґ § ўҐаиҐл, ЇаҐ¤бв ў«Ґл© ®ЎкҐЄв Ї®е®¦ ¬Ґе Ё§¬
ђ ¤Ґўг п§лЄ ॠ«м®Ј® ўаҐ¬ҐЁ Ђ¤ .
я2‡ ¤ ЁҐ
1. ђҐ «Ё§®ў вм ®ЎкҐЄв TPostBox б।бвў ¬Ё п§лЄ Pascal.
2. Џа®Є®¬¬ҐвЁа®ў вм Є ¦¤го бва®зЄг ®ЎкҐЄв TPostBox.
3. Ќ ЇЁб вм ¤Ґ¬®бва жЁ®го Їа®Ја ¬¬г, Ё««обваЁагойго дгЄ-
жЁ®Ёа®ў ЁҐ ®ЎкҐЄв TPostBox.
я1ЋвзҐв ¤®«¦Ґ ᮤҐа¦ вмя0 ⥪бв Їа®Ја ¬¬л б Є®¬¬Ґв аЁп¬Ё Ё
ЎЁЎ«Ё®вҐзл© ¬®¤г«м б ॠ«Ё§ жЁҐ© ®зҐаҐ¤Ё б®®ЎйҐЁ©.
я2‘®¤Ґа¦ ЁҐ
‹ Ў®а в®а п а Ў®в 1. €‡“—…Ќ€… Ђ‹ѓЋђ€’ЊЋ‚ ђ…Ђ‹€‡Ђ–€€ € €‘-
ЏЋ‹њ‡Ћ‚ЂЌ€џ ‘ЋЏђЋѓђЂЊЊ .........................................3
‹ Ў®а в®а п а Ў®в 2. €‘‘‹…„Ћ‚ЂЌ€… Џђ€Ќ–€ЏЋ‚ „€‘Џ…’—…ђ€‡Ђ-
–€€ ЏђЋ–…‘‘Ћ‚ ..................................................6
‹ Ў®а в®а п а Ў®в 3. €‘‘‹…„Ћ‚ЂЌ€… Џђ€Ќ–€ЏЋ‚ ђ…Ђ‹€‡Ђ–€€
ЏђЋ–…‘‘Ћ‚ € Ћ—…ђ…„…‰ ЊЌЋѓЋ‡Ђ„Ђ—ЌЋѓЋ џ„ђЂ .......................9
‹ Ў®а в®а п а Ў®в 4. €‘‘‹…„Ћ‚ЂЌ€… ‘€‘’…ЊЌ›• Ћ—…ђ…„…‰ ЊЌЋ-
ѓЋ‡Ђ„Ђ—ЌЋѓЋ џ„ђЂ...............................................15
‹ Ў®а в®а п а Ў®в 5. €‘‘‹…„Ћ‚ЂЌ€… Њ…’Ћ„Ћ‚ ‘€Ќ•ђЋЌ€‡Ђ–€€
ЏђЋ–…‘‘Ћ‚ .....................................................19
‹ Ў®а в®а п а Ў®в 6. €‘‘‹…„Ћ‚ЂЌ€… Њ…’Ћ„Ћ‚ Ѓ“”…ђ€‡Ђ–€€ ‘Ћ-
ЋЃ™…Ќ€‰ .......................................................27
‹ Ў®а в®а п а Ў®в 7. €‘‘‹…„Ћ‚ЂЌ€… Њ…’Ћ„Ђ ‚‡Ђ€ЊЋ„…‰‘’‚€џ
ЏђЋ–…‘‘Ћ‚ ‘ ЏЋЊЋ™њћ Ћ—…ђ…„…‰ ‘ЋЋЃ™…Ќ€‰.........................32
ђҐ¤ Єв®а ќ.Љ.„®«Ј в®ў
‹ЁжҐ§Ёп ‹ђ N 020617 ®в 10.08.92
____________________________________________________________
Џ®¤ЇЁб ® ў ЇҐз вм . .97. ”®а¬ в 60е84 1/16. Ѓг¬ Ј вЁЇ.N2.
ЏҐз вм ®дбҐв п. “б«.ЇҐз.«. 2,09. “з.-Ё§¤.«. 2,25.
’Ёа ¦ 65 нЄ§. ‡ Є §
€§¤ ⥫мбЄ®-Ї®«ЁЈа дЁзҐбЄЁ© жҐва ѓќ’“
_____________________________________________________________
197376, ‘.-ЏҐвҐаЎгаЈ, г«.Џа®д.Џ®Ї®ў , 5
_________________
‘ Єв-ЏҐвҐаЎгаЈбЄЁ© Ј®бг¤ аб⢥л©
н«ҐЄва®вҐеЁзҐбЄЁ© гЁўҐабЁвҐв
____________________________________________________
ЊҐв®¤ЁзҐбЄЁҐ гЄ § Ёп
Є « Ў®а в®ал¬ а Ў®в ¬ Ї® ¤ЁбжЁЇ«ЁҐ
"ЋЏ…ђЂ–€ЋЌЌ›… ‘ђ…„› Ђ‘Ћ€“"
‘ Єв-ЏҐвҐаЎгаЈ
1997
ЊЁЁбвҐабвў® ®ЎйҐЈ® Ё Їа®дҐббЁ® «м®Ј® ®Ўа §®ў Ёп ђ”
_________________
‘ Єв-ЏҐвҐаЎгаЈбЄЁ© Ј®бг¤ аб⢥л©
н«ҐЄва®вҐеЁзҐбЄЁ© гЁўҐабЁвҐв
____________________________________________________
ЊҐв®¤ЁзҐбЄЁҐ гЄ § Ёп
Є « Ў®а в®ал¬ а Ў®в ¬ Ї® ¤ЁбжЁЇ«ЁҐ
"ЋЏ…ђЂ–€ЋЌЌ›… ‘ђ…„› Ђ‘Ћ€“"
‘ Єв-ЏҐвҐаЎгаЈ
1997
“„Љ 681.518.3:681.3.06
ЊҐв®¤ЁзҐбЄЁҐ гЄ § Ёп Є « Ў®а в®ал¬ а Ў®в ¬ Ї® ¤ЁбжЁЇ«ЁҐ
"ЋЇҐа жЁ®лҐ баҐ¤л Ђ‘Ћ€“" / ‘®бв.: ‚.‚ ‘Ё¤Ґ«мЁЄ®ў, ‚.‚. Ёа®-
Є®ў; ѓќ’“. ‘ЏЎ., 1997. 36 б.
ЏаЁўҐ¤Ґл ®ЎйЁҐ ᢥ¤ҐЁп Ё ४®¬Ґ¤ жЁЁ Ї® ўлЇ®«ҐЁо « Ў®-
а в®але а Ў®в Ї® ¤ЁбжЁЇ«ЁҐ "ЋЇҐа жЁ®лҐ баҐ¤л Ђ‘Ћ€“".
ЏаҐ¤ § зҐл ¤«п бв㤥⮢ бЇҐжЁ «м®бвЁ 220200 "Ђўв®¬ вЁ-
§Ёа®ў лҐ бЁбвҐ¬л ®Ўа Ў®вЄЁ Ёд®а¬ жЁЁ Ё гЇа ў«ҐЁп".
“⢥তҐ®
। ЄжЁ®®-Ё§¤ ⥫мбЄЁ¬ б®ўҐв®¬ гЁўҐабЁвҐв
ў Є зҐб⢥ ¬Ґв®¤ЁзҐбЄЁе гЄ § Ё©
‘ ‘.-ЏЎ. ѓќ’“, 1997
- 3 -
я2‹ Ў®а в®а п а Ў®в 1
я2€‡“—…Ќ€… Ђ‹ѓЋђ€’ЊЋ‚ ђ…Ђ‹€‡Ђ–€€ € €‘ЏЋ‹њ‡Ћ‚ЂЌ€џ ‘ЋЏђЋѓђЂЊЊ
я1–Ґ«м а Ў®вля0 - ®§ Є®¬«ҐЁҐ б «Ј®аЁв¬ ¬Ё ॠ«Ё§ жЁЁ б®Їа®Ј-
а ¬¬ Ё бЇ®б®Ў ¬Ё Ёе ЁбЇ®«м§®ў Ёп ¤«п ®аЈ Ё§ жЁЁ ¬®Ј®§ ¤ з®б-
вЁ.
я2ЋЎйЁҐ ᢥ¤ҐЁп
‘®Їа®Ја ¬¬л - нв® б।бвў® ЇҐаҐ¤ зЁ гЇа ў«ҐЁп Ё§ ®¤®© Їа®-
楤гал ў ¤агЈго ЎҐ§ ®в®иҐЁп ў«®¦Ґ®бвЁ. ‚лЇ®«пҐ¬®© Їа®жҐ¤гаҐ
Ґв Ґ®Ўе®¤Ё¬®бвЁ ў®§ўа й вмбп ў ўл§ў ўиго ҐҐ Їа®жҐ¤гаг. ’а ¤ЁжЁ-
®лҐ ®ЇҐа в®ал ‚›‡Ћ‚ Ё ‚Ћ‡‚ђЂ’ ў б«гз Ґ б®Їа®Ја ¬¬ § ¬Ґповбп
®¤Ё¬ ®ЇҐа в®а®¬ - Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…. ‘®Їа®Ја ¬¬л ®Ў« ¤ ов б«Ґ-
¤гойЁ¬Ё бў®©бвў ¬Ё:
1) Ї®§ў®«пов Ё¬ЁвЁа®ў вм Ї а ««Ґ«м®бвм б Ї®¬®ймо пўле ЇҐ-
। з гЇа ў«ҐЁп;
2) пў«повбп б।бвў®¬ ॠ«Ё§ жЁЁ ¬®Ј®§ ¤ з®Ј® ०Ё¬ .
ђҐ «Ё§ жЁп б®Їа®Ја ¬¬ ®б®ў ўл¤Ґ«ҐЁЁ б®Ўб⢥®Ј®
б⥪ ¤«п Є ¦¤®© Ё§ Їа®жҐ¤га. ’®Ј¤ ®ЇҐа в®а Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…
Ї® бгйҐбвўг ўлЇ®«пҐв ®ЇҐа жЁо § ¬Ґл б⥪ ЇаЁ®бв ў«Ёў Ґ¬®©
б®Їа®Ја ¬¬л б⥪ ў®§®Ў®ў«пҐ¬®© б®Їа®Ја ¬¬л.
ђ Ў®в Їа®жҐ¤га ў Є зҐб⢥ б®Їа®Ја ¬¬ вॡгҐв ЇаҐ¤ў аЁвҐ«м-
®© Ї®¤Ј®в®ўЄЁ, б®бв®п饩 ў ўл¤Ґ«ҐЁЁ б⥪ Є ¦¤®© Ё§ Їа®жҐ¤га Ё
§ ЇЁбЁ ў б⥪ в®зЄЁ ўе®¤ ў Їа®жҐ¤гаг. ’ҐЄг饥 б®бв®пЁҐ б⥪
Є ¦¤®© Ё§ б®Їа®Ја ¬¬ еа Ёвбп ў бвагЄвгаҐ, §лў Ґ¬®© „…‘Љђ€Џ-
’Ћђ_‘ЋЏђЋѓђЂЊЊ›. Џ®н⮬г б®Їа®Ја ¬¬л ЇаҐ¤бв ў«повбп бў®Ё¬Ё ¤ҐбЄ-
аЁЇв®а ¬Ё.
я2’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ Ё а Ў®вл б®Їа®Ја ¬¬
Џ®бЄ®«мЄг а Ў®в б® б⥪®¬ вॡгҐв ¤®бвгЇ ҐЇ®б।б⢥® Є
ॣЁбва ¬ SS Ё SP, ®ЇҐа в®а Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€… ¬®¦Ґв Ўлвм ॠ«Ё-
§®ў в®«мЄ® б।бвў ¬Ё п§лЄ бᥬЎ«Ґа .
Ћд®а¬«ҐЁҐ бᥬЎ«Ґа®© Їа®жҐ¤гал ў б।Ґ Pascal:
Procedure Name_Proc(Џ а ¬Ґвал-§ 票п; Џ а ¬Ґвал-ЇҐаҐ¬ҐлҐ);
Assembler; {®Ўп§ ⥫мл© ваЁЎгв}
Asm {®Ўп§ ⥫мл© ваЁЎгв}
...
- 4 -
End;
‡ ЇЁбм ў ¤аҐб㥬го п祩Єг Ї ¬пвЁ Їа®Ё§ў®¤Ёвбп ®ЇҐа в®а®¬
MemW[Seg:Ofs] := ... .
’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ б®Їа®Ја ¬¬ ЇаҐ¤бв ў«Ґ ў д®а¬Ґ ®ЇЁб -
Ёп Ї®б«Ґ¤®ў ⥫м®б⥩ ¤Ґ©бвўЁ©, Їа®Ё§ў®¤Ё¬ле ЇаЁ б®§¤ ЁЁ б®Ї-
а®Ја ¬¬л Ё ЇаЁ ЇҐаҐ¤ зҐ гЇа ў«ҐЁп ®в ®¤®© б®Їа®Ја ¬¬л Є ¤агЈ®©.
Procedure ‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“;
Begin
‚›„…‹€’њ ЏЂЊџ’њ ЏЋ„ ‘’…Љ;
‚›„…‹€’њ ЏЂЊџ’њ ЏЋ„ „…‘Љђ€Џ’Ћђ;
‚›—€‘‹€’њ Ђ„ђ…‘ "„ЌЂ" ‘’…ЉЂ € ‡ЂЏ€‘Ђ’њ …ѓЋ ‚ „…‘Љђ€Џ’Ћђ;
ЏЋ Ђ„ђ…‘“ "„ЌЂ" ‘’…ЉЂ ‡ЂЏ€‘Ђ’њ ’Ћ—Љ“ ‚•Ћ„Ђ ‚ ЏђЋ–…„“ђ“;
End;
Procedure Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; Assembler;
Asm
‘—€’Ђ’њ Ђ„ђ…‘ „…‘Љђ€Џ’ЋђЂ Џђ€Ћ‘’ЂЌЂ‚‹€‚Ђ…ЊЋ‰ ‘ЋЏђЋѓђЂЊЊ›;
‡ЂЏ€‘Ђ’њ ‚ ќ’Ћ’ „…‘Љђ€Џ’Ћђ ‘Ћ‘’ЋџЌ€… ‘’…ЉЂ;
‘—€’Ђ’њ Ђ„ђ…‘ „…‘Љђ€Џ’ЋђЂ ‚Ћ‡ЋЃЌЋ‚‹џ…ЊЋ‰ ‘ЋЏђЋѓђЂЊЊ›;
‚Ћ‘‘’ЂЌЋ‚€’њ ‘Ћ‘’ЋџЌ€… ‘’…ЉЂ €‡ ќ’ЋѓЋ „…‘Љђ€Џ’ЋђЂ;
End;
’Ґе®«®ЈЁп а Ў®вл б®Їа®Ја ¬¬ ЇаҐ¤бв ў«Ґ ў д®а¬Ґ "§ Ј®в®ў-
ЄЁ" Їа®Ја ¬¬л:
Program Cor;
Procedure ‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“;
Begin
...
End;
Procedure Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; Assembler;
Asm
...
End;
Procedure User_1;
Begin
while true do begin
...
- 5 -
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; {ў ¤агЈго б®Їа®Ја ¬¬г}
end;
End;
...
Procedure User_N;
Begin
while true do begin
...
if “‘‹Ћ‚€… then {§ ўҐа襨Ґ ўлЇ®«ҐЁп}
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€… {ў Ј« ўго Їа®Ја ¬¬г}
else
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; {ў ¤агЈго б®Їа®Ја ¬¬г}
end;
End;
Begin
‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“; {User_1}
...
‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“; {User_N}
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; {ў ®¤г Ё§ б®Їа®Ја ¬¬}
End.
я2‡ ¤ ЁҐ
1. ђҐ «Ё§®ў вм Їа®жҐ¤гал ‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“ Ё Џ…ђ…„Ђ’њ_“Џ-
ђЂ‚‹…Ќ€… Ї® Ёе бЇҐжЁдЁЄ жЁп¬, ЇаҐ¤бв ў«Ґл¬ ўлиҐ.
2. ђҐ «Ё§®ў вм Їа®Ја ¬¬г Cor, § ¬ҐЁў б«®ўҐблҐ ®ЇЁб Ёп
¤Ґ©бвўЁ© ®ЇҐа в®а ¬Ё п§лЄ Pascal.
3. Ќ аЁб®ў вм б®бв®пЁп б⥪ б®Їа®Ја ¬¬л ЇаЁ ᮧ¤ ЁЁ, ЇаЁ-
®бв ®ўЄҐ Ё ў®§®Ў®ў«ҐЁЁ.
4. ‚ а §а Ў влў Ґ¬®© ¤Ґ¬®бва жЁ®®© Їа®Ја ¬¬Ґ ®аЈ Ё§®ў вм
¤Ё ¬ЁзҐбЄ®Ґ ўл¤Ґ«ҐЁҐ Ё ®бў®Ў®¦¤ҐЁҐ Ї ¬пвЁ Ї®¤ ¤ҐбЄаЁЇв®ал Ё
б⥪Ё б®Їа®Ја ¬¬.
5. ђҐ «Ё§®ў вм б®Їа®Ја ¬¬л, ЇаҐ¤бв ўЁў Ёе ў ўЁ¤Ґ ®ЎкҐЄв®ў,
ўЄ«оз ойЁе б«Ґ¤гойЁҐ ¤ лҐ - ¤аҐб б⥪ Ё § 票п ॣЁбва®ў SS
Ё SP, в Є¦Ґ ¬Ґв®¤л ᮧ¤ Ёп, гЁз⮦ҐЁп Ё ЇҐаҐ¤ зЁ гЇа ў«ҐЁп.
я1ЋвзҐв ¤®«¦Ґ ᮤҐа¦ вмя0 ⥪бвл Їа®Ја ¬¬ б Є®¬¬Ґв аЁп¬Ё Ё аЁ-
бгЄЁ, ®ва ¦ ойЁҐ б®бв®пЁп б⥪®ў б®Їа®Ја ¬¬.
- 6 -
я2‹ Ў®а в®а п а Ў®в 2
я2€‘‘‹…„Ћ‚ЂЌ€… Џђ€Ќ–€ЏЋ‚ „€‘Џ…’—…ђ€‡Ђ–€€ ЏђЋ–…‘‘Ћ‚
я1–Ґ«м а Ў®вля0 - ®§ Є®¬«ҐЁҐ б ЇаЁжЁЇ ¬Ё ॠ«Ё§ жЁЁ «Ј®аЁв-
¬®ў ¤ЁбЇҐвзҐаЁ§ жЁЁ Їа®жҐбб®ў ў ¬®Ј®§ ¤ зле б। е.
я2ЋЎйЁҐ ᢥ¤ҐЁп
ђҐ «Ё§ жЁп ЇбҐў¤®Ї а ««Ґ«м®Ј® ०Ё¬ б Ї®¬®ймо пў®Ј® ўЄ«о-
зҐЁп ў Ї®«м§®ў ⥫мбЄЁҐ Їа®жҐббл ®ЇҐа в®а Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…
®Ў« ¤ Ґв Ґ¤®бв вЄ ¬Ё:
1) Џ®«м§®ў ⥫мбЄЁҐ Їа®жҐббл ўЄ«оз ов ў бҐЎп ¤Ґ©бвўЁп, Є®в®-
алҐ Ї® бгйҐбвўг Ґ ®в®бпвбп Є Ёе дгЄжЁп¬.
2) €вҐаў «л Їа®жҐбб®а®Ј® ўаҐ¬ҐЁ, ЇаҐ¤®бв ў«пҐ¬лҐ Їа®жҐб-
б ¬, § ўЁбпв ®в б ¬Ёе Їа®жҐбб®ў, Ё Ґбвм ®Ї б®бвм § еў в Їа®жҐб-
б®а ¤«ЁвҐ«мл© ба®Є ®¤Ё¬ Їа®жҐбᮬ.
Џ®н⮬㠢 ¬®Ј®§ ¤ зле бЁб⥬ е ЁбЇ®«м§гҐвбп ЇаЁг¤ЁвҐ«м п
ЇҐаҐ¤ з гЇа ў«ҐЁп. Њ®¬Ґвл ЇаЁг¤ЁвҐ«м®© ЇҐаҐ¤ зЁ гЇа ў«ҐЁп
®ЇаҐ¤Ґ«повбп ЇаҐалў Ёп¬Ё ®в в ©¬Ґа . ’ Є®© бЇ®б®Ў ЇҐаҐ¤ зЁ гЇ-
а ў«ҐЁп §лў Ґвбп ¤ЁбЇҐвзҐаЁ§ жЁҐ©.
ђ Ў®в Ґв ¬®Ј®§ ¤ з п бЁб⥬ б ЇаЁг¤ЁвҐ«м®© ¤ЁбЇҐвзҐаЁ-
§ жЁҐ© б«Ґ¤гойЁ¬ ®Ўа §®¬.
‚лЇ®«ҐЁҐ ⥪г饩 б®Їа®Ја ¬¬л ЇаЁ®бв ў«Ёў Ґвбп ЇаҐалў Ё-
Ґ¬ ®в в ©¬Ґа . “Їа ў«ҐЁҐ ЇҐаҐ¤ Ґвбп Їа®Ја ¬¬Ґ-®Ўа Ў®взЁЄг ЇаҐал-
ў Ёп. ЋЎа Ў®взЁЄ ўлЇ®«пҐв ¤Ґ©бвўЁп Ї® ўлЎ®аг б«Ґ¤го饩 б®Їа®Ј-
а ¬¬л Ё ЇҐаҐ¤ Ґв Ґ© гЇа ў«ҐЁҐ ®ЇҐа в®а®¬ Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€….
’ ЄЁ¬ ®Ўа §®¬ Є ¦¤®© б®Їа®Ја ¬¬Ґ ўл¤Ґ«пҐвбп Єў ⠢६ҐЁ
¤«п ўлЇ®«ҐЁп.
я2‘ўҐ¤ҐЁп Ё§ п§лЄ Џ бЄ «м, ЁбЇ®«м§гҐ¬лҐ ЇаЁ ॠ«Ё§ жЁЁ
я2¤ЁбЇҐвзҐаЁ§ жЁЁ
“бв ®ўЄ ўҐЄв®а ЇаҐалў Ёп:
SetIntVec(IntNo : byte; Vector : pointer)
Ј¤Ґ IntNo - ®¬Ґа ўҐЄв®а ЇаҐалў Ёп;
Vector - ¤аҐб Їа®жҐ¤гал-®Ўа Ў®взЁЄ ЇаҐалў Ёп.
—⥨Ґ ўҐЄв®а ЇаҐалў Ёп:
GetIntVec(IntNo : byte; Var Vector : pointer)
Ј¤Ґ IntNo - ®¬Ґа ўҐЄв®а ЇаҐалў Ёп;
- 7 -
Vector - ЇҐаҐ¬Ґ п, ў Є®в®аго ЇЁиҐвбп ¤аҐб Їа®жҐ¤гал-®Ўа -
Ў®взЁЄ ЇаҐалў Ёп.
я1ЏаЁ¬Ґз ЁҐ.я0 Ќ®¬Ґа ўҐЄв®а ЇаҐалў Ёп ®в в ©¬Ґа - 8; ®¬Ґа
бў®Ў®¤ле ўҐЄв®а®ў ¤«п ЇҐаҐгбв ®ўЄЁ бЁб⥬®Ј® ®Ўа Ў®взЁЄ ЇаҐ-
алў Ё© ®в в ©¬Ґа : 60h-66h; 78h-7Fh.
‘вагЄвга Їа®жҐ¤гал-®Ўа Ў®взЁЄ ЇаҐалў Ёп:
Procedure Handler; interrupt; {®Ўп§ ⥫мл© ваЁЎгв}
Begin
...
End {Handler}.
я2’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ ¤ЁбЇҐвзҐаЁ§ жЁЁ
’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ ¤ЁбЇҐвзҐаЁ§ жЁЁ ў б।Ґ Џ бЄ «м ЇаҐ¤б-
в ў«Ґ "§ Ј®в®ўЄ®©" Їа®Ја ¬¬л:
Program User_Disp;
Procedure ‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ; Assembler;
Asm
...
End;
Procedure ‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“;
Begin
{ЋЇЁб а ҐҐ}
End;
Procedure Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; Assembler;
Asm
{ЋЇЁб а ҐҐ}
End;
Procedure Handler; interrupt;
Begin
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
{‚лЎа вм б«Ґ¤гойго б®Їа®Ја ¬¬г}
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…;
End;
Procedure User_1;
Begin
while true do begin
- 8 -
...
end;
End;
Procedure User_2;
Begin
while true do begin
...
if “‘‹Ћ‚€… then begin {§ ўҐа襨Ґ ўлЇ®«ҐЁп}
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
‚Ћ‘‘’ЂЌЋ‚€’њ_‚…Љ’Ћђ_Џђ…ђ›‚ЂЌ€џ_Ћ’_’Ђ‰Њ…ђЂ;
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; {ў Ј« ўго Їа®Ја ¬¬г}
end;
end;
End;
Begin
‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“; {User_1}
‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“; {User_2}
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
Џ…ђ…“‘’ЂЌЋ‚€’њ_‚…Љ’Ћђ_Џђ…ђ›‚ЂЌ€џ_Ћ’_’Ђ‰Њ…ђЂ;
“‘’ЂЌЋ‚€’њ_ЌЂ_‚…Љ’Ћђ_8_ЏђЋ–…„“ђ“_Handler;
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; {ў User_i}
End.
я2‡ ¤ ЁҐ
1. ђҐ «Ё§®ў вм Їа®Ја ¬¬г, а бЄалў ўбҐ ЇаҐ¤«®¦ҐЁп ®ЇҐа в®а -
¬Ё п§лЄ Џ бЄ «м.
2. Ќ аЁб®ў вм б®бв®пЁп б⥪ Їа®Ё§ў®«м®© б®Їа®Ја ¬¬л ЇаЁ
ЇаЁ®бв ®ўЄҐ ҐҐ ЇаҐалў ЁҐ¬ ®в в ©¬Ґа Ё ў®§®Ў®ў«ҐЁЁ Ё§ ®Ўа -
Ў®взЁЄ ЇаҐалў Ё©.
я1ЋвзҐв ¤®«¦Ґ ᮤҐа¦ вмя0 ⥪бв Їа®Ја ¬¬л б Є®¬¬Ґв аЁп¬Ё,
в Є¦Ґ аЁбгЄЁ, ®ва ¦ ойЁҐ б®бв®пЁп б⥪ б®Їа®Ја ¬¬ ЇаЁ ЇаҐалў -
Ёпе.
- 9 -
я2‹ Ў®а в®а п а Ў®в 3
я2€‘‘‹…„Ћ‚ЂЌ€… Џђ€Ќ–€ЏЋ‚ ђ…Ђ‹€‡Ђ–€€ ЏђЋ–…‘‘Ћ‚ € Ћ—…ђ…„…‰
я2ЊЌЋѓЋ‡Ђ„Ђ—ЌЋѓЋ џ„ђЂ
я1–Ґ«м а Ў®вля0 - ®§ Є®¬«ҐЁҐ б ЇаЁжЁЇ ¬Ё ॠ«Ё§ жЁЁ Їа®жҐбб®ў
Ё ®зҐаҐ¤Ґ© ў п¤аҐ ¬®Ј®§ ¤ з®© б।л.
я2ЋЎйЁҐ ᢥ¤ҐЁп
Џ а ««Ґ«м® ўлЇ®«пҐ¬лҐ ў ¬®Ј®§ ¤ з®© б।Ґ Їа®жҐ¤гал -
§лў овбп Їа®жҐбб ¬Ё.
Џ®бЄ®«мЄг Їа®жҐбб®а ®¤Ё, Їа®жҐбб®ў ¬®Ј®, в® Ї®пў«пҐвбп
б।бвў® гЇ®ап¤®зҐЁп ¤®бвгЇ Їа®жҐбб®ў Є Їа®жҐбб®аг, ЇаЁЁ¬ о饥
д®а¬г ®зҐаҐ¤Ё.
‚ ¦Ґ©иЁ¬ ўЁ¤®¬ ®зҐаҐ¤Ё пў«пҐвбп ®зҐаҐ¤м Їа®жҐбб®ў, Ј®в®ўле
Є ўлЇ®«ҐЁо.
„«п ®ЎҐбЇҐзҐЁп ў®§¬®¦®бвЁ ўЄ«озҐЁп Їа®жҐбб ў ®зҐаҐ¤Ё Ґ-
®Ўе®¤Ё¬® ¬®¤ЁдЁжЁа®ў вм ¤ҐбЄаЁЇв®а б®Їа®Ја ¬¬л, ॠ«Ё§го饩 Їа®-
жҐбб, ўўҐ¤п ў ҐЈ® Ї®«Ґ - гЄ § ⥫м б«Ґ¤гойЁ© Їа®жҐбб.
‘ гзҐв®¬ ў®§¬®¦®бвЁ ¤Ё ¬ЁзҐбЄ®Ј® ᮧ¤ Ёп Ё гЁз⮦ҐЁп
ЇаҐ¤бв ўЁ¬ Їа®жҐбб Є Є ®ЎкҐЄв б«Ґ¤го饣® ўЁ¤ :
ЏђЋ–…‘‘ = ЋЃљ…Љ’
{„ЂЌЌ›…:} ќ‹…Њ…Ќ’› „…‘Љђ€Џ’ЋђЂ ‘ЋЏђЋѓђЂЊЊ›;
‘‹…„“ћ™€‰;
Ђ„ђ…‘_‘’…ЉЂ;
{Њ…’Ћ„›:} Procedure €Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Procedure Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Procedure “‘’ЂЌЋ‚€’њ_‘‹…„“ћ™€‰;
Function ЏЋ‹“—€’њ_‘‹…„“ћ™€‰;
ЉЋЌ…–;
‚в®ал¬ ўЁ¤®¬ ®ЎкҐЄв®ў ¬®Ј®§ ¤ з®© б।л пў«пҐвбп Ћ—…ђ…„њ,
ЇаҐ¤бв ў«пҐ¬ п б«Ґ¤гойЁ¬ ®ЇЁб ЁҐ¬:
Ћ—…ђ…„њ = ЋЃљ…Љ’
{„ЂЌЌ›…:} ЌЂ—Ђ‹Ћ;
{Њ…’Ћ„›:} Procedure €Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Procedure Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Procedure ‚Љ‹ћ—€’њ_ЏђЋ–…‘‘;
Procedure €‘Љ‹ћ—€’њ_ЏђЋ–…‘‘;
- 10 -
Function ЏЋ‹“—€’њ_ЌЂ—Ђ‹Ћ;
ЉЋЌ…–;
‚ ¤ ®© а Ў®вҐ а бб¬ ваЁў Ґвбп ®зҐаҐ¤м Ј®в®ўле Їа®жҐбб®ў,
Є®в®а п ¬®¦Ґв Ўлвм ЇаҐ¤бв ў«Ґ Є Є вЁЇ, Їа®Ё§ў®¤л© ®в вЁЇ Ћ—…-
ђ…„њ:
Ћ—…ђ…„њ_ѓЋ’Ћ‚›• = ЋЃљ…Љ’(Ћ—…ђ…„њ)
{Њ…’Ћ„›:} Procedure €Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Procedure Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Procedure ‡ЂЏ“‘’€’њ_„€‘Џ…’—…ђ;
Procedure Ћ‘’ЂЌЋ‚€’њ_„€‘Џ…’—…ђ;
Procedure „ЋЃЂ‚€’њ_ЌЋ‚›‰_ЏђЋ–…‘‘;
Procedure ЂЉ’€‚€‡€ђЋ‚Ђ’њ_‘‹…„“ћ™€‰;
ЉЋЌ…–;
я2’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ Їа®жҐбб®ў Ё ®зҐаҐ¤Ё Ј®в®ўле Їа®жҐбб®ў
’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ Їа®жҐбб®ў Ё ®зҐаҐ¤Ё Ј®в®ўле Їа®жҐбб®ў
ЇаҐ¤бв ў«Ґ ў ўЁ¤Ґ б«®ўҐб®Ј® ®ЇЁб Ёп ЎЁЎ«Ё®вҐз®Ј® ¬®¤г«п, пў-
«по饣®бп ¤ «мҐ©иЁ¬ а §ўЁвЁҐ¬ Їа®Ја ¬¬л « Ў®а в®а®© а Ў®вл 2.
Unit DispObj;
Interface
Type
ЏђЋ–…‘‘ = ЋЃљ…Љ’
ќ‹…Њ…Ќ’› „…‘Љђ€Џ’ЋђЂ ‘ЋЏђЋѓђЂЊЊ›;
‘‹…„“ћ™€‰;
Ђ„ђ…‘_‘’…ЉЂ;
Procedure €Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Procedure Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Procedure “‘’ЂЌЋ‚€’њ_‘‹…„“ћ™€‰;
Function ЏЋ‹“—€’њ_‘‹…„“ћ™€‰;
ЉЋЌ…–;
Ћ—…ђ…„њ = ЋЃљ…Љ’
ЌЂ—Ђ‹Ћ;
Procedure €Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Procedure Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Procedure ‚Љ‹ћ—€’њ_ЏђЋ–…‘‘;
Procedure €‘Љ‹ћ—€’њ_ЏђЋ–…‘‘;
Function ЏЋ‹“—€’њ_ЌЂ—Ђ‹Ћ;
- 11 -
ЉЋЌ…–;
Ћ—…ђ…„њ_ѓЋ’Ћ‚›• = ЋЃљ…Љ’(Ћ—…ђ…„њ)
Procedure €Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Procedure Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Procedure ‡ЂЏ“‘’€’њ_„€‘Џ…’—…ђ;
Procedure Ћ‘’ЂЌЋ‚€’њ_„€‘Џ…’—…ђ;
Procedure „ЋЃЂ‚€’њ_ЌЋ‚›‰_ЏђЋ–…‘‘;
Procedure ЂЉ’€‚€‡€ђЋ‚Ђ’њ_‘‹…„“ћ™€‰;
ЉЋЌ…–;
Var
Readylist : Ћ—…ђ…„њ_ѓЋ’Ћ‚›•;
Implementation
Procedure ‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ; Assembler;
Asm
...
End;
Procedure ђЂ‡ђ…€’њ_Џђ…ђ›‚ЂЌ€џ; Assembler;
Asm
...
End;
Procedure ‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“;
Begin
...
End;
Procedure Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; Assembler;
Asm
...
End;
Procedure Handler; interrupt;
Begin
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
Readylist.ЂЉ’€‚€‡€ђЋ‚Ђ’њ_‘‹…„“ћ™€‰;
End;
Procedure Idler; {ўбҐЈ¤ ў ®зҐаҐ¤Ё Ј®в®ўле}
Begin
while true do;
End;
Procedure ЏђЋ–…‘‘.€Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Begin
- 12 -
‘Ћ‡„Ђ’њ_‘ЋЏђЋѓђЂЊЊ“;
‡ЂЏЋ‹Ќ€’њ ЏЋ‹… Ђ„ђ…‘_‘’…ЉЂ;
End;
Procedure ЏђЋ–…‘‘.Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Begin
Ћ‘‚ЋЃЋ„€’њ ЏЂЊџ’њ, ‡ЂЌџ’“ћ ЏЋ„ ‘’…Љ;
End;
Procedure ЏђЋ–…‘‘.“‘’ЂЌЋ‚€’њ_‘‹…„“ћ™€‰;
Begin
‘‹…„“ћ™€‰ := ... ;
End;
Function ЏђЋ–…‘‘.ЏЋ‹“—€’њ_‘‹…„“ћ™€‰;
Begin
ЏЋ‹“—€’њ_‘‹…„“ћ™€‰ := ‘‹…„“ћ™€‰;
End;
Procedure Ћ—…ђ…„њ.€Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Begin
ЌЂ—Ђ‹Ћ := NIL;
End;
Procedure Ћ—…ђ…„њ.Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Begin
{–ЁЄ« Ї® ўбҐ¬ Їа®жҐбб ¬ ®зҐаҐ¤Ё}
ЏђЋ–…‘‘.Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
End;
Procedure Ћ—…ђ…„њ.‚Љ‹ћ—€’њ_ЏђЋ–…‘‘;
Begin
...
End;
Procedure Ћ—…ђ…„њ.€‘Љ‹ћ—€’њ_ЏђЋ–…‘‘;
Begin
...
End;
Function Ћ—…ђ…„њ.ЏЋ‹“—€’њ_ЌЂ—Ђ‹Ћ;
Begin
ЏЋ‹“—€’њ_ЌЂ—Ђ‹Ћ := ЌЂ—Ђ‹Ћ;
End;
Procedure Ћ—…ђ…„њ_ѓЋ’Ћ‚›•.€Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Begin
Ћ—…ђ…„њ.€Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
- 13 -
End;
Procedure Ћ—…ђ…„њ_ѓЋ’Ћ‚›•.Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
Begin
Ћ—…ђ…„њ.Ћ‘‚ЋЃЋ„€’њ_ЏЂЊџ’њ;
End;
Procedure Ћ—…ђ…„њ_ѓЋ’Ћ‚›•.‡ЂЏ“‘’€’њ_„€‘Џ…’—…ђ;
Begin
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
Џ…ђ…“‘’ЂЌЋ‚€’њ_‚…Љ’Ћђ_Џђ…ђ›‚ЂЌ€џ_Ћ’_’Ђ‰Њ…ђЂ;
“‘’ЂЌЋ‚€’њ_ЌЂ_‚…Љ’Ћђ_8_ЏђЋ–…„“ђ“_Handler;
ЏЋ‹“—€’њ_ЌЂ—Ђ‹Ћ;
€‘Љ‹ћ—€’њ_ЏђЋ–…‘‘;
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…;
End;
Procedure Ћ—…ђ…„њ_ѓЋ’Ћ‚›•.Ћ‘’ЂЌЋ‚€’њ_„€‘Џ…’—…ђ;
Begin
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
‚Ћ‘‘’ЂЌЋ‚€’њ_‚…Љ’Ћђ_Џђ…ђ›‚ЂЌ€џ_Ћ’_’Ђ‰Њ…ђЂ;
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…; {ў Ј« ўго Їа®Ја ¬¬г}
End;
Procedure Ћ—…ђ…„њ_ѓЋ’Ћ‚›•.„ЋЃЂ‚€’њ_ЌЋ‚›‰_ЏђЋ–…‘‘;
Begin
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
ЏђЋ–…‘‘.€Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
‚Љ‹ћ—€’њ_ЏђЋ–…‘‘;
ђЂ‡ђ…€’њ_Џђ…ђ›‚ЂЌ€џ;
End;
Procedure Ћ—…ђ…„њ_ѓЋ’Ћ‚›•.ЂЉ’€‚€‡€ђЋ‚Ђ’њ_‘‹…„“ћ™€‰;
Begin
‡ЂЏђ…’€’њ_Џђ…ђ›‚ЂЌ€џ;
‚Љ‹ћ—€’њ_ЏђЋ–…‘‘; {⥪гйЁ©}
ЏЋ‹“—€’њ_ЌЂ—Ђ‹Ћ;
€‘Љ‹ћ—€’њ_ЏђЋ–…‘‘;
Џ…ђ…„Ђ’њ_“ЏђЂ‚‹…Ќ€…;
End;
Begin
Readylist.€Ќ€–€Ђ‹€‡€ђЋ‚Ђ’њ;
Readylist.„ЋЃЂ‚€’њ_ЌЋ‚›‰_ЏђЋ–…‘‘;{ўЄ«о票Ґ Idler}
End.
- 14 -
‘ гзҐв®¬ ЇаЁўҐ¤Ґ®Ј® ЎЁЎ«Ё®вҐз®Ј® ¬®¤г«п Ї®«м§®ў ⥫мбЄ п
Їа®Ја ¬¬ ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬:
Program User;
Uses Disp;
Procedure User_1;
Begin
while true do begin
...
end;
End;
Procedure User_N;
Begin
while true do begin
...
if “‘‹Ћ‚€… then begin {§ ўҐа襨Ґ ўлЇ®«ҐЁп}
Readylist.Ћ‘’ЂЌЋ‚€’њ_„€‘Џ…’—…ђ;
end;
end;
End;
Begin
Readylist.„ЋЃЂ‚€’њ_ЌЋ‚›‰_ЏђЋ–…‘‘;{ўЄ«о票Ґ User_1}
Readylist.„ЋЃЂ‚€’њ_ЌЋ‚›‰_ЏђЋ–…‘‘;{ўЄ«о票Ґ User_N}
Readylist.‡ЂЏ“‘’€’њ_„€‘Џ…’—…ђ;
End.
я2‡ ¤ ЁҐ
1. ‚ ᮮ⢥вбвўЁЁ б ЇаЁўҐ¤Ґл¬Ё ўлиҐ § Ј®в®ўЄ ¬Ё ॠ«Ё§®-
ў вм ЎЁЎ«Ё®вҐзл© ¬®¤г«м, ®ЎҐбЇҐзЁў ойЁ© а Ў®вг б ®зҐаҐ¤мо Ј®в®-
ўле Їа®жҐбб®ў, гзЁвлў п ¤Ё ¬ЁзҐбЄ®Ґ ўл¤Ґ«ҐЁҐ Ї ¬пвЁ Ї®¤ Їа®жҐб-
бл.
2. ‘®бв ўЁвм ЇаЁ¬Ґа, Ё««обваЁагойЁ© а Ў®вг ЎЁЎ«Ё®вҐз®Ј® ¬®-
¤г«п.
я1ЋвзҐв ¤®«¦Ґ ᮤҐа¦ вмя0 ⥪бвл Їа®Ја ¬¬ ЎЁЎ«Ё®вҐз®Ј® ¬®¤г«п
Ё ЇаЁ¬Ґа б Є®¬¬Ґв аЁп¬Ё.
- 15 -
я2‹ Ў®а в®а п а Ў®в 4
я2€‘‘‹…„Ћ‚ЂЌ€… ‘€‘’…ЊЌ›• Ћ—…ђ…„…‰ ЊЌЋѓЋ‡Ђ„Ђ—ЌЋѓЋ џ„ђЂ
я1–Ґ«м а Ў®вля0 - Ё§г票Ґ бЁб⥬ле ®зҐаҐ¤Ґ© ¬®Ј®§ ¤ з®Ј® п¤-
а .
я2ЋЎйЁҐ ᢥ¤ҐЁп
‘ ¬®© ў ¦®© бЁб⥬®© ®зҐаҐ¤мо п¤а пў«пҐвбп ®зҐаҐ¤м Ј®в®-
ўле Їа®жҐбб®ў, а бᬮваҐ п ў « Ў®а в®а®© а Ў®вҐ 3. ‚ ¤ ®©
а Ў®вҐ а бᬮваЁ¬ ¤агЈЁҐ ®зҐаҐ¤Ё п¤а , Є®в®алҐ ЇаЁпв® ®в®бЁвм Є
бЁб⥬л¬.
я2ЋзҐаҐ¤м § ¤Ґа¦ ле Їа®жҐбб®ў
ќв ®зҐаҐ¤м ¤ ¦Ґ Їа®йҐ ®зҐаҐ¤Ё Ј®в®ўле Ё ЇаҐ¤бв ў«Ґ ¤«п
Ї®«®вл ®ЇЁб Ёп. „Ґ«® ў ⮬, зв® ўбҐ ҐўлЇ®«пойЁҐбп Їа®жҐббл
¤®«¦л 室Ёвмбп ў Є ЄЁе-«ЁЎ® ®зҐаҐ¤пе. Џ®н⮬г, Ґб«Ё Їа®Ја ¬¬-
®© бЁб⥬Ґ Ґ®Ўе®¤Ё¬® ЇаЁ®бв ®ўЁвм ўлЇ®«ҐЁҐ ҐЄ®в®а®Ј® Їа®-
жҐбб , ҐЈ® Ґ®Ўе®¤Ё¬® Ї®¬ҐбвЁвм ў бЇҐжЁ «м® ўл¤Ґ«Ґго ®зҐаҐ¤м,
Є®в®аго §®ўҐ¬ ®зҐаҐ¤мо § ¤Ґа¦ ле, Ј¤Ґ ® Ўг¤Ґв 室Ёвмбп ¤®
вҐе Ї®а, Ї®Є бЁб⥬Ґ Ґ Ї® ¤®ЎЁвбп ҐЈ® ў®§®Ў®ўЁвм. ‚ н⮬ б«г-
з Ґ Їа®жҐбб Ё§ў«ҐЄ Ґвбп Ё§ ®зҐаҐ¤Ё § ¤Ґа¦ ле Ё Ї®¬Ґй Ґвбп ў
®зҐаҐ¤м Ј®в®ўле Їа®жҐбб®ў.
ЋЇЁб ЁҐ в Є®© ®зҐаҐ¤Ё ¬®¦Ґв ўлЈ«п¤Ґвм б«Ґ¤гойЁ¬ ®Ўа §®¬:
Type
List = Object
First : Process;
Constructor Init;
Destructor Done; Virtual;
Procedure Insert(P : Process);
Procedure Remove(P : Process);
End {List}.
я2ЋзҐаҐ¤м Їа®жҐбб®ў, § ¤Ґа¦ ле ўаҐ¬п
„ л© ®ЎкҐЄв ўлЇ®«пҐв дгЄжЁЁ Є« ббЁзҐбЄ®© ўаҐ¬Ґ®© § -
¤Ґа¦ЄЁ ўлЇ®«ҐЁп Їа®Ја ¬¬л, ЇаЁ¬Ґа: Delay(T : Word), Є®в®а п
®ЎҐбЇҐзЁў Ґв " ЄвЁў®Ґ" ®¦Ё¤ ЁҐ, ¤®ЇгбвЁ¬®Ґ ў ®¤®§ ¤ з®© баҐ-
¤Ґ. ‚ ¬®Ј®§ ¤ з®© б।Ґ ЇаЁ Ґ®Ўе®¤Ё¬®бвЁ § ¤Ґа¦ вм Їа®жҐбб
- 16 -
ўаҐ¬п ҐЈ® 楫Ґб®®Ўа §® Ё§ў«Ґзм Ё§ ®зҐаҐ¤Ё Ј®в®ўле Ё ⥬ б ¬л¬
а бЇаҐ¤Ґ«пвм Їа®жҐбб®а®Ґ ўаҐ¬п 㦥 ¬Ґ¦¤г ¬ҐмиЁ¬ зЁб«®¬ Їа®жҐб-
б®ў.
’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ ®зҐаҐ¤Ё, ўлЇ®«по饩 дгЄжЁЁ § ¤Ґа¦ЄЁ
Їа®жҐбб®ў ўаҐ¬п, ®б®ў б«Ґ¤гойЁе Ї®«®¦ҐЁпе:
1. Њг«мвЁ§ ¤ з п б। "§ Ґв" ⥪г饥 ўаҐ¬п, Є®в®а®Ґ ¬®¦Ґв
Ї®¤бзЁвлў вмбп Ї® Є®«ЁзҐбвўг ўл§®ў®ў ¤ЁбЇҐвзҐа -®Ўа Ў®взЁЄ ЇаҐ-
алў Ё© ®в в ©¬Ґа .
2. ‚ ¬®¬Ґв ®Ўа йҐЁп Їа®жҐбб Є ¬Ґв®¤г "§ ¤Ґа¦ вм ўаҐ¬п
’" Їа®жҐбб ЇҐаҐў®¤Ёвбп ў ®зҐаҐ¤м, ў бЇҐжЁ «м®Ґ Ї®«Ґ ¤ҐбЄаЁЇв®-
а Їа®жҐбб § ®бЁвбп ўаҐ¬п ҐЈ® ЄвЁўЁ§ жЁЁ, а ў®Ґ б㬬Ґ ⥪гйҐ-
Ј® ўаҐ¬ҐЁ Ё ЁвҐаў « ’ § ¤Ґа¦ЄЁ.
3. „ЁбЇҐвзҐа Є ¦¤®¬ ЇаҐалў ЁЁ Їа®ўҐапҐв ®зҐаҐ¤м § ¤Ґа-
¦ ле «ЁзЁҐ Їа®жҐбб®ў, ¤«п Є®в®але ⥪г饥 ўаҐ¬п б®ўЇ «® б
ўаҐ¬ҐҐ¬ Ёе ЄвЁўЁ§ жЁЁ, Ё ЇҐаҐў®¤Ёв нвЁ Їа®жҐббл ў ®зҐаҐ¤м Ј®в®-
ўле.
‘ гзҐв®¬ ЇаЁўҐ¤Ґле Ї®«®¦ҐЁ© ®ЇЁб ЁҐ ®зҐаҐ¤Ё § ¤Ґа¦ ле
Ўг¤Ґв ўлЈ«п¤Ґвм б«Ґ¤гойЁ¬ ®Ўа §®¬:
Type
DelayList = Object(List)
Procedure Delay(T : Word);
Procedure Activisation;
End {DelayList}.
ЊҐв®¤ DelayList.Activisation Ї®¬Ґй Ґвбп ў ¤ЁбЇҐвзҐа.
„ ¤Ё¬ б«®ўҐб®Ґ ®ЇЁб ЁҐ ¬Ґв®¤ DelayList.Delay(T : Word).
Procedure DelayList.Delay(T : Word);
Var
ЏаҐ¤л¤гйЁ© : Џа®жҐбб;
Begin
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
ЏаҐ¤л¤гйЁ©^.Tact := T + Tcur;
‚Є«озЁвм(ЏаҐ¤л¤гйЁ©);
’ҐЄгйЁ© := ЋзҐаҐ¤м_ѓ®в®ўле.ЏҐаўл©;
ЋзҐаҐ¤м_ѓ®в®ўле.€§ў«Ґзм(’ҐЄгйЁ©);
ЏҐаҐ¤ вм_“Їа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
End {DelayList.Delay}.
„ ¤Ё¬ б«®ўҐб®Ґ ®ЇЁб ЁҐ ¬Ґв®¤ DelayList.Activisation:
Procedure DelayList.Activisation;
- 17 -
Var
’ҐЄгйЁ©, ‘«Ґ¤гойЁ© : Џа®жҐбб;
Begin
’ҐЄгйЁ© := ЏҐаўл©;
Џ®Є ’ҐЄгйЁ© <> NIL „Ґ« вм Ќ з «®
‘«Ґ¤гойЁ© := ’ҐЄгйЁ©^.‘«Ґ¤гойЁ©;
…б«Ё ’ҐЄгйЁ©^.Tact = Tcur ’® Ќ з «®
€§ў«Ґзм(’ҐЄгйЁ©);
ЋзҐаҐ¤м_ѓ®в®ўле.‚Є«озЁвм(’ҐЄгйЁ©);
Љ®Ґж {…б«Ё};
’ҐЄгйЁ© := ‘«Ґ¤гойЁ©;
Љ®Ґж {Џ®Є };
End {DelayList.Activisation}.
я2ЋзҐаҐ¤м гЁз⮦ Ґ¬ле Їа®жҐбб®ў
—в®Ўл гЁз⮦Ёвм Їа®жҐбб, 室пйЁ©бп ў Є Є®©-«ЁЎ® ®зҐаҐ¤Ё,
ҐЈ® Ґ®Ўе®¤Ё¬® Ё§кпвм Ё§ ҐҐ Ё а §агиЁвм ¤ҐбЄаЁЇв®а Їа®жҐбб . ЏаЁ
н⮬ ЁЄ ЄЁе Їа®Ў«Ґ¬ Ґ ў®§ЁЄ Ґв. ЋЁ Ї®пў«повбп, Є®Ј¤ вॡгҐв-
бп гЁз⮦Ёвм ЄвЁўл© Їа®жҐбб, в.Ґ. ўлЇ®«пойЁ©бп ў ⥪гйЁ© ¬®-
¬Ґв ўаҐ¬ҐЁ. Ќ ЇаЁ¬Ґа, Їа®жҐбб § Є®зЁ« ўлЇ®«ҐЁҐ ЇаҐ¤ЇЁб ле
Ґ¬г ¤Ґ©бвўЁ© Ё ¦Ґ« Ґв б ¬®гЁз⮦Ёвмбп. ‚ н⮬ б«гз Ґ Їа®бв® а §-
агиЁвм ¤ҐбЄаЁЇв®а Їа®жҐбб Ґ«м§п, в Є Є Є гЇа ў«ҐЁҐ ®в ЄвЁў®-
Ј® Їа®жҐбб ЇҐаҐ¤ Ґвбп ЇҐаў®¬г ў ®зҐаҐ¤Ё Ј®в®ўле Їа®жҐбб®ў зҐаҐ§
Ёе ¤ҐбЄаЁЇв®ал, Ё Ґб«Ё ¤ҐбЄаЁЇв®а ЄвЁў®Ј® Їа®жҐбб а §агиЁвм,
в® дгЄжЁЁ Transfer(Old, New : Process) Ўг¤Ґв ЇҐаҐ¤ гЄ § ⥫м
ҐбгйҐбвўгойЁ© ¤ҐбЄаЁЇв®а Ё бЁб⥬ § ўЁбҐв.
Џ®н⮬г вҐе®«®ЈЁп Є®а४⮣® гЁз⮦ҐЁп Їа®жҐбб б®бв®Ёв
ў б«Ґ¤го饬:
1. Џа®жҐбб, ¦Ґ« ойЁ© б ¬®гЁз⮦Ёвмбп, ЇҐаҐў®¤Ёвбп ў бЇҐжЁ-
«мго ®зҐаҐ¤м гЁз⮦ Ґ¬ле Їа®жҐбб®ў, ҐЈ® ¤ҐбЄаЁЇв®а Ґ а §аг-
и Ґвбп.
2. „ЁбЇҐвзҐа Є ¦¤®¬ ЇаҐалў ЁЁ ®зЁй Ґв ®зҐаҐ¤м гЁз⮦ Ґ-
¬ле Їа®жҐбб®ў, а §аги п Ёе ¤ҐбЄаЁЇв®ал.
‘ гзҐв®¬ ЇаЁўҐ¤Ґле Ї®«®¦ҐЁ© ®ЇЁб ЁҐ ®зҐаҐ¤Ё гЁз⮦ Ґ¬ле
Їа®жҐбб®ў ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬:
Type
KillList = Object(List)
Procedure SelfInsert;
- 18 -
Procedure Clear;
End {KillList}.
ЊҐв®¤ KillList.Clear ўл§лў Ґвбп Ё§ Їа®жҐ¤гал ¤ЁбЇҐвзҐа
Є ¦¤®¬ ЇаҐалў ЁЁ ®в в ©¬Ґа .
„ ¤Ё¬ б«®ўҐб®Ґ ®ЇЁб ЁҐ ¬Ґв®¤ KillList.Clear.
Procedure KillList.Clear;
Var
‚६Ґл© : Џа®жҐбб;
Begin
Џ®Є ЏҐаўл© <> NIL „Ґ« вм Ќ з «®
‚६Ґл© := ЏҐаўл©;
ЏҐаўл© := ‚६Ґл©^.‘«Ґ¤гойЁ©;
ђ §агиЁвм(‚६Ґл©);
Љ®Ґж {Џ®Є };
End {KillList.Clear}.
ЏаЁ¬ЁвЁў п¤а “Ќ€—’Ћ†€’њ_ЏђЋ–…‘‘(P : ЏђЋ–…‘‘) ўлЈ«п¤Ёв б«Ґ-
¤гойЁ¬ ®Ўа §®¬ KillList.Insert(P).
ЏаЁ б ¬®гЁз⮦ҐЁЁ Їа®жҐбб ¤®«¦Ґ ®Ўа вЁвмбп Є ¬Ґв®¤г:
KillList.SelfInsert.
‡ ¬ҐвЁ¬, зв® Їа®жҐбб ЁЄ®Ј¤ Ґ ¤®«¦Ґ § Є зЁў вмбп ўл室®¬
End Їа®жҐ¤гал, Є®в®а п ҐЈ® ®ЇЁблў Ґв, в®«мЄ® ўл§®ў®¬ Kill-
List.SelfInsert.
я2‡ ¤ ЁҐ
1. €бЇ®«м§гп ¬ вҐаЁ «л ЇаҐ¤л¤гйЁе « Ў®а в®але а Ў®в Ё
ЇаҐ¤бв ў«Ґ®Ґ ўлиҐ ®ЇЁб ЁҐ бЁб⥬ле ®зҐаҐ¤Ґ©, ॠ«Ё§®ў вм ®Ўк-
ҐЄвл: ®зҐаҐ¤м § ¤Ґа¦ ле Їа®жҐбб®ў, ®зҐаҐ¤м Їа®жҐбб®ў, § ¤Ґа¦ -
ле ўаҐ¬п, ®зҐаҐ¤м гЁз⮦ Ґ¬ле Їа®жҐбб®ў.
2. „®Ў ўЁвм ЇҐаҐзЁб«ҐлҐ ®ЎкҐЄвл ў ЎЁЎ«Ё®вҐзл© ¬®¤г«м, аҐ-
«Ё§гойЁ© п¤а®.
3. ђҐ «Ё§®ў вм Їа®Ја ¬¬г, ¤Ґ¬®бваЁагойго а Ў®в®бЇ®б®Ў®бвм
а §а Ў®в ле ®ЎкҐЄв®ў.
я1ЋвзҐв ¤®«¦Ґ ᮤҐа¦ вмя0 ⥪бвл Їа®Ја ¬¬л Ё ЎЁЎ«Ё®вҐз®Ј® ¬®-
¤г«п б Є®¬¬Ґв аЁп¬Ё.
- 19 -
я2‹ Ў®а в®а п а Ў®в 5
я2€‘‘‹…„Ћ‚ЂЌ€… Њ…’Ћ„Ћ‚ ‘€Ќ•ђЋЌ€‡Ђ–€€ ЏђЋ–…‘‘Ћ‚
я1–Ґ«м а Ў®вля0 - § Є®¬бвў® б ¬Ґв®¤ ¬Ё бЁеа®Ё§ жЁЁ Їа®жҐбб®ў
®б®ўҐ ᥬ д®а®ў.
я2ЋЎйЁҐ ᢥ¤ҐЁп
‘Ёеа®Ё§ жЁҐ© §лў Ґвбп ®ЎҐбЇҐзҐЁҐ § ¤ ®© ®зҐаҐ¤®бвЁ
Їа®е®¦¤ҐЁп Їа®жҐбб®ў зҐаҐ§ ®ЇаҐ¤Ґ«ҐлҐ б®бв®пЁп.
Ќ ЁЎ®«ҐҐ з бв® бЁеа®Ё§ жЁп вॡгҐвбп ¤«п Є®®а¤Ё жЁЁ ¤®б-
вгЇ ҐбЄ®«мЄЁе Їа®жҐбб®ў Є ®¤®¬г а §¤Ґ«пҐ¬®¬г аҐбгабг.
ђ бᬮваЁ¬ Їа®б⥩訩 ЇаЁ¬Ґа. ЏаҐ¤Ї®«®¦Ё¬, зв® ¤ў Їа®жҐбб
ўлў®¤пв Ёд®а¬ жЁо ў ўЁ¤Ґ бЁ¬ў®« ў а §лҐ в®зЄЁ нЄа .
”а Ј¬Ґв ⥪бв Їа®жҐ¤га, ᮮ⢥вбвўгойЁе Їа®жҐбб ¬, ўлЈ«п-
¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬:
Џа®жҐбб 1 Џа®жҐбб 2
(1) GoTo(X,Y); (3) GoTo(X,Y);
(2) Write(Ch); (4) Write(Ch);
ЏаЁ ўлЇ®«ҐЁЁ Їа®жҐбб®ў ў ०Ё¬Ґ а §¤Ґ«ҐЁп ўаҐ¬ҐЁ ў®§¬®¦-
бЁвг жЁп, Є®Ј¤ ®ЇҐа в®а®¬ GoTo(X,Y) Єгаб®а гбв ў«Ёў Ґвбп ў
г¦го в®зЄг нЄа ®¤Ё¬ Їа®жҐбᮬ, § ⥬ ¤ЁбЇҐвзҐа ЇҐаҐ¤ Ґв гЇ-
а ў«ҐЁҐ ¤агЈ®¬г Їа®жҐббг, Є®в®ал© ў нв® ўаҐ¬п ўлЇ®«пҐв ®ЇҐа жЁо
ўлў®¤ бЁ¬ў®« . ’® Ґбвм ®зҐаҐ¤®бвм ўлЇ®«ҐЁп ¤Ґ©бвўЁ© в Є®ў :
1, 3, 2, 4 Ё«Ё 3, 1, 4, 2. ЋзҐўЁ¤®, зв® ў н⮬ б«гз Ґ ®¤Ё Ё§
Їа®жҐбб®ў ўлўҐ¤Ґв Ёд®а¬ жЁо Ґ ў в® ¬Ґбв® нЄа , Єг¤ Ї« Ёа®-
ў «.
‘гвм ЁбЇа ў«ҐЁп ®иЁЎЄЁ б®бв®Ёв ў ®ЎҐбЇҐзҐЁЁ Ґ¤Ґ«Ё¬®бвЁ
ўлЇ®«ҐЁп Ї®б«Ґ¤®ў ⥫м®бвЁ ¤Ґ©бвўЁ© GoTo(X,Y) Ё Write(Ch).
‚ Ў®«ҐҐ ®ЎйҐ¬ б¬лб«Ґ бЁвг жЁп ЇаҐ¤бв ў«пҐвбп б«Ґ¤гойЁ¬ ®Ўа -
§®¬. ќЄа ў ¤ ®¬ б«гз Ґ ўлбвгЇ Ґв ў а®«Ё а §¤Ґ«пҐ¬®Ј® аҐбгаб ,
Є®в®ал© б®ў¬Ґбв® Ё ®¤®ўаҐ¬Ґ® ЁбЇ®«м§гов ¤ў Їа®жҐбб . ЋиЁЎЄ
ў®§ЁЄ Ґв ЇаЁ ®вбгвбвўЁЁ ॣ« ¬Ґв жЁЁ ¤®бвгЇ Є а §¤Ґ«пҐ¬®¬г аҐ-
бгабг, Є®в®а п § Є«оз Ґвбп ў ⮬, зв® Ґб«Ё ®¤Ё Їа®жҐбб а Ў®в Ґв
б ®ЎйЁ¬ аҐбгаᮬ, в® ¤агЈ®© Ґ ¤®«¦Ґ ў нв® ¦Ґ ўаҐ¬п а Ў®в вм б
Ё¬.
- 20 -
€бЇ®«м§гҐ¬л© б®ў¬Ґбв® ҐбЄ®«мЄЁ¬Ё Їа®жҐбб ¬Ё аҐбгаб §лў -
Ґвбп ЄаЁвЁзҐбЄЁ¬, гз бв®Є Їа®Ја ¬¬л Їа®жҐбб , ॠ«Ё§гойЁ© а Ў®вг
б ЄаЁвЁзҐбЄЁ¬ аҐбгаᮬ, §лў Ґвбп ЄаЁвЁзҐбЄЁ¬ гз бвЄ®¬, ०Ё¬,
ЇаЁ Є®в®а®¬ в®«мЄ® ®¤Ё Їа®жҐбб ў Їа®Ё§ў®«мл© ¬®¬Ґв ўаҐ¬ҐЁ ¬®-
¦Ґв а Ў®в вм б ЄаЁвЁзҐбЄЁ¬ аҐбгаᮬ (Ё«Ё 室Ёвмбп ў ЄаЁвЁзҐбЄ®¬
гз бвЄҐ), §лў Ґвбп ०Ё¬®¬ ў§ Ё¬®Ј® ЁбЄ«о票п.
‚ бЁб⥬ е ॠ«м®Ј® ўаҐ¬ҐЁ ЇаҐҐЎаҐ¦ҐЁҐ ॣ« ¬Ґв жЁҐ©
¤®бвгЇ ҐбЄ®«мЄЁе Їа®жҐбб®ў Є ЄаЁвЁзҐбЄ®¬г аҐбгабг ¬®¦Ґв ЇаЁў®-
¤Ёвм Є Є в бва®дЁзҐбЄЁ¬ Ї®б«Ґ¤бвўЁп¬.
я2ЊҐв®¤л ®ЎҐбЇҐзҐЁп ०Ё¬ ў§ Ё¬®Ј® ЁбЄ«о票п
Њ®¦® ўл¤Ґ«Ёвм ваЁ ЇаЁжЁЇЁ «мле ЇгвЁ ®ЎҐбЇҐзҐЁп ०Ё¬
ў§ Ё¬®Ј® ЁбЄ«о票п.
я11) ‡ ЇаҐв ЇаҐалў Ё© ўе®¤Ґ ў ЄаЁвЁзҐбЄЁ© гз бв®Є Ё а §аҐ-
я1襨Ґ ЇаҐалў Ё© ўл室Ґ Ё§ ҐЈ®.
‚ н⮬ б«гз Ґ да Ј¬Ґв Їа®Ја ¬¬л а Ў®вл б ЄаЁвЁзҐбЄЁ¬ гз бв-
Є®¬ ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬:
‡ ЇаҐв ЇаҐалў Ё©:
ЉаЁвЁзҐбЄЁ© гз бв®Є;
ђ §аҐиҐЁҐ ЇаҐалў Ё©.
ЏҐаўл¬ Ё Ґ¤ЁбвўҐл¬ ў бў®© ЄаЁвЁзҐбЄЁ© гз бв®Є ў®©¤Ґв в®в
Їа®жҐбб, Є®в®ал© ЇҐаўл¬ ¤®ЎҐаҐвбп ¤® ЁбвагЄжЁЁ CLI ў дгЄжЁЁ
я1"‡ ЇаҐв ЇаҐалў Ё©"я0. ЏаҐалў Ёп Ўг¤гв § ЇаҐйҐл, ¤ЁбЇҐвзҐа ЇаҐЄ-
а вЁв а Ў®вг Ё ўбҐ ¤агЈЁҐ Їа®жҐббл ҐбвҐбвўҐл¬ ®Ўа §®¬ Ўг¤гв
ЇаЁ®бв ®ў«Ґл. Џ®б«Ґ ўл室 Ё§ ЄаЁвЁзҐбЄ®Ј® гз бвЄ ЇаҐалў Ёп
Ўг¤гв а §аҐиҐл Ё Є Є®©-в® ¤агЈ®© Їа®жҐбб ᬮ¦Ґв ў®©вЁ ў бў®©
ЄаЁвЁзҐбЄЁ© гз бв®Є.
’ Є®© бЇ®б®Ў ®аЈ Ё§ жЁЁ ў§ Ё¬®Ј® ЁбЄ«озҐЁп ®Ў« ¤ Ґв бг-
йҐб⢥묨 Ґ¤®бв вЄ ¬Ё:
- ЇаЁ § ЇаҐвҐ ЇаҐалў Ё© бЁб⥬ бв ®ўЁвбп б«ҐЇ®© Ё Ј«ге®©
Є ўҐиЁ¬ ў®§¤Ґ©бвўЁп¬ ®Єаг¦ о饩 б।л, Є®в®алҐ д®а¬Ёаговбп, Є Є
Їа ўЁ«®, зҐаҐ§ бЁб⥬㠯аҐалў Ё©;
- ЇаЁ®бв ў«Ёў овбп ¤ ¦Ґ ⥠Їа®жҐббл, Є®в®алҐ ў®®ЎйҐ Ґ а -
Ў®в ов б ¤ л¬ аҐбгаᮬ.
Џ®н⮬㠤 л© бЇ®б®Ў ®аЈ Ё§ жЁЁ ў§ Ё¬®Ј® ЁбЄ«озҐЁп ЇаЁ-
¬ҐпҐвбп ў вҐе б«гз пе, Є®Ј¤ ЄаЁвЁзҐбЄЁ© гз бв®Є ®зҐм Є®а®вЄЁ©,
ЇаЁ¬Ґа, ҐбЄ®«мЄ® ЁбвагЄжЁ©.
- 21 -
я12) ЂЄвЁў®Ґ ®¦Ё¤ ЁҐ.
‚ н⮬ б«гз Ґ ўў®¤Ёвбп ҐЄ®в®ал© д« Ј § пв®бвЁ аҐбгаб , Є®-
в®ал© Їа®ўҐапҐвбп Їа®жҐбᮬ ЇҐаҐ¤ ⥬, Є Є ў®©вЁ ў ЄаЁвЁзҐбЄЁ©
гз бв®Є. …б«Ё д« Ј, Є®в®ал© ў з «Ґ гбв ў«Ёў Ґвбп ў б®бв®пЁҐ
‘‚ЋЃЋ„…Ќ, 室Ёвбп ў б®бв®пЁЁ ‘‚ЋЃЋ„…Ќ, в® Їа®жҐбб ЇҐаҐў®¤Ёв
ҐЈ® ў б®бв®пЁҐ ‡ЂЌџ’ Ё ўе®¤Ёв ў ЄаЁвЁзҐбЄЁ© гз бв®Є. ЏаЁ ўл室Ґ
Ё§ ҐЈ® Їа®жҐбб гбв ў«Ёў Ґв д« Ј ў б®бв®пЁҐ ‘‚ЋЃЋ„…Ќ. …б«Ё ЇаЁ
Ї®¤е®¤Ґ Є ЄаЁвЁзҐбЄ®¬г гз бвЄг д« Ј ®Є §лў Ґвбп ў б®бв®пЁЁ ‡Ђ-
Ќџ’, в® Їа®жҐбб зЁ Ґв Їа®ўҐапвм б®бв®пЁҐ д« Ј ў жЁЄ«Ґ ¤® вҐе
Ї®а, Ї®Є д« Ј Ґ Ўг¤Ґв гбв ®ў«Ґ ў б®бв®пЁҐ ‘‚ЋЃЋ„…Ќ ¤агЈЁ¬
Їа®жҐбᮬ.
”а Ј¬Ґвл Їа®жҐ¤гал, ®ЇЁблў ойЁҐ Їа®жҐбб нв Ї е ўе®¤ ў
ЄаЁвЁзҐбЄЁ© гз бв®Є Ё ўл室 Ё§ ҐЈ®, ўлЈ«п¤пв б«Ґ¤гойЁ¬ ®Ўа §®¬:
€ЁжЁ «Ё§ жЁп: FLAG := ‘‚ЋЃЋ„…Ќ;
While FLAG = ‡ЂЌџ’ Do Begin
End {While};
FLAG := ‡ЂЌџ’;
ЉаЁвЁзҐбЄЁ© гз бв®Є;
FLAG := ‘‚ЋЃЋ„…Ќ;
‚ ¤ ®¬ б«гз Ґ б ¬ д« Ј пў«пҐвбп ЄаЁвЁзҐбЄЁ¬ аҐбгаᮬ Ё
¤®бвгЇ Є Ґ¬г ¤®«¦Ґ Їа®Ё§ў®¤Ёвмбп ў ०Ё¬Ґ ў§ Ё¬®Ј® ЁбЄ«о票п.
”а Ј¬Ґв ўе®¤ ў ЄаЁвЁзҐбЄЁ© гз бв®Є б Їа®ўҐаЄ®© Ё гбв ®ўЄ®©
д« Ј ў ०Ё¬Ґ ў§ Ё¬®Ј® ЁбЄ«озҐЁп ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬
(б®бв®пЁо ‡ЂЌџ’ ᮮ⢥вбвўгҐв FLAG = 1):
LBL : STI
CLI
CMP FLAG, 1
JZ LBL
MOV FLAG, 1
STI
…б«Ё з⥨Ґ Ё гбв ®ўЄг д« Ј ўлЇ®«пвм § ®¤г ЁбвагЄжЁо,
Є®в®а п пў«пҐвбп Ґ¤Ґ«Ё¬л¬ ¤Ґ©бвўЁҐ¬, в® ўе®¤ ў ЄаЁвЁзҐбЄЁ© гз б-
в®Є ¬®¦® ўлЇ®«Ёвм Ў®«ҐҐ н«ҐЈ в®, Ё¬Ґ®:
MOV AX, 1
LBL : XCHG AX, FLAG
CMP AX, 1
- 22 -
JZ LBL
ЌҐ¤®бв вЄ®¬ ЇаЁўҐ¤Ґ®Ј® ¬Ґв®¤ ॠ«Ё§ жЁЁ ў§ Ё¬®Ј® ЁбЄ«о-
票п пў«пҐвбп ЄвЁў®Ґ ®¦Ё¤ ЁҐ, в. Ґ. Їа®жҐбб, Є®в®ал© ¦¤Ґв ®б-
ў®Ў®¦¤ҐЁп аҐбгаб , § Ё¬ Ґв Їа®жҐбб®а ў ®вў®¤Ё¬лҐ Ґ¬г ¤ЁбЇҐвзҐ-
஬ Єў вл ўаҐ¬ҐЁ, е®вп Ё Ґ ўлЇ®«пҐв ЁЄ ЄЁе Ї®«Ґ§ле ¤Ґ©б-
вўЁ©.
Џ®н⮬㠢 б«гз Ґ ®¦Ё¤ Ёп ®бў®Ў®¦¤ҐЁп аҐбгаб 楫Ґб®®Ўа §®
Ё§ў«Ґзм Їа®жҐбб Ё§ ®зҐаҐ¤Ё Ј®в®ўле Їа®жҐбб®ў Ё Ґ ЇаҐ¤®бв ў«пвм
Ґ¬г ЎҐбЇ®«Ґ§® ЁбЇ®«м§гҐ¬ле Єў в®ў ўаҐ¬ҐЁ. Ќ н⮬ Ї®«®¦ҐЁЁ
®б®ў ® ЁбЇ®«м§®ў ЁҐ ᥬ д®а®ў Є Є б।бвў ў§ Ё¬®Ј® ЁбЄ«о票п
ЇаЁ ¤®бвгЇҐ Є ЄаЁвЁзҐбЄ®¬г аҐбгабг.
я13) ‘Ґ¬ д®ал.
‘Ґ¬ д®а ЇаҐ¤бв ў«пҐв б®Ў®© ®ЎкҐЄв, ўЄ«оз ойЁ© бзҐвзЁЄ Ё ®зҐ-
।м. ‚ ®зҐаҐ¤м Ї®¬Ґй овбп Їа®жҐббл, ¦¤гйЁҐ бвгЇ«ҐЁп ҐЄ®в®а®-
Ј® б®ЎлвЁп, ЇаЁ¬Ґа ®бў®Ў®¦¤ҐЁп аҐбгаб . “б«®ўЁп Ї®¬ҐйҐЁп Їа®-
жҐбб ў ®зҐаҐ¤м Ё Ё§ў«ҐзҐЁп Ё§ ҐҐ б 楫мо ЄвЁўЁ§ жЁЁ ®ЇаҐ¤Ґ«п-
овбп б®бв®пЁҐ¬ бзҐвзЁЄ Ё Їа®ўҐаповбп ¤ўг¬п ®ЇҐа жЁп¬Ё ¤ ᥬ -
д®а®¬, Є®в®алҐ §лў овбп P- Ё V- ®ЇҐа жЁп¬Ё.
ЏаЁжЁЇл а Ў®вл б ᥬ д®а®¬ ¬®¦® ®ЇЁб вм б«Ґ¤гойЁ¬ ®Ўа §®¬.
‚ Ёб室®¬ б®бв®пЁЁ ᥬ д®а ®вЄалв. Џа®жҐбб Їа®е®¤Ёв зҐаҐ§ ®вЄ-
алвл© бҐ¬ д®а ў ЄаЁвЁзҐбЄЁ© гз бв®Є Ё § Єалў Ґв § б®Ў®© ᥬ д®а.
„агЈ®© Їа®жҐбб, Ї®¤е®¤п Є ЄаЁвЁзҐбЄ®¬г гз бвЄг, влЄ Ґвбп
§ Єалвл© бҐ¬ д®а Ё ўл㦤Ґ ¦¤ вм ҐЈ® ®вЄалвЁп ў ®зҐаҐ¤Ё ᥬ д®-
а . Џа®жҐбб, ўле®¤п Ё§ ЄаЁвЁзҐбЄ®Ј® гз бвЄ , ®вЄалў Ґв ᥬ д®а Ё
ЄвЁўЁ§ЁагҐв ЇҐаўл© ў ®зҐаҐ¤Ё ᥬ д®а Їа®жҐбб, Є®в®ал© вҐЇҐам
¬®¦Ґв ў®©вЁ ў ЄаЁвЁзҐбЄЁ© гз бв®Є Ё в Є¦Ґ § Єалвм § б®Ў®© ᥬ -
д®а.
‘®бв®пЁҐ бзҐвзЁЄ ᥬ д®а ЁЈа Ґв а®«м Ё¤ЁЄ в®а § пв®бвЁ
аҐбгаб . ЏаЁпв® ЁЁжЁ «Ё§Ёа®ў вм бзҐвзЁЄ ў 1, ¤ҐЄаҐ¬ҐвЁа®ў вм
ҐЈ® ЇаЁ Ї®¤е®¤Ґ Є ЄаЁвЁзҐбЄ®¬г гз бвЄг (ђ - ®ЇҐа жЁп) Ё ЁЄаҐ¬Ґ-
вЁа®ў вм ЇаЁ ўл室Ґ Ё§ ЄаЁвЁзҐбЄ®Ј® гз бвЄ (V - ®ЇҐа жЁп). ’ ЄЁ¬
®Ўа §®¬, а ўҐбвў® г«о бзҐвзЁЄ бўЁ¤ҐвҐ«мбвўгҐв ® ў®§¬®¦®бвЁ
ўе®¤ ў ЄаЁвЁзҐбЄЁ© гз бв®Є, ®ваЁж ⥫쮥 § 票Ґ бзҐвзЁЄ
бўЁ¤ҐвҐ«мбвўгҐв ® «ЁзЁЁ Їа®жҐбб ў ЄаЁвЁзҐбЄ®¬ гз бвЄҐ Ё Ґ®Ў-
室Ё¬®бвЁ Ў«®ЄЁа®ўЄЁ, в. Ґ. ® ЇҐаҐў®¤Ґ ў ®зҐаҐ¤м ᥬ д®а б ЇҐаҐ-
¤ 祩 гЇа ў«ҐЁп ¤агЈЁ¬ Їа®жҐбб ¬.
- 23 -
я2’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ ᥬ д®а
’Ґе®«®ЈЁп ॠ«Ё§ жЁЁ ᥬ д®а ЇаҐ¤бв ў«Ґ ў ўЁ¤Ґ ®ЇЁб Ёп
ᥬ д®а Є Є ®ЎкҐЄв п§лЄ Їа®Ја ¬¬Ёа®ў Ёп.
Type
PSemaphore = ^TSemaphore;
TSemaphore = Object
‘зҐвзЁЄ : –Ґ«®Ґ;
ЋзҐаҐ¤м_ᥬ д®а : ЋзҐаҐ¤м Їа®жҐбб®ў;
Constructor Init(‘ : –Ґ«®Ґ);
Destructor Done; Virtual;
Procedure P;
Procedure V;
End {TSemaphore}.
Constructor TSemaphore.Init(–Ґ«®Ґ);
Begin
‘зҐвзЁЄ := ‘;
‘®§¤ вм ЋзҐаҐ¤м_ᥬ д®а ;
End {TSemaphore.Init};
Destructor TSemaphore.Done;
Begin
ђ §агиЁвм ЋзҐаҐ¤м_ᥬ д®а ;
End {TSemaphore.Done};
Procedure TSemaphore.P;
Var
ЏаҐ¤л¤гйЁ© : Џа®жҐбб;
Begin
‡ ЇаҐвЁвм_ЇаҐалў Ёп;
‘зҐвзЁЄ := ‘зҐвзЁЄ - 1;
If ‘зҐвзЁЄ < 0 Then Begin {Ў«®ЄЁа®ў вм Їа®жҐбб}
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
ЋзҐаҐ¤м_ᥬ д®а .‚Є«озЁвм(ЏаҐ¤л¤гйЁ©);
’ҐЄгйЁ© := ЋзҐаҐаҐ¤м_Ј®в®ўле.ЏҐаўл©;
ЋзҐаҐ¤м_Ј®в®ўле.€§ў«Ґзм(’ҐЄгйЁ©);
ЏҐаҐ¤ вм_гЇа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
End {If};
ђ §аҐиЁвм_ЇаҐалў Ёп;
End {TSemaphore.P};
- 24 -
Procedure TSemaphore.V;
Var
ЏаҐ¤л¤гйЁ© : Џа®жҐбб;
Begin
‡ ЇаҐвЁвм_ЇаҐалў Ёп;
‘зҐвзЁЄ := ‘зҐвзЁЄ + 1;
If ‘зҐвзЁЄ <= 0 Then Begin { ЄвЁўЁ§Ёа®ў вм Їа®жҐбб}
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
ЋзҐаҐ¤м_Ј®в®ўле.‚Є«озЁвм(ЏаҐ¤л¤гйЁ©);
’ҐЄгйЁ© := ЋзҐаҐ¤м_ᥬ д®а .ЏҐаўл©;
ЋзҐаҐ¤м_ᥬ д®а .€§ў«Ґзм(’ҐЄгйЁ©);
ЏҐаҐ¤ вм_гЇа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
End {If};
ђ §аҐиЁвм_ЇаҐалў Ёп;
End {TSemaphore.V}.
‡¤Ґбм Їа®жҐбб, ўл§ў ўиЁ© ¬Ґв®¤ TSemaphore.V, ЇҐаҐў®¤Ёвбп ў
®зҐаҐ¤м Ј®в®ўле Ё ЄвЁўЁ§ЁагҐв Їа®жҐбб, бв®пйЁ© ЇҐаўл¬ ў ®зҐаҐ¤Ё
ᥬ д®а .
я2’Ґе®«®ЈЁп ЁбЇ®«м§®ў Ёп ᥬ д®а®ў
‚ ЇҐаўго ®зҐаҐ¤м ᥬ д®ал ЁбЇ®«м§говбп Є Є б।бвў ў§ Ё¬®-
Ј® ЁбЄ«озҐЁп ЇаЁ ¤®бвгЇҐ Є ЄаЁвЁзҐбЄ®¬г аҐбгабг. Џа ўЁ«® ЁбЇ®«м-
§®ў Ёп ᥬ д®а ў н⮬ б«гз Ґ ЇаҐ¤бв ў«Ґ® ў ўЁ¤Ґ да Ј¬Ґв Їа®-
楤гал, ®ЇЁблў о饩 Їа®жҐбб ЇаЁ ўе®¤Ґ ў ЄаЁвЁзҐбЄЁ© гз бв®Є Ё ўл-
室Ґ Ё§ ҐЈ®.
ђ §¤Ґ« ®ЇЁб Ёп:
Var
Semaphore : TSemaphore;
ђ §¤Ґ« ЁЁжЁ «Ё§ жЁЁ:
Semaphore.Init(1);
Џа®жҐбб ЇаЁ а Ў®вҐ б ЄаЁвЁзҐбЄЁ¬ гз бвЄ®¬:
Semaphore.P;
ЉаЁвЁзҐбЄЁ© гз бв®Є;
Semaphore.V;
- 25 -
‡ ўҐа襨Ґ а Ў®вл б ᥬ д®а®¬:
Semaphore.Done;
‘Ґ¬ д®ал ¬®Јгв Ўлвм ЁбЇ®«м§®ў л Ґ в®«мЄ® ¤«п Є®®а¤Ё жЁЁ
¤®бвгЇ Є ЄаЁвЁзҐбЄ®¬г аҐбгабг ҐбЄ®«мЄЁе Їа®жҐбб®ў, ® Ё ¤«п гб-
в ®ў«ҐЁп вॡ㥬®© ®зҐаҐ¤®бвЁ Їа®е®¦¤ҐЁп Їа®жҐбб ¬Ё ®ЇаҐ¤Ґ-
«Ґле б®бв®пЁ©. Џгбвм, ЇаЁ¬Ґа, Ґ®Ўе®¤Ё¬®, зв®Ўл Їа®жҐбб ђ1
Їа®иҐ« зҐаҐ§ б®бв®пЁҐ, ®в¬ҐзҐ®Ґ ¬ҐвЄ®© Њ_ђ1, ЇаЁ¬Ґа з⥨Ґ
Ё§ п祩ЄЁ Ї ¬пвЁ Џ, в®«мЄ® Ї®б«Ґ в®Ј®, Є Є Їа®жҐбб ђ2 Їа®©¤Ґв зҐ-
१ б®бв®пЁҐ, ®в¬ҐзҐ®Ґ ¬ҐвЄ®© Њ_ђ2, ЇаЁ¬Ґа § ЇЁбм ў п祩Єг
Ї ¬пвЁ Џ, в.Ґ. § ЇЁбм ¤®«¦ Їа®Ё§®©вЁ а миҐ з⥨п.
‘ Ї®¬®ймо ᥬ д®а ¤ п § ¤ з аҐи Ґвбп б«Ґ¤гойЁ¬ ®Ўа §®¬:
€ЁжЁ «Ё§ жЁп ᥬ д®а : Semaphore.Init(0);
Џа®жҐбб ђ1 Џа®жҐбб ђ2
Semaphore.P;
Њ_ђ1 : —⥨Ґ Ё§ Џ; Њ_ђ2 : ‡ ЇЁбм ў Џ;
Semaphore.V;
…б«Ё Їа®жҐбб ђ1 Ї®¤®©¤Ґв Є ¬ҐвЄҐ Њ_ђ1 а миҐ, 祬 Їа®жҐбб ђ2
- Є ¬ҐвЄҐ Њ_ђ2, в® ® Ўг¤Ґв ўл㦤Ґ Ў«®ЄЁа®ў вмбп ў ®зҐаҐ¤Ё бҐ-
¬ д®а . Џа®жҐбб ђ2, ўлЇ®«Ёў § ЇЁбм ў п祩Єг Џ, ўл§®ўҐв Semapho-
re.V Ё ⥬ б ¬л¬ ЄвЁўЁ§ЁагҐв Їа®жҐбб ђ1, Ї®§ў®«Ёў Ґ¬г ўлЇ®«Ёвм
з⥨Ґ в®«мЄ® Ї®б«Ґ в®Ј® Є Є ®бгйҐбвў«Ґ § ЇЁбм.
— бв® Їа®жҐббл ॠ«Ё§говбп ў ўЁ¤Ґ ЎҐбЄ®Ґзле жЁЄ«®ў, Ї®нв®-
¬г, зв®Ўл Ё§ЎҐ¦ вм ҐбЄ®«мЄЁе § ЇЁбҐ© ў п祩Єг Џ ®¤Ё¬ Їа®жҐбᮬ
¤® ¬®¬Ґв звҐЁп Ё§ ҐҐ ¤агЈЁ¬ Їа®жҐбᮬ, Ґ®Ўе®¤Ё¬® Ї®б«Ґ¤гойЁҐ
§ ЇЁбЁ ®бгйҐбвў«пвм в®«мЄ® Ї®б«Ґ ®зҐаҐ¤®Ј® з⥨п. “Є § п
б奬 ॠ«Ё§гҐвбп б«Ґ¤гойЁ¬ ®Ўа §®¬:
€ЁжЁ «Ё§ жЁп ᥬ д®а : Semaphore1.Init(0);
€ЁжЁ «Ё§ жЁп ᥬ д®а : Semaphore2.Init(0);
- 26 -
Џа®жҐбб ђ1 Џа®жҐбб ђ2
While True Do Begin While True Do Begin
. . . . . .
Semaphore1.P;
Њ_ђ1 : —⥨Ґ Ё§ Џ; Њ_ђ2 : ‡ ЇЁбм ў Џ;
Semaphore2.V; Semaphore1.V;
Semaphore2.P;
. . . . . .
End {While}; End {While}.
’ҐЇҐам Їа®жҐбб ђ2, ўлЇ®«Ёў § ЇЁбм Ё бЁЈ «Ё§Ёа®ў ў ®Ў н⮬
ўл§®ў®¬ Semaphore1.V, ®¦Ё¤ Ґв, ЇаЁ®бв ®ў«Ґл© ўл§®ў®¬ Semapho-
re2.P, звҐЁп Їа®жҐбᮬ ђ1, ® 祬 ђ1 Ўг¤Ґв бЁЈ «Ё§Ёа®ў вм ўл§®-
ў®¬ Semaphore2.V. ‚ нв®© б奬Ґ ¬Ґв®¤л ᥬ д®а Semaphore2 б«г¦ в
¤«п ®¦Ё¤ Ёп Ё Ї®бл«ЄЁ ЄўЁв жЁЁ, Ї®¤вўҐа¦¤ о饩 з⥨Ґ.
я2‡ ¤ ЁҐ
1. ђҐ «Ё§®ў вм ®ЎкҐЄв - ᥬ д®а, ЁбЇ®«м§гп б।бвў , а §а -
Ў®в лҐ ЇаЁ ўлЇ®«ҐЁЁ « Ў®а в®але а Ў®в 1 - 4.
2. Ќ ЇЁб вм ¤Ґ¬®бва жЁ®го Їа®Ја ¬¬г, Ё««обваЁагойго Є®®а-
¤Ё жЁо ¤®бвгЇ Є ЄаЁвЁзҐбЄ®¬г аҐбгабг б Ї®¬®ймо ॠ«Ё§®ў ®Ј®
ᥬ д®а .
3. Ќ ЇЁб вм ¤Ґ¬®бва жЁ®го Їа®Ја ¬¬г, Ё««обваЁагойго бЁе-
а®Ё§ жЁо Їа®е®¦¤ҐЁп Їа®жҐбб®ў зҐаҐ§ ®ЇаҐ¤Ґ«ҐлҐ б®бв®пЁп б
Ї®¬®ймо ॠ«Ё§®ў ®Ј® ®ЎкҐЄв - ᥬ д®а.
я1ЋвзҐв ¤®«¦Ґ ᮤҐа¦ вмя0 ⥪бв ЎЁЎ«Ё®вҐз®Ј® ¬®¤г«п, ўЄ«оз о-
饣® ®ЇЁб ЁҐ Ё ॠ«Ё§ жЁо ®ЎкҐЄв - ᥬ д®а, ⥪бвл ¤Ґ¬®бва жЁ-
®ле Їа®Ја ¬¬ б Є®¬¬Ґв аЁп¬Ё, в Ў«Ёжл б®бв®пЁ© бзҐвзЁЄ®ў ᥬ -
д®а®ў ЇаЁ а §«Ёзле ў аЁ в е ®зҐаҐ¤®бвЁ Їа®е®¦¤ҐЁп Їа®жҐбб®ў
(¤«п зЁб« Їа®жҐбб®ў, Ў®«м襣® 祬 2) зҐаҐ§ ўл§®ўл P Ё V ЁбЇ®«м-
§гҐ¬ле ᥬ д®а®ў.
- 27 -
я2‹ Ў®а в®а п а Ў®в 6
я2€‘‘‹…„Ћ‚ЂЌ€… Њ…’Ћ„Ћ‚ Ѓ“”…ђ€‡Ђ–€€ ‘ЋЋЃ™…Ќ€‰
я1–Ґ«м а Ў®вля0 - Ё§г票Ґ ¬Ґв®¤ ®Ў¬Ґ б®®ЎйҐЁп¬Ё ¬Ґ¦¤г Їа®-
жҐбб ¬Ё б Ї®¬®ймо ЎгдҐа .
я2ЋЎйЁҐ ᢥ¤ҐЁп
ЃгдҐаЁ§ жЁп пў«пҐвбп б।бвў®¬ б®Ј« б®ў Ёп бЄ®а®бвЁ § ЇЁбЁ
б®®ЎйҐЁ© ®¤Ё¬ Їа®жҐбᮬ Ё бЄ®а®бвЁ Ёе звҐЁп ¤агЈЁ¬. ЏаЁ н⮬
ЎгдҐа пў«пҐвбп ®ЎйЁ¬, а §¤Ґ«пҐ¬л¬ ®ЎкҐЄв®¬ ¤«п ЇЁиг饣® Ё зЁв о-
饣® Їа®жҐбб®ў.
‘гйҐбвўгов б«Ґ¤гойЁҐ вॡ®ў Ёп Є «Ј®аЁв¬ ¬ дгЄжЁ®Ёа®ў -
Ёп ЎгдҐа :
1) Ґ«м§п § ЇЁб вм б®®ЎйҐЁҐ ў Ї®«л© ЎгдҐа; Їа®жҐбб, ¤Ґ« о-
йЁ© в Єго Ї®ЇлвЄг, ¤®«¦Ґ Ўлвм Ў«®ЄЁа®ў ¤® Ї®пў«ҐЁп бў®Ў®¤®©
п祩ЄЁ ў ЎгдҐаҐ;
2) Ґ«м§п Їа®зЁв вм б®®ЎйҐЁҐ Ё§ Їгбв®Ј® ЎгдҐа ; Їа®жҐбб,
¤Ґ« ойЁ© в Єго Ї®ЇлвЄг, ¤®«¦Ґ Ўлвм Ў«®ЄЁа®ў ¤® Ї®пў«ҐЁп б®®Ў-
йҐЁп ў ЎгдҐаҐ.
Љ Є Їа ўЁ«®, ¬Ґе Ё§¬л бЁеа®Ё§ жЁЁ § ЇЁбЁ ў ЎгдҐа Ё з⥨п
Ё§ ЎгдҐа пў«повбп бЄалвл¬Ё ¤«п Ї®«м§®ў ⥫п, Є®в®а®¬г ЇаҐ¤®бв ў-
«повбп «Ёим ЇаЁ¬ЁвЁўл ‘Ћ‡„Ђ’њ, “Ќ€—’Ћ†€’њ, ‡ЂЏ€‘Ђ’њ Ё ЏђЋ—€’Ђ’њ,
ўҐиҐ Ї®¬Ё ойЁҐ а Ў®вг б д ©« ¬Ё.
Џа®б⥩訩 ў аЁ в бЁеа®Ё§ жЁЁ § ЇЁбЁ Ё звҐЁп ¤«п ЎгдҐа
а §¬Ґа®¬ ў 1 п祩Єг Ї ¬пвЁ Ўл« а бᬮвॠў « Ў®а в®а®© а Ў®вҐ
5. ‚ ¤ ®© а Ў®вҐ а бб¬ ваЁў Ґвбп ®ЎйЁ© б«гз © ЎгдҐа а §¬Ґа®¬ ў
N н«Ґ¬Ґв®ў.
я2‘вагЄвга ЎгдҐа
ЃгдҐа ЇаҐ¤бв ў«пҐв б®Ў®© ¬ ббЁў Ё§ N н«Ґ¬Ґв®ў ®ЇаҐ¤Ґ«Ґ®Ј®
вЁЇ . ‘®бв®пЁҐ ЎгдҐа ®ЇЁблў Ґвбп Є®«ЁзҐбвў®¬ б®®ЎйҐЁ© n, е®-
¤пйЁебп ў ЎгдҐаҐ, Ё ¤ўг¬п Ё¤ҐЄб ¬Ё - Ё¤ҐЄб®¬ out звҐЁп Ё Ё-
¤ҐЄб®¬ in § ЇЁбЁ.
‡ ЇЁбм ў ЎгдҐа ЇаҐ¤ў апҐвбп Їа®ўҐаЄ®© гб«®ўЁп "ЎгдҐа Ї®«®",
в. Ґ. n = N, з⥨Ґ Ё§ ЎгдҐа - Їа®ўҐаЄ®© гб«®ўЁп "ЎгдҐа Їгбв",
в. Ґ. n = 0.
‚лЇ®«ҐЁҐ гб«®ўЁп "ЎгдҐа Ї®«®" ®§ з Ґв, зв® бЄ®а®бвм § -
ЇЁбЁ ЇаҐўлбЁ« бЄ®а®бвм з⥨п, ўлЇ®«ҐЁҐ гб«®ўЁп "ЎгдҐа Їгбв"
- 28 -
®§ з Ґв, зв® бЄ®а®бвм звҐЁп ўлиҐ бЄ®а®бвЁ § ЇЁбЁ. ‚ ®а¬ «м®¬
б®бв®пЁЁ § 票Ґ Ё¤ҐЄб § ЇЁбЁ Ґ¬®Ј® ЇаҐўли Ґв § 票Ґ Ё-
¤ҐЄб з⥨п, зв® Ё««обваЁагҐвбп б«Ґ¤гойЁ¬ аЁбгЄ®¬:
ЪДДДДДДДДДДДДДДДДДДї
і і
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і ДДДДДДДДД> Out з⥨Ґ
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і (‘«Ґ¤го饥 з⥨Ґ)
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і
ГДДДДДДДДДДДДДДДДДДґ
‡ ЇЁбм in ДДДДДД> і і
ГДДДДДДДДДДДДДДДДДДґ
(‘«Ґ¤гой п § ЇЁбм) і і
АДДДДДДДДДДДДДДДДДДЩ
ЋЎлз® ЎгдҐа а бб¬ ваЁў Ґвбп Є Є Є®«м楢®©, в. Ґ. Ї®б«Ґ § -
ЇЁбЁ ў Ї®б«Ґ¤оо п祩Єг ЎгдҐа § ЇЁбм Їа®¤®«¦ Ґвбп б ЇҐаў®© п祩-
ЄЁ, з⥨Ґ ®бгйҐбвў«пҐвбп «®ЈЁз®.
‘Ёеа®Ё§ жЁп § ЇЁбЁ Ё з⥨п ॠ«Ё§гҐвбп ЁбЇ®«м§®ў ЁҐ¬
®зҐаҐ¤Ґ© ®¦Ё¤ Ёп ¤ўге ўЁ¤®ў:
- ®зҐаҐ¤Ё Їа®жҐбб®ў, ¦¤гйЁе § ЇЁбЁ, Є®Ј¤ ЎгдҐа Ї®«®;
- ®зҐаҐ¤Ё Їа®жҐбб®ў, ¦¤гйЁе з⥨п, Є®Ј¤ ЎгдҐа Їгбв.
я2ЋЇЁб ЁҐ ЎгдҐа
ЏаҐ¤бв ўЁ¬ ЎгдҐа ў ўЁ¤Ґ ®ЎкҐЄв :
TBuffer = Object
in, out : [0..N-1];
n : [0..N];
Buf : Array[0..N-1] Of AnyType;
ReadList, WriteList : TList;
Constructor Init;
Destructor Done; Virtual;
Procedure Write(M : AnyType);
Procedure Read(Var M : AnyType);
Procedure Wait_Read;
Procedure Signal_Read;
Procedure Wait_Write;
- 29 -
Procedure Signal_Write;
End {TBuffer}.
Constructor TBuffer.Init;
Begin
in := 0; out := 0; n := 0;
ReadList.Init;
WriteList.Init;
End {TBuffer.Init};
Destructor TBuffer.Done;
Begin
ReadList.Done;
WriteList.Done;
End {TBuffer.Done};
‘Ёеа®Ё§ жЁп § ЇЁбЁ Ё з⥨п ॠ«Ё§гҐвбп б«Ґ¤гойЁ¬Ё зҐвлам-
¬п ¬Ґв®¤ ¬Ё ®ЎкҐЄв - ЎгдҐа .
Procedure TBuffer.Wait_Read;
{§ бв ў«пҐв Їа®жҐбб ¦¤ вм з⥨п, Ґб«Ё ЎгдҐа Їгбв®©}
Var
ЏаҐ¤л¤гйЁ© : Џа®жҐбб;
Begin
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
ReadList.‚Є«озЁвм(ЏаҐ¤л¤гйЁ©);
’ҐЄгйЁ© := ЋзҐаҐ¤м_Ј®в®ўле.ЏҐаўл©;
ЋзҐаҐ¤м_Ј®в®ўле.€§ў«Ґзм(’ҐЄгйЁ©);
ЏҐаҐ¤ вм_гЇа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
End {TBuffer.Wait_Read};
Procedure TBuffer.Wait_Write;
{§ бв ў«пҐв Їа®жҐбб ¦¤ вм § ЇЁбЁ, Ґб«Ё ЎгдҐа Ї®«л©}
Var
ЏаҐ¤л¤гйЁ© : Џа®жҐбб;
Begin
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
WriteList.‚Є«озЁвм(ЏаҐ¤л¤гйЁ©);
’ҐЄгйЁ© := ЋзҐаҐаҐ¤м_Ј®в®ўле.ЏҐаўл©;
ЋзҐаҐ¤м_Ј®в®ўле.€§ў«Ґзм(’ҐЄгйЁ©);
ЏҐаҐ¤ вм_гЇа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
End {TBuffer.Wait_Write};
Procedure TBuffer.Signal_Read;
{"бЁЈ «Ё§ЁагҐв" ® ⮬, зв® Їа®Ё§ўҐ¤Ґ § ЇЁбм Ё ў®§¬®¦ ЄвЁўЁ-
- 30 -
§ жЁп ®¤®Ј® Ё§ Їа®жҐбб®ў, ¦¤гйЁе з⥨п}
Var
‹®Є «мл© : Џа®жҐбб;
Begin
‹®Є «мл© := ReadList.ЏҐаўл©;
If ‹®Є «мл© <> NIL Then Begin {®зҐаҐ¤м Ґ Їгбв п}
ReadList.€§ў«Ґзм(‹®Є «мл©);
ЋзҐаҐ¤м_Ј®в®ўле.‚Є«озЁвм(‹®Є «мл©);
End {If};
End {TBuffer.Signal_Read}.
Procedure TBuffer.Signal_Write;
{"бЁЈ «Ё§ЁагҐв" ® ⮬, зв® Їа®Ё§ўҐ¤Ґ® з⥨Ґ Ё ў®§¬®¦ ЄвЁўЁ-
§ жЁп ®¤®Ј® Ё§ Їа®жҐбб®ў, ¦¤гйЁе § ЇЁбЁ}
Var
‹®Є «мл© : Џа®жҐбб;
Begin
‹®Є «мл© := WriteList.ЏҐаўл©;
If ‹®Є «мл© <> NIL Then Begin {®зҐаҐ¤м Ґ Їгбв п}
WriteList.€§ў«Ґзм(‹®Є «мл©);
ЋзҐаҐ¤м_Ј®в®ўле.‚Є«озЁвм(‹®Є «мл©);
End {If};
End {TBuffer.Signal_Write}.
Procedure TBuffer.Write(M : AnyType);
Begin
‡ ЇаҐвЁвм ЇаҐалў Ёп;
If n = N Then Wait_Write; {ЎгдҐа Ї®«л©}
n := n + 1;
Buf[in] := M;
in := (in + 1) MOD N;
Signal_Read;
ђ §аҐиЁвм ЇаҐалў Ёп;
End {TBuffer.Write};
Procedure TBuffer.Read(Var M : AnyType);
Begin
‡ ЇаҐвЁвм ЇаҐалў Ёп;
If n = 0 Then Wait_Read; {ЎгдҐа Їгбв®©}
n := n - 1;
Њ := Buf[out];
out := (out + 1) MOD N;
- 31 -
Signal_Write;
ђ §аҐиЁвм ЇаҐалў Ёп;
End {TBuffer.Read};
‚ ¬Ґв®¤ е Signal_Read Ё Signal_Write гЇа ў«ҐЁҐ Ґ ЇҐаҐ¤ Ґв-
бп ЄвЁўЁ§ЁагҐ¬л¬ Їа®жҐбб ¬, ®Ё «Ёим бв ўпвбп ў ®зҐаҐ¤м Ј®в®-
ўле Їа®жҐбб®ў. ќв® ¬®¦Ґв Ї®а®¤Ёвм Ґ®ЇаҐ¤Ґ«Ґ®бвм, в Є Є Є ҐЁ§-
ўҐбв®, зв® Ўг¤Ґв б ЎгдҐа®¬, Є®Ј¤ ¤® Ёе ўлЇ®«ҐЁп ¤®©¤Ґв ®зҐ-
।м. Џ®н⮬㠪⨢Ё§ жЁо Їа®жҐбб®ў «гзиҐ ўлЇ®«пвм Ґ ¤® ўЄ«озҐ-
Ёп ў ®зҐаҐ¤м Ј®в®ўле Їа®жҐбб®ў, ¤® ЇҐаҐ¤ зЁ гЇа ў«ҐЁп ЄвЁўЁ-
§Ёа㥬®¬г Їа®жҐббг. ЊҐв®¤ Signal_Read ¤«п нв®Ј® б«гз п ЇаҐ¤бв ў-
«Ґ Ё¦Ґ, ¬Ґв®¤ Signal_Write ॠ«Ё§гҐвбп «®ЈЁз®.
Procedure TBuffer.Signal_Read;
Var
ЏаҐ¤л¤гйЁ©, ‹®Є «мл© : Џа®жҐбб;
Begin
‹®Є «мл© := ReadList.ЏҐаўл©;
If ‹®Є «мл© <> NIL Then Begin {®зҐаҐ¤м Ґ Їгбв п}
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
’ҐЄгйЁ© := ‹®Є «мл©;
ReadList.€§ў«Ґзм(‹®Є «мл©);
ЋзҐаҐ¤м_Ј®в®ўле.‚Є«озЁвм(ЏаҐ¤л¤гйЁ©);
ЏҐаҐ¤ вм_гЇа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
End {If};
End {TBuffer.Signal_Read}.
я2‡ ¤ ЁҐ
1. ђҐ «Ё§®ў вм ®ЎкҐЄв - ЎгдҐа ў ЎЁЎ«Ё®вҐз®¬ ¬®¤г«Ґ ¤«п Ґ-
Є®в®а®Ј® вЁЇ ЇҐаҐ¤ ў Ґ¬ле ¤ ле.
2. Ќ ЇЁб вм ¤Ґ¬®бва жЁ®го Їа®Ја ¬¬г, Ё««обваЁагойго а Ў®-
вг ЎгдҐа ЇаЁ а §«Ёзле бЄ®а®бвпе § ЇЁбЁ Ё з⥨п б®®ЎйҐЁ©. ‘Є®-
а®бвЁ § ЇЁбЁ Ё звҐЁп ¬®¦® ¬Ґпвм Їг⥬ Ё§¬ҐҐЁп Є®«ЁзҐбвў
Їа®жҐбб®ў, ЇЁигйЁе ў ЎгдҐа Ё«Ё зЁв ойЁе Ё§ ҐЈ®, Ё«Ё ўЄ«оз п ®ЇҐ-
а в®ал § ¤Ґа¦ЄЁ ¬Ґ¦¤г б«Ґ¤гойЁ¬Ё ¤Ґ©бвўЁп¬Ё:
- Ї®а®¦¤ҐЁҐ¬ б®®ЎйҐЁп Ё § ЇЁбмо ҐЈ® ў ЎгдҐа;
- з⥨Ґ¬ б®®ЎйҐЁп Ё§ ЎгдҐа Ё ®Ўа Ў®вЄ®© б®®ЎйҐЁп.
я1ЋвзҐв ¤®«¦Ґ ᮤҐа¦ вмя0 ⥪бв Їа®Ја ¬¬л б Є®¬¬Ґв аЁп¬Ё Ё
ЎЁЎ«Ё®вҐзл© ¬®¤г«м б ॠ«Ё§ жЁҐ© ЎгдҐа .
- 32 -
я2‹ Ў®а в®а п а Ў®в 7
я2€‘‘‹…„Ћ‚ЂЌ€… Њ…’Ћ„Ђ ‚‡Ђ€ЊЋ„…‰‘’‚€џ ЏђЋ–…‘‘Ћ‚ ‘ ЏЋЊЋ™њћ
я2Ћ—…ђ…„…‰ ‘ЋЋЃ™…Ќ€‰
я1–Ґ«м а Ў®вля0 - Ё§г票Ґ ¬Ґв®¤®ў ў§ Ё¬®¤Ґ©бвўЁп Їа®жҐбб®ў б
Ї®¬®ймо ®зҐаҐ¤Ґ© б®®ЎйҐЁ©.
я2ЋЎйЁҐ ᢥ¤ҐЁп
ЋЎ¬Ґ б®®ЎйҐЁп¬Ё ¬Ґ¦¤г Їа®жҐбб ¬Ё ®б®ўҐ ЎгдҐа , а бб-
¬®ваҐл© ў « Ў®а в®а®© а Ў®вҐ 6, ®Ў« ¤ Ґв а冷¬ Ґ¤®бв вЄ®ў,
Ё¬Ґ®:
- ®Ја ЁзҐ® (а §¬Ґа®¬ ЎгдҐа ) Є®«ЁзҐбвў® б®®ЎйҐЁ©, Ї®¬Ґй -
Ґ¬ле ў ЎгдҐа;
- б®®ЎйҐЁп ЇҐаҐЇЁблў овбп ў ЎгдҐа Ё зЁв овбп Ё§ ЎгдҐа , в -
ЄЁ¬ ®Ўа §®¬ ўаҐ¬Ґ § ЇЁбЁ Ё звҐЁп ®ЇаҐ¤Ґ«повбп вЁЇ®¬ (а §¬Ґа®¬)
б®®ЎйҐЁп Ё ¬®Јгв Ўлвм Ў®«миЁ¬Ё.
Џ®н⮬㠢 а拉 ®ЇҐа жЁ®ле б।, Ё¬Ґ®: UNIX, OS/2 бг-
йҐбвўгҐв ¤агЈ®Ґ б।бвў® ®Ў¬Ґ б®®ЎйҐЁп¬Ё, §лў Ґ¬®Ґ ®зҐаҐ¤мо
б®®ЎйҐЁ© Ё ўЄ«оз о饥 Єа®¬Ґ ҐҐ ҐйҐ Ё б।бвў бЁеа®Ё§ жЁЁ § -
ЇЁбЁ Ё з⥨п.
‚ Є зҐб⢥ Ї®б«Ґ¤Ёе ўлбвгЇ ов ®зҐаҐ¤Ё Їа®жҐбб®ў, Ї®б« ўиЁе
б®®ЎйҐЁҐ Ё ¦¤гйЁе ҐЈ®.
„ ¤Ё¬ б«®ўҐб®Ґ ®ЇЁб ЁҐ ¬Ґв®¤®ў § ЇЁбЁ Ё з⥨п б®®ЎйҐЁп,
§ ⥬ ®ЇЁиҐ¬ ¤ ®Ґ б।бвў® ®Ў¬Ґ б®®ЎйҐЁп¬Ё Є Є ®ЎкҐЄв ®ЇҐ-
а жЁ®®© б।л.
‡ ЇЁбм б®®ЎйҐЁп ўЄ«оз Ґв ў ᥡп б«Ґ¤гойЁҐ ¤Ґ©бвўЁп:
- ўЄ«о票Ґ гЄ § ⥫п б®®ЎйҐЁҐ ў ®зҐаҐ¤м (®Ўа вЁ¬ ўЁ¬ -
ЁҐ, зв® Ё¬Ґ® гЄ § вҐ«м Ї®¬Ґй Ґвбп ў ®зҐаҐ¤м, Ґ б ¬® б®®ЎйҐ-
ЁҐ, зв® бгйҐб⢥® Ї®ўли Ґв бЄ®а®бвм ®Ў¬Ґ );
- ўЄ«о票Ґ Їа®жҐбб , Ї®б« ўиҐЈ® б®®ЎйҐЁҐ ў ®зҐаҐ¤м, ⥬
б ¬л¬ Їа®жҐбб, Ї®б« ўиЁ© б®®ЎйҐЁҐ, Ў«®ЄЁагҐвбп ¤® ¬®¬Ґв з⥨п
ҐЈ® ¤агЈЁ¬ Їа®жҐбᮬ;
- ЄвЁўЁ§ жЁо Їа®жҐбб , ¦¤г饣® б®®ЎйҐЁп, Ґб«Ё в Є®ў®© Ё¬Ґ-
Ґвбп.
—⥨Ґ б®®ЎйҐЁп ўЄ«оз Ґв ў ᥡп б«Ґ¤гойЁҐ ¤Ґ©бвўЁп:
- Ў«®ЄЁа®ўЄг Їа®жҐбб Їг⥬ Ї®бв ®ўЄЁ ҐЈ® ў ®зҐаҐ¤м, Ґб«Ё
б®®ЎйҐЁп ®вбгвбвўгов;
- з⥨Ґ б®®ЎйҐЁп, Ґб«Ё ®® Ї®бвгЇЁ«®;
- 33 -
- ЄвЁўЁ§ жЁо Їа®жҐбб , Ї®б« ўиҐЈ® б®®ЎйҐЁҐ.
’ ЄЁ¬ ®Ўа §®¬, Їа®жҐбб, Ї®б« ўиЁ© б®®ЎйҐЁҐ, ў®§®Ў®ўЁв бў®Ґ
ўлЇ®«ҐЁҐ в®«мЄ® Ї®б«Ґ в®Ј®, Є Є ҐЈ® б®®ЎйҐЁҐ Ўг¤Ґв Їа®зЁв ®
¤агЈЁ¬ Їа®жҐбᮬ.
‘奬 вЁз® ў§ Ё¬®¤Ґ©бвўЁп Їа®жҐбб®ў ¤«п б«гз Ґў, Є®Ј¤ ®Ўа -
饨Ґ ®¤®Ј® Їа®жҐбб Є ЇаЁ¬ЁвЁўг § ЇЁбЁ б®®ЎйҐЁп Їа®Ёб室Ёв
а миҐ ®Ўа йҐЁп ¤агЈ®Ј® Їа®жҐбб Є ЇаЁ¬ЁвЁўг з⥨п, Ё ®Ў®а®в,
ЇаҐ¤бв ў«Ґл аЁб. 7.1 Ё 7.2.
Џа®жҐбб 1 Џа®жҐбб 2
ЪДДДДДДБДДДДДДї і
і ‡ ЇЁбм і і
АДДДДДДВДДДДДДЩ і
іЋ¦Ё¤ ЁҐ і
ЪДДДДДДБДДДДДДї ЪДДДДДДДБДДДДДДДї
і‚®§®Ў®ў«ҐЁҐі і —⥨Ґ і
АДДДДДДВДДДДДДЩ---------------------------------АДДДДДДДВДДДДДДДЩ
ђЁб.7.1. Џа®жҐбб 1 Ї®¤®иҐ« Є ЇаЁ¬ЁвЁўг § ЇЁбЁ а миҐ, 祬
Їа®жҐбб 2 Ї®¤®иҐ« Є ЇаЁ¬ЁвЁўг з⥨п
Џа®жҐбб 1 Џа®жҐбб 2
і ЪДДДДДДБДДДДДДї
і іЌ з «® з⥨пі
і АДДДДДДВДДДДДДЩ
і Ћ¦Ё¤ ЁҐ і
ЪДДДДДДДБДДДДДДДї ЪДДДДДДБДДДДДДї
і ‡ ЇЁбм і іЉ®Ґж з⥨пі
АДДДДДДДВДДДДДДДЩ---------------------------------АДДДДДДВДДДДДДЩ
ђЁб.7.2. Џа®жҐбб 1 Ї®¤®иҐ« Є ЇаЁ¬ЁвЁўг § ЇЁбЁ Ї®§¦Ґ, 祬
Їа®жҐбб 2 Ї®¤®иҐ« Є ЇаЁ¬ЁвЁўг з⥨п
‘।бвў® ®Ў¬Ґ б®®ЎйҐЁп¬Ё, 㤮ў«Ґвў®апо饥 ЇаЁўҐ¤Ґ®¬г
ўлиҐ ®ЇЁб Ёо, ¬®¦Ґв Ўлвм ЇаҐ¤бв ў«Ґ® б«Ґ¤гойЁ¬ ®Ўа §®¬:
’PostBox = Object
MessageList : TMessageList;{®зҐаҐ¤м гЄ § ⥫Ґ© б®®ЎйҐЁп}
SendProcList : TList;{®зҐаҐ¤м Їа®жҐбб®ў, Ї®б« ўиЁе б®®ЎйҐЁп}
WaitProcList : TList; {®зҐаҐ¤м Їа®жҐбб®ў. ¦¤гйЁе б®®ЎйҐЁҐ}
Constructor Init;
Destructor Done; Virtual;
Procedure PutMsg(M : Pointer); {Ї®б« вм б®®ЎйҐЁҐ}
- 34 -
Function GetMsg : Pointer; {ЇаЁпвм б®®ЎйҐЁҐ}
End {TPostBox}.
ЋзҐаҐ¤м гЄ § ⥫Ґ© б®®ЎйҐЁп Ё¬ҐҐв ¬Ґв®¤л, ®зҐм Ї®е®¦ЁҐ
¬Ґв®¤л Їа®жҐбб®ў, § ЁбЄ«о票Ґ¬ в®Ј®, зв® ®ЇҐаЁагҐв б вЁЇ®¬
¤ ле Pointer, Ґ б вЁЇ®¬ ¤ ле Џа®жҐбб.
Constructor TPostBox.Init;
Begin
MessageList.Init;
SendProcList.Init;
WaitProcList.Init;
End {TPostBox.Init};
Destructor TPostBox.Done;
Begin
MessageList.Done;
SendProcList.Done;
WaitProcList.Done;
End {TPostBox.Done};
Procedure TPostBox.PutMsg(M : Pointer);
Var
ЏаҐ¤л¤гйЁ© : Џа®жҐбб;
Begin
‡ ЇаҐвЁвм_ЇаҐалў Ёп;
MessageList.Insert(M);
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
SendProcList.Insert(ЏаҐ¤л¤гйЁ©);
If WaitProcList.ЏҐаўл© <> NIL Then Begin
’ҐЄгйЁ© := WaitProcList.ЏҐаўл©;
WaitProcList.Remove(’ҐЄгйЁ©);
End Else Begin
’ҐЄгйЁ© := Readylist.ЏҐаўл©;
Readylist.Remove(’ҐЄгйЁ©);
End {If};
ЏҐаҐ¤ вм_гЇа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
ђ §аҐиЁвм_ЇаҐалў Ёп;
End {TPostBox.PutMsg};
Function TPostBox.GetMsg : Pointer;
Var
M : Pointer;
- 35 -
S : Џа®жҐбб;
ЏаҐ¤л¤гйЁ© : Џа®жҐбб;
Begin
‡ ЇаҐвЁвм_ЇаҐалў Ёп;
If MessageList.ЏҐаўл© = NIL Then Begin
ЏаҐ¤л¤гйЁ© := ’ҐЄгйЁ©;
WaitProcList.Insert(ЏаҐ¤л¤гйЁ©);
’ҐЄгйЁ© := Readylist.ЏҐаўл©;
Readylist.Remove(’ҐЄгйЁ©);
ЏҐаҐ¤ вм_гЇа ў«ҐЁҐ(ЏаҐ¤л¤гйЁ©, ’ҐЄгйЁ©);
‡ ЇаҐвЁвм_ЇаҐалў Ёп;
End {If};
M := MessageList.ЏҐаўл©;
MessageList.Remove(M);
GetMsg := M;
S := SendProcList.ЏҐаўл©;
SendProcList.Remove(S);
Readylist.Insert(S);
ђ §аҐиЁвм_ЇаҐалў Ёп;
End {TPostBox.GetMsg}.
ЏаҐ¤бв ў«Ґл© ®ЎкҐЄв «Ёим ¬®¤Ґ«ЁагҐв ў б।Ґ MS DOS а Ў®вг
®зҐаҐ¤Ґ© б®®ЎйҐЁ©, ॠ«Ё§®ў ле ў бЁб⥬ е UNIX Ё OS/2, ®¤ Є®
¤ Ґв ЇаҐ¤бв ў«ҐЁҐ ® Їгвпе аҐиҐЁп § ¤ зЁ бЁеа®Ё§ жЁЁ § ЇЁбЁ Ё
з⥨п б®®ЎйҐЁ© а §л¬Ё Їа®жҐбб ¬Ё.
‘ в®зЄЁ §аҐЁп бЁеа®Ё§ жЁЁ § ЇЁбЁ Ё з⥨п, б®бв®п饩 ў
⮬, зв® Їа®жҐббл ў®§®Ў®ў«пов а Ў®вг в®«мЄ® Ї®б«Ґ в®Ј®, Є Є § -
ЇЁбм Ё з⥨Ґ § ўҐаиҐл, ЇаҐ¤бв ў«Ґл© ®ЎкҐЄв Ї®е®¦ ¬Ґе Ё§¬
ђ ¤Ґўг п§лЄ ॠ«м®Ј® ўаҐ¬ҐЁ Ђ¤ .
я2‡ ¤ ЁҐ
1. ђҐ «Ё§®ў вм ®ЎкҐЄв TPostBox б।бвў ¬Ё п§лЄ Pascal.
2. Џа®Є®¬¬ҐвЁа®ў вм Є ¦¤го бва®зЄг ®ЎкҐЄв TPostBox.
3. Ќ ЇЁб вм ¤Ґ¬®бва жЁ®го Їа®Ја ¬¬г, Ё««обваЁагойго дгЄ-
жЁ®Ёа®ў ЁҐ ®ЎкҐЄв TPostBox.
я1ЋвзҐв ¤®«¦Ґ ᮤҐа¦ вмя0 ⥪бв Їа®Ја ¬¬л б Є®¬¬Ґв аЁп¬Ё Ё
ЎЁЎ«Ё®вҐзл© ¬®¤г«м б ॠ«Ё§ жЁҐ© ®зҐаҐ¤Ё б®®ЎйҐЁ©.
я2‘®¤Ґа¦ ЁҐ
‹ Ў®а в®а п а Ў®в 1. €‡“—…Ќ€… Ђ‹ѓЋђ€’ЊЋ‚ ђ…Ђ‹€‡Ђ–€€ € €‘-
ЏЋ‹њ‡Ћ‚ЂЌ€џ ‘ЋЏђЋѓђЂЊЊ .........................................3
‹ Ў®а в®а п а Ў®в 2. €‘‘‹…„Ћ‚ЂЌ€… Џђ€Ќ–€ЏЋ‚ „€‘Џ…’—…ђ€‡Ђ-
–€€ ЏђЋ–…‘‘Ћ‚ ..................................................6
‹ Ў®а в®а п а Ў®в 3. €‘‘‹…„Ћ‚ЂЌ€… Џђ€Ќ–€ЏЋ‚ ђ…Ђ‹€‡Ђ–€€
ЏђЋ–…‘‘Ћ‚ € Ћ—…ђ…„…‰ ЊЌЋѓЋ‡Ђ„Ђ—ЌЋѓЋ џ„ђЂ .......................9
‹ Ў®а в®а п а Ў®в 4. €‘‘‹…„Ћ‚ЂЌ€… ‘€‘’…ЊЌ›• Ћ—…ђ…„…‰ ЊЌЋ-
ѓЋ‡Ђ„Ђ—ЌЋѓЋ џ„ђЂ...............................................15
‹ Ў®а в®а п а Ў®в 5. €‘‘‹…„Ћ‚ЂЌ€… Њ…’Ћ„Ћ‚ ‘€Ќ•ђЋЌ€‡Ђ–€€
ЏђЋ–…‘‘Ћ‚ .....................................................19
‹ Ў®а в®а п а Ў®в 6. €‘‘‹…„Ћ‚ЂЌ€… Њ…’Ћ„Ћ‚ Ѓ“”…ђ€‡Ђ–€€ ‘Ћ-
ЋЃ™…Ќ€‰ .......................................................27
‹ Ў®а в®а п а Ў®в 7. €‘‘‹…„Ћ‚ЂЌ€… Њ…’Ћ„Ђ ‚‡Ђ€ЊЋ„…‰‘’‚€џ
ЏђЋ–…‘‘Ћ‚ ‘ ЏЋЊЋ™њћ Ћ—…ђ…„…‰ ‘ЋЋЃ™…Ќ€‰.........................32
ђҐ¤ Єв®а ќ.Љ.„®«Ј в®ў
‹ЁжҐ§Ёп ‹ђ N 020617 ®в 10.08.92
____________________________________________________________
Џ®¤ЇЁб ® ў ЇҐз вм . .97. ”®а¬ в 60е84 1/16. Ѓг¬ Ј вЁЇ.N2.
ЏҐз вм ®дбҐв п. “б«.ЇҐз.«. 2,09. “з.-Ё§¤.«. 2,25.
’Ёа ¦ 65 нЄ§. ‡ Є §
€§¤ ⥫мбЄ®-Ї®«ЁЈа дЁзҐбЄЁ© жҐва ѓќ’“
_____________________________________________________________
197376, ‘.-ЏҐвҐаЎгаЈ, г«.Џа®д.Џ®Ї®ў , 5
Соседние файлы в предмете Операционные системы