Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВстраиваСмыС систСмы. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… сСмСйства 68HC12/HCS12 с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ языка Π‘Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 128

Автор Π‘Ρ‚ΠΈΠ²Π΅Π½ Π‘Π°Ρ€Ρ€Π΅Ρ‚Ρ‚

 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. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π·Π°Π΄Π°Ρ‡Π°?

Π—Π°Π΄Π°Ρ‡Π° β€” это нСзависимоС, асинхронноС дСйствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выполняСтся систСмой ΠžΠ‘Π Π’. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π°Π΄Π°Ρ‡ΠΈ асинхронны, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠ³Π°Π΄Π°Ρ‚ΡŒ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. КаТдая Π·Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ малСнькая, нСзависимая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая выполняСт спСцифичСскоС дСйствиС. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ нСсколько Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π·Π° использованиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ процСссора, Π·Π°Π΄Π°Ρ‡Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ контСкст (ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ значСния рСгистров, счСтчик ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ Ρ‚.Π΄.). Π­Ρ‚Π° информация рСзСрвируСтся Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ выполнСния Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, каТдая Π·Π°Π΄Π°Ρ‡Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ свой стСк для сохранСния контСкста. Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΡ€Π΅Ρ€Π²Π°Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС, Π΅Π³ΠΎ планируСтся Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ·Π΄Π½Π΅Π΅.