English

커널구조-준비리스트(OSRdyGrp,OSRdyTbl[]) #5

2008.02.26 10:46

권오용 Views:4845 Recommend:45

Task생성되면 Task들은 Ready상태에 머무르게 되는데 이때 이 대기하는 각 태스크들을 준비리스트라 하며

이러한 실행준비 상태의 태스크를 관리하기 위해 OSRdyGrp값과 OSRdyTbl[]배열에 준비상태임을 표시한다.

OSRdyGrp값과 OSRdyTbl[]과 의 관계는 다음 과 같다.



     OSRdyGrp                                           OSRdyTbl

7  6  5  4  3  2  1  0  --->OSRdyTbl[0]  7   6  5   4  3   2   1  0

|  |  |  |  |  |   |------>OSRdyTbl[1]  15 14 13 12 11 10  9  8

|  |  |  |  |  |--------->OSRdyTbl[2]  23 22 21 20 19 18 17 16

|  |  |  |  |----------->OSRdyTbl[3]  31 30 29 28 27 26 25 24

|  |  |  |------------->OSRdyTbl[4]  39 38 37 36 35 34 33 32

|  |  |--------------->OSRdyTbl[5]  47 46 45 44 43 42 41 40

|  |-----------------> OSRdyTbl[6]  55 54 53 52 51 50 49 48

|-------------------->OSRdyTbl[7]  63 62 61 60 59 58 57 56


위의 그림과같이 태크우선순위를 8개씩 1개로 그룹화시켜 1개 그룹당 OSRdyGrp의 비트 1개에 맞물린다.



즉, OSRdyGrp에서 각비트는 해당 우선순위 그룹내에서 하나이상의 실행가능한 태스크의 존재여부를 나타낸다.



태스크가 준비상태가 되면 준비테이블(OSRdyTbl의)해당비트를 1로 설정한다.



위내용을 토대로 동작방식을 설명하면 다음과같다.



먼저 8,18,28,36 태스크가 준비리스트에 있다고하자. 이렇게되면 OSRdyGrp의 값은 00011010 이렇게 셋팅이 된다.



여기서 우선순위는 오른쪽으로 갈수록 가장높으므로 OSRdyTbl[1]이 선택되어 거기서 준비중인 8번태스크를 실행하게 된다.



8번태스크 사용이 끝나면 OSRdyGrp에서 그다음으로 우선순위가 높은 OSRdyTbl[3]이 선택되어 거기서 우선순위가 가장높은



18번 태스크를 다시 실행한다.  이런식으로 모든태스크가 다 실행되서 더이상 돌아갈 태스크가 없으면 내부적으로 IDLE 태스크



를 실행하게된다.