Appearance
操作系统基本原理
根据任务的优先级进行分配
C
1 #include <stdio.h> //linux的系统函数用来产生中断
2 #include <unistd.h>
3 #include <signal.h>
4
5 int task_delay[4] = {0};
6 void task1(void)
7 {
8 task_delay[0] = 10;
9 printf("task1..\n");
10 }
11
12 void task2(void)
13 {
14 task_delay[1] = 4;
15 printf("task2..\n");
16 }
17 void task3(void)
18 {
19 task_delay[2] = 4;
20 printf("task3..\n");
21 }
22 void task4(void)
23 {
24 task_delay[3] = 1;
25 printf("task4..\n");
26 }
27 void timer_interrupt(void)
28 {
29 for(int i = 0; i < 4; i++)
30 {
31 if(task_delay[i])
32 task_delay[i]--;
33 }
34 alarm(1);//设定下一次调用这个函数的时间
35 }
36
37 void (*task[])(void) = {task1, task2, task3, task4};
38
39 int main(void)
40 {
41 signal(SIGALRM, timer_interrupt);
42 alarm(1);
43 int i;
44 while(1)
45 {
46 for(i=0;i<4;i++)
47 if(task_delay[i]==0)
48 {
49 task[i]();
50 break;
51 }
52 }
53 }
进行封装
C
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <signal.h>
4
5 int task_delay[4] = {0};
6 void task1(void)
7 {
8 task_delay[0] = 10;
9 printf("task1..\n");
10 }
11
12 void task2(void)
13 {
14 task_delay[1] = 4;
15 printf("task2..\n");
16 }
17 void task3(void)
18 {
19 task_delay[2] = 4;
20 printf("task3..\n");
21 }
22 void task4(void)
23 {
24 task_delay[3] = 1;
25 printf("task4..\n");
26 }
27 void timer_interrupt(void)
28 {
29 for(int i = 0; i < 4; i++)
30 {
31 if(task_delay[i])
32 task_delay[i]--;
33 }
34 alarm(1);
35 }
36
37 void (*task[])(void) = {task1, task2, task3, task4};
38
39 void os_init(void)
40 {//初始化任务的时间
41 task_delay[0] = 10;
42 task_delay[1] = 4;
43 task_delay[2] = 4;
44 task_delay[3] = 1;
45 signal(SIGALRM, timer_interrupt);
46 alarm(1);
47 }
48 void os_scedule(void)
49 {//进行任务的切换
50 int i;
51 while(1)
52 {
53 for(i=0;i<4;i++)
54 if(task_delay[i]==0)
55 {
56 task[i]();
57 break;
58 }
59 }
60 }
61
62 int main(void)
63 {
64 os_init();
65 os_scedule();
66 return 0;
67
68 }
- 调度器:负责任务的切换,分为抢占型和不可抢占型,抢占型针对对时间要求较高的内核,可随时对任务打断不可抢占型是在任务时间段结束后进行切换