Real-time EXecutive (REX)
------------------------------------------------------------------------
1. 정의
------------------------------------------------------------------------
- Qualcomm 사에서 만든 RTOS.
- 4 files, 4K ROM, 400 byte RAM, 500 byte stack (덩치가 작다)
- Low-overhead priority scheduler (적은 부하 우선시)
- priority가 표시된 task 집합으로 이루어진다.
- Preemptive scheduling 방식으로 높은 priority의 task가 낮은 priority를 가진 task를 interupt
함으로써 응답시간을 최소화한다.
- Multi-tasking 방식으로 task 사이에 논리적으로 구분이 잘 되어 있어 모든 동적이 연속적으로
이루어진다.
- 명령이 논리적으로 이루어 질 수 있는 Task 개념을 도입한다.
------------------------------------------------------------------------
2. Task
------------------------------------------------------------------------
- REX는 task들을 독립적으로 다룬다.
- Task들이 동적으로 생성될 수 있다.
- 각 task들이 증가함에 따라 성능은 감소된다. (task 수를 최소화 하도록 고려)
- TCB (Task Control Block)
각 task의 stack 과 priority 의 content 정보를 처리함.
------------------------------------------------------------------------
3. Stack
------------------------------------------------------------------------
- 각 task들은 각각 stack을 가지고 있어, task가 수행되면 stack도 활성화된다.
- task가 중지되면 task의 content는 해당 stack의 맨 윗부분인 context frame에
저장이 되고, 이 context frame의 포인터는 다시 task의 TCB에 저장된다.
- stack 포인터는 task의 TCB로부터 복구된다.
------------------------------------------------------------------------
4. Priority와 Scheduling
------------------------------------------------------------------------
- priority가 TCB안에 저장된다.
- 각 task는 고유의 priority가 표기된다.
- priority는 32bit의 정수형으로 표기되며 낮은 값이 낮은 priority를, 높은 값이 높은
priority를 가진다.
- 항상 가장 높은 priority를 가진 task가 선택된다.
- 가장 priority가 높은 task는 대기를 하지 않는다.
- 결정된 task는 스스로 중지하거나, interrupt가 발생하지 않는동안 계속 실행된다.
- task는 유동적으로 priority를 낮추거나 높일 수 있다.
------------------------------------------------------------------------
5. Signals
------------------------------------------------------------------------
- REX는 signal을 제공한다.
- 다른 task나 interrupt handler가 특정 signal을 set하면 task는 임의적으로 실행이
중지될 수도 있다.
- task는 signal이 set될 때까지 대기 할 수 있음
------------------------------------------------------------------------
6. Timers
------------------------------------------------------------------------
- REX는 active timer list를 제공한다.
- Timer는 다른 event들과 결합하여 사용되기도 한다.
- Timer를 사용할 때 task는 interval time을 명시하고 timer가 끝나면 signal mask를
set 한다.
------------------------------------------------------------------------
7. Freatures
------------------------------------------------------------------------
- Interrupt로부터 돌아오면 가장 priority가 높은 task가 준비상태가 된다.
- Task들은 resource를 공유하므로 resource는 상호배제 (Mutual Exclusion)
되어야 한다.
- 현재 수행중인 task에 대해 interrupt를 suspending 할 수 있다. 그러나 task가
다시 활성화되면 interrupt 상태도 복구된다.
- Queue service를 제공하고 data object들에게 FIFO queue를 제공한다.
- 다양한 방법으로 buffer를 제공한다.
- Task의 입력 queue를 buffer에 놓는다.
- Queue 형태의 signal을 이용한다.