Yeoyou....

Personal blogs

REX...

posted by 여경현

Realtime EXecutive 라는 사이비 OS
원래 186용이라는… 거같은데.
여튼 아주 기본적인 task switching기능을 하는 프로그램.
비선점형. 협력형 OS라고 할 수도…

REX function

REX는 function의 조합이다.
task switching은 rex_shed()에 의해 수행되며, 이 rex_sched()는 각종 REX function등에서 수행되어진다.
마치 OS 서비스를 사용하는거 같으면서… OS를 구동시킨다…
여태까지 OS라 함은… 뭔가 백그라운드로 돌면서, 모니터링 하고… 통제하는것 이라고 생각하고 있었는데…
CPU가 병렬이 아닌담에야 실제로 그럴수는 없지않은가???
다 이런식이 아닐까 싶다… 어차피, interrupt, signal, 등 뭔가 event가 없으면 switching은 일어나지 않으니깐…(정말??? 그런거 같다…^^)

TCB (task context block)

tcb는 우선순위에 따라 삽입.
Timer list는 가장 처음에 삽입.


1. rex_sched()
    curr_task : best_task 다르면 switching…
    rex_int_level 이 0이 아니면 ISR이므로 switching안함.
2. rex_clear_sigs()
    REX는 signal이 자동으로 clear되지 않는다.
3. rex_set_sigs()
    task가 해당 signal을 기다리고 있었다면, task는 ready상태가 되고 rex_sched를 호출한다.
4. rex_get_sigs()
5. rex_def_timer()
    timer를 define한다.
6. rex_clr_timer()
    timer list에서 timer를 제거하고 tim_cnt값을 0으로 설정한다.
7. rex_set_timer()
    Timer를 timer list에 연결한다.
8. rex_get_timer()
    timer_cnt값을 읽어오기
9. rex_tick()
    time tick interrupt가 발생할 때마다 호출
    tim_cnt를 p_tick만큼 감소. 0보다 작아지면 signal 세팅.
10. rex_wait()
    signal을 기다리며 suspend상태로…
11. rex_def_task()
     TCB list에 등록하고, stack, entry point, priority 등의 초기화를 마치고… 필요시 task switching.
12. rex_timed_wait()
     timer를 이용, 일정 시간동안 대기한다.
13. rex_self()
     자신의 TCB를 반환.
14. rex_set_pri()
    현재 수행중 task(current task)를 TCB list에 task를 다시삽입한다. 필요시 task switching
15. rex_task_pri()
    지정한 task의 pri를 변환(다시 삽입).
16. rex_get_pri()
    current task의 우선순위를 반환.
17. rex_init()
    rex를 초기화 한다.
    int level, stack, timer list, TCB list, kernel task 등의 초기화를 마치고 rex_def_task() 함수로 첫번째 task를 실행하도록 한다.
18. rex_start()
     rex_def_task()에서 맨처음 task를 등록시킬때 호출된다.
19. rex_init_prolog()
    interrupt handler에서 ISR에 들어가기 전에 호출.
    nested int인지 확인후 rex_int_level을 증가.
    어떤 interrupt stack를 쓸지 결정???
    뭐하는 함수지????
20. rex_init_epilog()
    ISR을 마치고 interrupt handler를 종료하기 전에 호출
    어떤 interrupt stack를 쓸지 결정???


* 정말 간단하긴 하다.

-질문-
* kernel task란 뭘까???
* REX task의 상태에는 어떤것이 있을까?
* 거꾸로 말해서… task switching을 야기하는 요인에는 어떤것이 있을까?