본문 바로가기
카테고리 없음

우선순위 기반 선점형 스케줄러 반쯤 완성?

by 알 수 없는 사용자 2009. 12. 21.
728x90
반응형

각 태스크에 우선순위를 부여하고
우선순위가 가장 높은 태스크가 시스템을 모두 점유한다고 가정

실행중인 태스크가 대기 상태가 되면 그다음 우선 순위가 높은 태스크를 실행

현재 실행중인 태스크보다 우선순위가 높은 태스크가 대기상태에서 준비상태가 되면

현재 실행중인 태스크는 일시중단 되고 우선순위가 높은 태스크가 다시 실행

각 태스크에 대한 준비 테이블 / 대기 테이블 이용

태스크 전환을위한 sleep함수이용

sleep -> 현재 실행중인 태스크를 대기 상태로 만들고 대기테이블에 등록
             다음 우선순위의 태스크 실행

스케줄에서의 대기테이블 처리부분
대기테이블에 있는 태스크의 대기카운트를 틱인터럽트마다 감소하고
대기카운터가 0이되면 대기테이블에서 삭제하고 준비태이블에 등록


태스트 결과

태스크 1 : 우선순위 1, 1출력 후 3틱 대기
태스크 2 : 우선순위 2, 2출력 후 1틱 대기
태스크 3 : 우선순위 3, 3출력 대기 없음


uart로 테스크한 결과 태스크1->태스크2->태스크3->태스크2->태스크1->... 순으로 출력이 되었다.
아래는 각 태스크별 타이밍도를 간단하게 그려보았다.
나름 만족할만한 결과가 나왔음



TASK 1





TASK 2






TASK 3
728x90