각각의 Task : 자기 고유의 TCB 가짐
TCB: Kernel이 Task들을 관리하기 위한 Meta Data*
typedef struct {
struct task_tcb_struct *next_ptr;
struct task_tcb_struct *prev_ptr;
} task_tcb_link_type ;
typedef struct task_tcb_struct {
char task_name[200];
void *sp; /* 스택 포인터 */
uint32 receive_siganl ; /* 받은 Signal */
uint32 wait_signal ; /* 기다리는 Signal */
uint32 pri; /* Task의 Priority */
task_tcb_link_type link; /* for TCB list */
} task_tcb_type ;
예제
task_tcb_struct task1, task2, task3;
// task1의 next_ptr이 task2를 가리키고, task2의 next_ptr이 task3을 가리키게 설정
task1.link.next_ptr = &task2;
task2.link.next_ptr = &task3;
// task2의 prev_ptr은 task1을, task3의 prev_ptr은 task2를 가리킴
task2.link.prev_ptr = &task1;
task3.link.prev_ptr = &task2;
// task3의 next_ptr은 NULL로 설정하여 리스트의 끝을 표시
task3.link.next_ptr = NULL;
>> 사람이 next, prev 를 인식하는거지 , 컴퓨터는 그저 주소를 따라가는 것일뿐
ⓐ Task_name : Task의 이름.
Kernel이 사용 X > 사람 Debugging 목적
ⓑ sp : Stack Pointer, 각각의 Task : 자기 고유의 Stack 보유
각각의 task stack의 사용처 : 각 task이 실행 될 때 local variable등을 저장하는 stack 고유의 용도,
: Context Switching >해당 task의 context를 저장
ⓒ sigs와 wait : Task끼리 주고 받는 signal들이 , Task state를 나타냄
ⓓ Link Pointer : TCB를 Double Linked List로 관리 할 수 있도록 해줌
> 새로운 TCB를 중간에 끼워 넣기도 편함,
> Priority 순으로 정렬하기도 편함
Meta Data : Data를 위한 Data
: Data의 속성들을 따로 Data화 해 놓은 Data
> 실제 System에게 아주 중요한 Data
ex) File 속성
. File 등록정보 같은 거 보면 Read Only인지, 언제 만들어 졌는지, 크기는 얼마인지 등의 정보
> 사용자에게는 중요 X , File system에게는 아주 중요한 정보
>>
TCB : Task 자체를 대표하는 Data
실 사용자는 이 Data를 이용 X > system 에게는 아주 중요
'임베디드 > 임베디드 레시피' 카테고리의 다른 글
TCB - Task , CS (1) | 2024.12.17 |
---|---|
선점형 Multitasking (0) | 2024.12.14 |
Task Service (1) | 2024.12.14 |
Task 구조, signal (0) | 2024.12.12 |
Embedded Software는 무한 Loop (0) | 2024.12.11 |