SlideShare una empresa de Scribd logo
1 de 15
Descargar para leer sin conexión
11   8   21
11   8   21
void main1(int arg)      void main2(int arg)      void main3(int arg)

              {                        {                        {

                  printf("%d", arg);       printf("%d", arg);       printf("%d", arg);

                  printf("A");             task_change();           printf("G");

                  task_change();           printf("C");             task_change();

                  task_change();           task_change();           printf("H");

                  printf("B");             printf("D");             task_end();

              }                            task_change();           printf("I");

                                           printf("E");         }

                                           task_change();

                                           printf("F");

                                       }




11   8   21
void main1(int arg)      void main2(int arg)      void main3(int arg)

              {                        {                        {

                  printf("%d", arg);       printf("%d", arg);       printf("%d", arg);

                  printf("A");             task_change();           printf("G");

                  task_change();           printf("C");             task_change();

                  task_change();           task_change();           printf("H");

                  printf("B");             printf("D");             task_end();

              }                            task_change();           printf("I");

                                           printf("E");         }

                                           task_change();

                                           printf("F");

                                       }




11   8   21
void main1(int arg)      void main2(int arg)      void main3(int arg)

              {                        {                        {

                  printf("%d", arg);       printf("%d", arg);       printf("%d", arg);

                  printf("A");             task_change();           printf("G");

                  task_change();           printf("C");             task_change();

                  task_change();           task_change();           printf("H");

                  printf("B");             printf("D");             task_end();

              }                            task_change();           printf("I");

                                           printf("E");         }

                                           task_change();

                                           printf("F");

                                       }




11   8   21
void main1(int arg)      void main2(int arg)      void main3(int arg)

              {                        {                        {

                  printf("%d", arg);       printf("%d", arg);       printf("%d", arg);

                  printf("A");             task_change();           printf("G");

                  task_change();           printf("C");             task_change();

                  task_change();           task_change();           printf("H");

                  printf("B");             printf("D");             task_end();

              }                            task_change();           printf("I");

                                           printf("E");         }

                                           task_change();

                                           printf("F");

                                       }




11   8   21
void main1(int arg)      void main2(int arg)      void main3(int arg)

              {                        {                        {

                  printf("%d", arg);       printf("%d", arg);       printf("%d", arg);

                  printf("A");             task_change();           printf("G");

                  task_change();           printf("C");             task_change();

                  task_change();           task_change();           printf("H");

                  printf("B");             printf("D");             task_end();

              }                            task_change();           printf("I");

                                           printf("E");         }

                                           task_change();

                                           printf("F");

                                       }




11   8   21
void main1(int arg)      void main2(int arg)      void main3(int arg)

              {                        {                        {

                  printf("%d", arg);       printf("%d", arg);       printf("%d", arg);

                  printf("A");             task_change();           printf("G");

                  task_change();           printf("C");             task_change();

                  task_change();           task_change();           printf("H");

                  printf("B");             printf("D");             task_end();

              }                            task_change();           printf("I");

                                           printf("E");         }

                                           task_change();

                                           printf("F");

                                       }




11   8   21
func_t task_main[] = { main1, main2, main3 };

              void schedule()

              {

                  ...

                  for (i = 0; i < TASKNUM; i++) {

                    n = (n + 1) % TASKNUM;

                    current = &task[n];

                    ...




11   8   21
func_t task_main[] = { main1, main2, main3 };

              void schedule()

              {

                  ...

                  for (i = 0; i < TASKNUM; i++) {

                    n = (n + 1) % TASKNUM;

                    current = &task[n];

                    ...




11   8   21
func_t task_main[] = { main1, main2, main3 };

              void schedule()

              {

                  ...

                  for (i = 0; i < TASKNUM; i++) {

                    n = (n + 1) % TASKNUM;

                    current = &task[n];

                    ...




11   8   21
void task_create()

              { ...

               static int n = 0;

                if (n == TASKNUM)

                  schedule();

                ...

                if (setjmp(task[n].context))

                 task_start(n);

                n++;

                task_create();




11   8   21
void task_create()

              { ...

               static int n = 0;

                if (n == TASKNUM)

                  schedule();

                ...

                if (setjmp(task[n].context))

                 task_start(n);

                n++;

                task_create();




11   8   21
11   8   21
11   8   21

Más contenido relacionado

La actualidad más candente

Object Oriented Programing - Generic Programing
Object Oriented Programing - Generic ProgramingObject Oriented Programing - Generic Programing
Object Oriented Programing - Generic ProgramingBayu Firmawan Paoh
 
Javascrpt arale
Javascrpt araleJavascrpt arale
Javascrpt araleAlipay
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานknangsmiley
 
Clang-tidy: путешествие внутрь AST C++
Clang-tidy: путешествие внутрь AST C++Clang-tidy: путешествие внутрь AST C++
Clang-tidy: путешествие внутрь AST C++corehard_by
 
Program to remove Left factoring
Program to remove Left factoringProgram to remove Left factoring
Program to remove Left factoringShraddha Patel
 

La actualidad más candente (8)

Object Oriented Programing - Generic Programing
Object Oriented Programing - Generic ProgramingObject Oriented Programing - Generic Programing
Object Oriented Programing - Generic Programing
 
Javascrpt arale
Javascrpt araleJavascrpt arale
Javascrpt arale
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
 
Clang-tidy: путешествие внутрь AST C++
Clang-tidy: путешествие внутрь AST C++Clang-tidy: путешествие внутрь AST C++
Clang-tidy: путешествие внутрь AST C++
 
Gjuha paskal
Gjuha paskal Gjuha paskal
Gjuha paskal
 
Java Week7 Notepad
Java Week7   NotepadJava Week7   Notepad
Java Week7 Notepad
 
Passato
PassatoPassato
Passato
 
Program to remove Left factoring
Program to remove Left factoringProgram to remove Left factoring
Program to remove Left factoring
 

CTF問題解説 OSのタスク切換え

  • 1. 11 8 21
  • 2. 11 8 21
  • 3. void main1(int arg) void main2(int arg) void main3(int arg) { { { printf("%d", arg); printf("%d", arg); printf("%d", arg); printf("A"); task_change(); printf("G"); task_change(); printf("C"); task_change(); task_change(); task_change(); printf("H"); printf("B"); printf("D"); task_end(); } task_change(); printf("I"); printf("E"); } task_change(); printf("F"); } 11 8 21
  • 4. void main1(int arg) void main2(int arg) void main3(int arg) { { { printf("%d", arg); printf("%d", arg); printf("%d", arg); printf("A"); task_change(); printf("G"); task_change(); printf("C"); task_change(); task_change(); task_change(); printf("H"); printf("B"); printf("D"); task_end(); } task_change(); printf("I"); printf("E"); } task_change(); printf("F"); } 11 8 21
  • 5. void main1(int arg) void main2(int arg) void main3(int arg) { { { printf("%d", arg); printf("%d", arg); printf("%d", arg); printf("A"); task_change(); printf("G"); task_change(); printf("C"); task_change(); task_change(); task_change(); printf("H"); printf("B"); printf("D"); task_end(); } task_change(); printf("I"); printf("E"); } task_change(); printf("F"); } 11 8 21
  • 6. void main1(int arg) void main2(int arg) void main3(int arg) { { { printf("%d", arg); printf("%d", arg); printf("%d", arg); printf("A"); task_change(); printf("G"); task_change(); printf("C"); task_change(); task_change(); task_change(); printf("H"); printf("B"); printf("D"); task_end(); } task_change(); printf("I"); printf("E"); } task_change(); printf("F"); } 11 8 21
  • 7. void main1(int arg) void main2(int arg) void main3(int arg) { { { printf("%d", arg); printf("%d", arg); printf("%d", arg); printf("A"); task_change(); printf("G"); task_change(); printf("C"); task_change(); task_change(); task_change(); printf("H"); printf("B"); printf("D"); task_end(); } task_change(); printf("I"); printf("E"); } task_change(); printf("F"); } 11 8 21
  • 8. void main1(int arg) void main2(int arg) void main3(int arg) { { { printf("%d", arg); printf("%d", arg); printf("%d", arg); printf("A"); task_change(); printf("G"); task_change(); printf("C"); task_change(); task_change(); task_change(); printf("H"); printf("B"); printf("D"); task_end(); } task_change(); printf("I"); printf("E"); } task_change(); printf("F"); } 11 8 21
  • 9. func_t task_main[] = { main1, main2, main3 }; void schedule() { ... for (i = 0; i < TASKNUM; i++) { n = (n + 1) % TASKNUM; current = &task[n]; ... 11 8 21
  • 10. func_t task_main[] = { main1, main2, main3 }; void schedule() { ... for (i = 0; i < TASKNUM; i++) { n = (n + 1) % TASKNUM; current = &task[n]; ... 11 8 21
  • 11. func_t task_main[] = { main1, main2, main3 }; void schedule() { ... for (i = 0; i < TASKNUM; i++) { n = (n + 1) % TASKNUM; current = &task[n]; ... 11 8 21
  • 12. void task_create() { ... static int n = 0; if (n == TASKNUM) schedule(); ... if (setjmp(task[n].context)) task_start(n); n++; task_create(); 11 8 21
  • 13. void task_create() { ... static int n = 0; if (n == TASKNUM) schedule(); ... if (setjmp(task[n].context)) task_start(n); n++; task_create(); 11 8 21
  • 14. 11 8 21
  • 15. 11 8 21