본문 바로가기
코스웨어/12년 내장형하드웨어

[Micro C/OS]2012/10/29 작업일지(리얼타임 시스템의 개념) - by.이창현

by 알 수 없는 사용자 2012. 10. 30.
728x90
반응형

리얼타임 시스템의 개념.

: 리얼타임 시스템은, 시스템이 논리적으로 완벽하게 동작해야 함은 물론이고 정해진 시간 내에 동작하지 않을 경우 심각한 결과가 발생하는 시스템이다. 분류는 소프트(SOFT)와 하드(HARD) 시스템을 분류된다. 소프트 리얼타임 시스템은 가능한 한 빠르게 임무를 수행하지만 반드시 정해진 시간 내에 수행할 필요는 없다. 반면 하드 리얼타임 시스템은 어떤 사건이 발생했을 때 정확히 동작하는 것은 물론이고 반드시 정해진 시간 내에 그 임무를 마쳐야 한다.

그림 1) 전경/배경 시스템.

1. 응용 프로그램은 용구되는 동작을 수행하기 위해서 특정한 모듈이나 함수를 호출하는 무한 루프로 구성된 시스템을 배경 프로세스 라 한다. 그리고 인터럽트 서비스 루틴(Interrupt Service Routine 또는 ISR)은 비동기적(간헐적)으로 발생하는 이벤트를 처리하는 시스템을 전경 프로세스라 한다.

그림 2) 여러 개의 태스크.

2. 태스크는 스레드(Thread) 라고도 하며, 자기자신이 CPU를 독점하고 있다고 생각 하는 단순한 프로그램이다. 각태스크는 수면상태(DORMANT), 준비상태(READY), 실행상태(RUNNING), 대기상태(WAITING), 인터럽트 서비스 루틴 상태 (ISR, Interrupt Service Routine) 등 5가지의 상태 중 한 가지 상태에 있으면서 무한루프를 수행한다. 일단 수면상태일때 태스크 코드는 메모리에 올라가 있지만 멀티태스킹 커널에 등록되지 않아서 실행 할 수 없는 상태를 말한다. 준비상태는 언제든지 실행 될 수 있지만,우선순위가 더 높은 다른 태스크가 현재 실행 되는 상태를 말한다. 태스크가 CPU를 점유해서 현재 실행되고 있는 상태를 실행상태라 한다. 태스크가 I/O 처리 완료. 공유자원의 사용 가능 상태, 타이머의 만료 등 특정 이벤트를 기다리는 상태를 대기상태라 한다. 마지막으로 인터럽트가 발생해서 CPU가 인터럽트 서비스 루틴을 수행하고 있는 상태를 ISR 상태라 한다.

그림 3) 여러 개의 태스크.

3. CPU 레지스터와 스텍과의 뗄레야 뗄수가 없다. 이유는 CPU에서 많은 일들을 처리 하기에는 무리가 있다 그래서 메모리에 적재를 하여 작업을 나누는 데 CPU와 메모리는 멀리 떨어져 있기 때문에 속도가 다소 떨어진다. 그래서 CPU근처에 레지스터를 두어 작업이 끝나면 메모리에 한꺼번에 처리 해서 보내기도 한다. 일단 메모리에 보내기 전에 마이크로 C/OS는 테스크 컨트롤 블록을 거쳐해당 되는 메모리의 스텍으로 할당을 받는다.

그림 4) 라이프 사이클.

4. 사람에게 라이프 사이클이라는게 있다. 살아가면서 하루가 돌아가는 걸 사이클이라고 한다. 그렇듯이 마이크로 C/OS 에도 태스크 사이클이라는게 있는데 그림 5)를 참조 하면 된다.

그림 5) 태스크 상태(스테이터스 다이어그램.) 태스크 사이클이라고도 함.

5. 그림 4)에서 보았듯이 사람이 살아갈때는 사이클이 돈다. 그렇듯 마이크로 C/OS 에도 태스크 사이클이라는게 존재 하는데 태스크가 돌기 위해서 준비되고 대기 하고 실행하는 과정들을 사이클이라고 한다.

그림 6) 비선점형 커널.

6. 비선점형 커널에서는 각 태스크가 CPU 의 제어권을 확실하게 넘겨주기 위해 명시적으로 (explicitly) 어떤 동작을 해야 한다. 동시에 여러 태스크가 실행 하는 것처럼 보이려면 이런 동작을 자주 수행해야 한다. 비선점형 스케줄링은 협조적(cooperative) 멀티 태스킹이라고도 하며 각 태스크는 CPU를 공유하기 위해 서로 협력한다. 비선점형 커널의 장점중 하나는 인터럽틑 지연시간이 짧다는 것 이다. 그리고 태스크 레벨에서 비재진입(non-reentrant) 함수를 사용 할수도 있다.

(1) 태스크 실행 중 인터럽트가 발생한다.

(2) 인터럽트가 활성화 상태라면 CPU 실행은 ISR로 이동한다.

(3) ISR은 이벤트를 처리한 뒤, 최상위 우선순위 태스크를 준비상태로 만든다.

(4) ISR 처리가 끝날 때 인터럽트 복귀(Return From Interrupt) 명령이 실행되고, CPU 실행은 인터럽트가 발생했던 태스크로 돌아간다.

(5) 태스크는 인터럽트가 발생했을 때 실행하던 명령의 다음 명령부터 재실행 한다.

(6) 태스크 코드가 끝나면 CPU 를 다른 태스크로 넘겨주기 위해 커널이 제공하는 서비스 함수를 호출한다.

(7) 커널은 더 높은 우선순위 태스크가 준비상태가 됐는지 살펴본 쉬, 최상위 우선순위 태스크를 실행하기 위해 문맥전환을 수행한다. 이제 새로운 태스크가 ISR이 보낸 이벤트 신호를 처린한다.

그림 7) 선점형 커널.

7. 선점형 커널은 시스템의 응답성이 중요한 경우 사용된다. 이때문에 uC/OS-II를 비롯한 대부분의 상용 리얼타임 커널은 선점형이다. CPU의 제어권은 실행준비가 된 최상위 우선순위 태스크로 항상 넘어간다. 어떤 태스크가 상위 우선순위의 태스크를 실행준비 상태로 만들면, 현재 실행 중인 태스크는 선점되어 곧바로 상위 우선순위 태스크로 CPU의 제어권이 넘어간다.

(1) 태스크 실행 중 인터럽트가 발생한다.

(2) 인터럽트가 활성화 상태라면 CPU 실행은 ISR로 이동한다.

(3) ISR은 이벤트를 처리한 뒤 최상위 우선순위 태스크를 준비상태로 만든다. ISR 처리가 끝날 때 커널이 제공하는 함수를 호출한다.

(4)

(5) 이 함수는 더 중요한 실행 준비상태가 된 것을 발견한다. 따라서 인터럽트가 발생했던 태스크로 돌아가는 대신. 커널은 문맥전환을 수행해서 더 중요한 태스크를 실행한다. 더 중요한 태스크가 할 일을 마치면 이벤트(ISR) 발생해서 다시 기다리기 위해 커널이 제공하는 함수를 호출한다.

(6)

(7) 커널은 낮은 우선순위 태스크를 다시 실행하기 위해 문맥전환을 수행한다. 이제 낮은 우선순위 태스크는 ISR이 발생하기 전에 수행하던 위치로 돌아가 나머지 일을 마저 처리한다.

728x90