initialize_stack(stack1);
response = stack_empty(stack1); /*Π²ΡΠ·ΠΎΠ² ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ */
response = stack_full(stack1);
print_stack(stack1);
push(&stack1, 11); /*Π²ΡΠ·ΠΎΠ² ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ */
push(&stack1, 12);
push(&stack1, 13);
push{&stack1, 14);
print_stack(stack1);
pull(&stack1);
pull(&stack1);
pull(&stack1);
pull(&stack1);
pull(&stack1);
fclose(outputfile); /*Π·Π°ΠΊΡΡΡΡ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» */
}
/********************************************************************/
/*initialize_stack: ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π² 0 */
/********************************************************************/
void initialize_stack(stack a_stack) {
a_stack.stack_top=0; /*ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ° Π² 0*/
}
/********************************************************************/
/*stack_empty: Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΠ Π΅ΡΠ»ΠΈ ΡΡΠ΅ΠΊ ΠΏΡΡΡ, ΠΈ ΠΠΠ’ Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ */
/********************************************************************/
int stack_empty(stack a_stack) {
fprintf(outputfile, "\n\nStack top: %d", a_stack.stack_top);
if (a_stack.stack_top == 0) /*ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π΅ ΠΏΡΡΡ Π»ΠΈ ΡΡΠ΅ΠΊ*/
{
fprintf(outputfile, "\nStack Empty!");
return YES;
} else {
fprintf(outputfile, "\nStack is not empty.");
return NO;
}
}
/********************************************************************/
/*stack_full: Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΠ Π΅ΡΠ»ΠΈ ΡΡΠ΅ΠΊ ΠΏΠΎΠ»ΠΎΠ½, ΠΈ ΠΠΠ’ Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ */
/********************************************************************/
int stack_full(stack a_stack) {
if (a_stack.stack_top == 10) /*ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ Π»ΠΈ ΡΡΠ΅ΠΊ */
{ /*ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ Π²ΡΠ±ΠΎΡ ΠΏΡΠ΅Π΄Π΅Π»Π° ΡΡΠ΅ΠΊΠ° */
fprintf(outputfile, "\n\nStack Full!");
return YES;
} else {
fprintf(outputfile, "\n\nStack is not full.");
return NO;
}
}
/********************************************************************/
/*print_stack: ΠΏΠ΅ΡΠ°ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° (Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ°) */
/********************************************************************/
void print_stack(stack a_stack) {
int i;
if (!(stack_empty(a_stack)))/*ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π΅ ΠΏΡΡΡ Π»ΠΈ ΡΡΠ΅ΠΊ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ°ΡΡΡ*/
{ /*ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ΅ΠΊΠ° ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ°ΡΡΡ */
for(i = a_stack.stack_top; i>=0; i=i-1)
fprintf(outputfile, "\nStack item: %d", a_stack.stack_item[i]);
} else fprintf(outputfile,"\nCannot print - stack is empty!");
}
/********************************************************************/
/*push(stack *, int): Π·Π°ΠΏΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΡΡΠ΅ΠΊ */
/********************************************************************/
void push(stack *a_stack, int item) {
fprintf(outputfile, "\n\nBefore push - stack pointer: %d",
a_stack->stack_top);
if (!(stack_full(*a_stack))) /*ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ°*/
/* ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΠΈΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°*/
{
a_stack->stack_item[a_stack->stack_top] = item;
fprintf(outputfile, "\nstack item after push: %d",
a_stack->stack_item[a_stack->stack_top]);
a_stack->stack_top = a_stack->stack_top + 1;
fprintf(outputfile, "\nstacktop after push: %d",
a_stack->stack_top);
} else fprintf(outputfile, "\nCannot push - stack is full!");
}
/********************************************************************/
/*pull(stack *): ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΠ· ΡΡΠ΅ΠΊΠ° */
/********************************************************************/
int pull(stack *a_stack) {
int item;
fprintf(outputfile,"\n\nBefore pull - stack pointer: %d",
a_stack->stack_top);
if (!(stack_empty(*a_stack))) /*ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π΅ ΠΏΡΡΡ Π»ΠΈ ΡΡΠ΅ΠΊ */
/*ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°*/
{
item = a_stack->stack_item[a_stack->stack_top-1];
fprintf(outputfile, "\nstack item pulled: %d", item);
a_stack->stack_top = a_stack->stack_top - 1;
fprintf(outputfile,"\nstacktop after pull: %d",
a_stack->stack_top); return item;
} else fprintf(outputfile, "\nCannot pull - stack is empty!");
}
/********************************************************************/
ΠΡ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π° ΡΠΈΡ. 8.12. ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ΄Π°Π½ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
Π ΠΈΡ. 8.12. ΠΠ°ΠΏΠΈΡΡ Π² ΡΡΠ΅ΠΊ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΠΊΠ°
Stack top: 0
Stack Empty!
Stack is not full.
Stack top: 0
Stack Empty!
Cannot print - stack is empty!
Before push - stack pointer: 0
Stack is not full.
stack item after push: 11
stacktop after push: 1
Before push - stack pointer: 1
Stack is not full.
stack item after push: 12
stacktop after push: 2
Before push - stack pointer: 2
Stack is not full.
stack item after push: 13
stacktop after push: 3
Before push - stack pointer: 3
Stack is not full.
stack item after push: 14
stacktop after push: 4
Stack top: 4
Stack is not empty.
Stack item: 0
Stack item: 14
Stack item: 13
Stack item: 12
Stack item: 11
Before pull - stack pointer: 4
Stack top: 4
Stack is not empty
stack item pulled: 14
stacktop after pull: 3
Before pull - stack pointer: 3
Stack top: 3
Stack is not empty.
stack item pulled: 13
stacktop after pull: 2
Before pull - stack pointer: 2
Stack top: 2
Stack is not empty,
stack item pulled: 12
stacktop after pull: 1
Before pull - stack pointer: 1
Stack top: 1
Stack is not empty.
stack item pulled: 11
stacktop after pull: 0
Before pull - stack pointer: 0
Stack top: 0
Stack Empty!
Cannot pull - stack is empty!
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅ΠΊΠΎΠ². ΠΠ±ΡΡΠ½ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΈΠΊΡΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ΄ΠΈΠ½ ΡΡΠ΅ΠΊ. ΠΡΠΎΡ ΡΡΠ΅ΠΊ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠΈ RAM, ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ° (LDS), Π·Π°ΠΏΠΈΡΠΈ Π΄Π°Π½Π½ΡΡ (PUSH), ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° (PULL) ΠΈ Ρ.Π΄. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠΆΠ΅ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π»ΠΈ Π² Π³Π»Π°Π²Π΅ 4, Π² ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π²ΡΡΡΠΎΠ΅Π½ ΡΠ΅Π»ΡΠΉ ΡΡΠ΄ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΡΡΠ΅ΠΊΠΎΠΌ, ΡΠ°ΠΊΠΈΡ , ΠΊΠ°ΠΊ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΈ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ². Π ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ Π±ΡΠ΄Π΅Ρ ΡΡΠ΅ΠΊ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅ΠΊΠΎΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΠΠ‘Π Π. Π ΡΡΠΈΡ ΡΠ»ΡΡΠ°ΡΡ , ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΎ ΡΡΠ΅ΠΊΠ΅, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ΅ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΡΠ΅ΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΎΠ±ΡΡΠ²ΠΈΠΌ.
ΠΠ° ΡΡΠΎΠΌ ΠΌΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΠΌ ΠΎΠ±Π·ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΡΠΌΠ΅ΡΡΠΈΡΡ Π°ΠΊΡΠ΅Π½ΡΡ ΠΈ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΠ‘Π Π Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅. ΠΡ ΡΠ°ΡΡΡΠ°Π΅ΠΌΡΡ Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΠΌΠΈ, ΡΡΠΎΠ±Ρ ΠΎΠΏΠΈΡΠ°ΡΡ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΠ‘Π Π.
8.4. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠΎΠ½ΡΡΠΈΡ
Π Π°Π½Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ ΡΠΊΠ°Π·Π°Π»ΠΈ, ΡΡΠΎ ΠΠ‘Π Π β ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ²ΠΎΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΏΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ ΡΠ΅ΡΡΡΡΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΠ°ΡΠ΅ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΠ‘Π Π Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ½ΡΡΠΈΡ Π·Π°Π΄Π°ΡΠΈ. ΠΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ°Π΄ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ (ΡΠ΄Π²ΠΈΠ³Π° ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ). ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ°Π³ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ. Π ΠΠ‘Π Π, Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ , Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ (ΠΌΠΎΠ³ΡΡΠΈΡ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π² Π»ΡΠ±ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ) Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΡ Π·Π°Π΄Π°Ρ. Π Π²ΡΠ΅ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΊΠΎΠ½ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π° Π΄ΡΠ°Π³ΠΎΡΠ΅Π½Π½ΠΎΠ΅ (ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅) Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ Π·Π°Π΄Π°ΡΠΈ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΈ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΡΡΡΡ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄Π°Ρ Π·Π°Π΄Π°ΡΠ° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄ΠΎΠ»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΡ Π½Π°ΡΠ½Π΅ΠΌ ΡΡΠΎΡ ΡΠ°Π·Π΄Π΅Π», Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Ρ ΠΎΡΠΎΡΠ΅Π³ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΏΠΎΠ΄ Π·Π°Π΄Π°ΡΠ΅ΠΉ ΠΈ ΠΊΠ°ΠΊ ΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π΅Π΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π±Π»ΠΎΠΊ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ (task control block β TCB). ΠΡ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΡΠ°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ Π±Π»ΠΎΠΊΠΎΠ² ΡΡΡΡΠΎΠΉΡΡΠ²Π°. ΠΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ ΡΠ»Π΅Π΄ΠΈΡ Π·Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ Π²ΡΠ΅Ρ Π·Π°Π΄Π°Ρ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊΠ°Ρ ΠΈΠ· Π·Π°Π΄Π°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ. Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΠ‘Π Π.
8.4.1. Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π·Π°Π΄Π°ΡΠ°?
ΠΠ°Π΄Π°ΡΠ° β ΡΡΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ΅, Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΠ‘Π Π. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π°Π΄Π°ΡΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Ρ, ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΠ³Π°Π΄Π°ΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ. ΠΠ°ΠΆΠ΄Π°Ρ Π·Π°Π΄Π°ΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΌΠ°Π»Π΅Π½ΡΠΊΠ°Ρ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°Π΄Π°Ρ, ΠΊΠΎΠ½ΠΊΡΡΠΈΡΡΡΡΠΈΡ Π·Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, Π·Π°Π΄Π°ΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ (ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ², ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈ Ρ.Π΄.). ΠΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΡΠ΅ΡΡΡ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΊΠ°ΠΆΠ΄Π°Ρ Π·Π°Π΄Π°ΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΉ ΡΡΠ΅ΠΊ Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΡΠ΅ΡΠ²Π°Π½ΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ, Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΡΠ΅ΡΠ΅, Π΅Π³ΠΎ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΠΏΠΎΠ·Π΄Π½Π΅Π΅.