관리 메뉴

Leo's Garage

RTOS - Real Time Operating System - 2 본문

Study/RTOS

RTOS - Real Time Operating System - 2

LeoBehindK 2023. 2. 22. 23:47
728x90
반응형

Interrupt

- 비동기적인 이벤트의 발생을 처리하기 위한 메커니증

- 인터럽트 발생 시, 문맥을 정리하고 ISR(Interrupt Service Routine)로 점프

- 활성 / 비활성 가능 : 비활성화 시간은 가능한 짧게 해야함 

- 지연 시간 (Interrupt Latency) : 비활성화 최대시간 + ISR 최초 명령 시간

[1] Disk -> Interrupt Controller 

[2] Interrupt Controller -> CPU

위의 두가지를 Masking해서 개별적으로 Interrupt Source를 막을 수 있다. [RTOS에서는 주로 [2]을 Masking한다]

Interrupt의 SW 동작은 위와 같다.

Main Program을 수행하다가 Interrupt가 발생하면, Interrupt Vector Table을 참조하여, 해당 Table에 등록된 Interrupt Service Routine으로 가서 수행 후, 종료 후 Main Program으로 복귀한다.

 

Blocking I/O

Blocking I/O 동작은 Task가 System Call을 호출했으나, 점유하고자 하는 Data가 현재 바로 가용하지 않을 경우에는 그 동작이 완료될 때까지 Suspending(Blocked) 상태로 유지되는 것을 말한다. 

Process Blocks : Sleeping (휴면 상태) 예를 들어 키보드 입력을 기다리는 것 등등...

이런 경우, Task를 InActive(Block) 하여, 다른 Task에 자원을 쓸 수 있다. (효율적)

#include <conio.h>
#include <stdio.h>

void main()
{
	int c;
    clrscr();
    printf("Press any key\n");
    while(1)
    {
    	c = getch();
        if(c)
        	printf("A key is pressed from keyboard");
        else
        	printf("An error occured");
        ...
    }
}

Block I/O 함수의 예시이다.

Non-Blocking I/O

Non-Blocking I/O 동작은 Task가 System Call을 호출했으나 점유하고자 하는 Data가 즉시 가용하지 않으면 바로 Return을 하는 특징을 가지고 있다. 

마치 Polling과 같다고 할 수 있다.

#include <conio.h>
#include <stdio.h>

void main()
{
	char c;
    while(1)
    {
    	if(kdbhit())
       	{
        	int c;
            c = getch();
            if (c == 'q' || c == 'Q' || c == EOF)
            	break;
        }
        ...
    }
    return 0;
}

 

Non-Block I/O 함수의 예시이다.

 

Tick 

- 정기적으로 발생하는 Interrupt의 일종

- Task Delayed, Time out 제공

- Tack Delay의 Clock Resolution은 Clock Tick 1개 : 오차가 존재한다. 

- Clock Tick 단위의 정확도로 지연이 가능한 것은 아니다 : 선점형 커널에서는 가능

static int tick = 0;

TimeISR()
{
	tick++;
}

 

728x90
반응형

'Study > RTOS' 카테고리의 다른 글

RTOS - Real Time Operating System - 3  (0) 2023.02.27
RTOS - Real Time Operating System - 1  (0) 2023.02.21
Comments