본문 바로가기
TCB - Task Control Block

잠시 쉬어 가도록 해요. TCB 얘기가 나왔으니까 말인데, TCB에는 어떤 정보들이 들어 갈런지.. 한번 빠져보시렵니까? 각각의 Task는 자기 고유의 TCB를 가져요. TCB는 Kernel이 Task들을 관리하기 위한 Meta Data*라고 보시면 되지요. 여하간 흔히들 사용하는 TCB는 적당히 아래와 같은 모습이라고 보시면 될 것 같아요.

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 ;

아~주 simple한 case의 대표적인 member만 넣어 두었는데요,시스템에 따라 그때그때 들어가야 하는 내용은 다릅니다요. 하나하나 가지고 가볼까요?

ⓐ Task_name : Task의 이름. Kernel은 이 member를 사용 할 리가 만무 하고요, 그냥 사람이 Debugging 목적으로 이름이 있으면 좀더 식별하기 편하니까 넣어놓는 member에요. string으로 넣어 두는 거니까, 심각하게 받아들이지 말아주세요.

ⓑ sp : Stack Pointer, 각각의 Task는 자기 고유의 Stack이 있음을 확인 하셨겠지요. 각각의 task stack의 사용처는 각 task이 실행 될 때 흔히들 아는 local variable등을 저장하는 stack 고유의 용도로 사용되고, 또 하나 중요한 것은 Context Switching시에 해당 task의 context를 저장하는 용도로 사용된다는 거지요. 이런 두 번째 이유 때문에, 각 task가 자기의 stack을 가져야 한다는 거에요.

ⓒ sigs와 wait : 잘 이해하고 있겠지만요, Task끼리 주고 받는 signal들이 들어 있고요, 이를 이용해서 Task의 state를 나타낼 수 있지요.

ⓓ Link Pointer : 이 pointer는 TCB를 Double Linked List로 관리 할 수 있도록 해 주지요. 구현에 따라서 Double Linked List로 관리 안 하는 녀석들도 있을 수 있지만, 가장 편한 방법으로 TCB를 Linked List로 연결해서 관리하면 새로운 TCB를 중간에 끼워 넣기도 편하고, Priority 순으로 정렬하기도 편하고 하는 이유로 이런 구현이 많이 선호되는 거에요.

지금은 아주 간단하고, Simple한 TCB member들만 살펴 보았는데, Task를 다루면서 점점 더 하나씩 더 집어 넣으면서 살펴 보아야 할 것 같아요.

 Meta Data가 뭐냐고요? Meta Data는 Data를 위한 Data로서, Data의 속성들을 따로 Data화 해 놓은 Data를 말하는 거구요. 실제 사용자들에게는 의미가 있을 수도 없을 수도 있는 Data이지만, 실제 System에게는 아주 중요한 Data를 의미 하지요. 누군가 예를 든 것 중에 아주 인상 깊은   예가 있었는데, 그냥 concept만 이해 하시 자면, 워드 파일을 만들 때, 어떤 글씨는 빨갛게, 어떤 글씨는   파랗게 지정할 수 있지요. 사용자에게는 글씨가 중요한 데이터이고, 빨갛고, 파란글씨를 지정만 하면 되지만, 실은 어딘가에 어떤 글씨는 빨갛고, 어떤 글씨는 파랗다는 데이터를 또 저장해 두어야 하는 거지요. 그러니까, 사용자에게는 실제 데이터가 보이지는 않는 거죠. 또 좋은 예로는 File들 속성이 그렇죠. File 등록정보 같은 거 보면 Read Only인지, 언제 만들어 졌는지, 크기는 얼마인지 등의 정보가 있지요. 이건 사용자에게는 중요하지 않지만, File system에게는 아주 중요한 정보인 거죠. 이런 식으로 TCB의 경우에도, Task 자체를 대표하는 Data인 거지만, 실 사용자는 이 Data를 이용해 먹지는 않죠. Task를 꾸미는 데이터 인 셈이에요. 아. 어렵네요. 오,

 
 
Linked at 친절한 임베디드 시스템 개발자.. at 2009/10/01 12:45

... ⓖ TCB - Task Control Block ... more

친절한 임베디드 시스템 개발자 되기 강좌 글 전체 리스트 (링크) -



댓글





친절한 임베디드 개발자 되기 강좌 글 전체 리스트 (링크) -