일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 확률
- 프로그래밍
- 토플
- probability
- 토플 라이팅
- 암호화폐
- python
- 블록체인
- Cloud
- backtest
- can
- it
- 자동매매
- 오토사
- TOEFL
- 백테스트
- toefl writing
- 자동차sw
- GeorgiaTech
- 아마존 웹 서비스
- AWS
- AUTOSAR
- 개발자
- 백트레이더
- backtrader
- 비트코인
- 클라우드
- 퀀트
- 파이썬
- Bitcoin
- Today
- Total
Leo's Garage
RTOS - Real Time Operating System - 2 본문
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++;
}
'Study > RTOS' 카테고리의 다른 글
RTOS - Real Time Operating System - 3 (0) | 2023.02.27 |
---|---|
RTOS - Real Time Operating System - 1 (0) | 2023.02.21 |