[Intel AI SW 아카데미] RTOS(Real Time Operating System)

Jimeaning·2024년 1월 24일
0

Intel AIoT

목록 보기
24/38

2024.1.24

운영체제

운영체제란 ?

  • 운영체제(Operating System, OS)는 응용 프로그램이 요청하는 시스템 자원을 효율적으로 분배하고 관리한다
  • 대표적인 운영체제로는 Windows, Mac, UNIX, LINUX 가 있다.

실시간 운영체제

  • 실시간 운영체제는 특정한 짧은 시간 내에 이벤트나 데이터의 처리를 보증하는 운영체제이다.
  • 실시간 운영체제는 싱글 태스킹일 수도 있고, 멀티 태스킹일 수 있다. 멀티 태스킹의 경우 특수한 스케줄링 알고리즘을 사용한다.

RTOS의 특징
1. 멀티 태스킹을 지원
여러 개의 task(process or thread)를 동시에 동작시킬 수 있다. 각 task마다 우선 순위를 둘 수 있다.
2. 짧은 interrupt latency
interrupt latency는 실제 인터럽트가 발생한 후 인터럽트 핸들러까지 도착하는 시간이다.
3. 작은 커널 사이즈
커널 : 잡 스케줄러. scheduling
4. 유명한 RTOS

  • VxWorks : 미국의 WindRiver사에서 만든 것. 제조 판매 세계 시장 점유율이 가장 높다. 화성 탐사선 스프릿 로보 등이 PowerPC 플랫폼에서 VxWorks O/S 사용
  • pSOS : WindRiver에서 인수
  • Nucles : 현재 Mentor Graphics에서 인수. 우리별 1호 2호 탑재

운영체제의 구조

커널

운영체제는 규모가 매우 큰 프로그램이므로 운영체제의 모든 부분을 메모리에 올려 놓는 것은 메모리 측면에서 굉장히 비효율적이다. 따라서 운영체제는 필요한 부분만을 메모리에 올려서 사용하게 되는데 이때 메모리에 상주하는 운영체제의 핵심 부분커널이라고 한다.
커널은 메모리에 상주하는 부분이므로 운영체제의 핵심 부분이라고 볼 수 있기 때문에 주로 운영체제 = 커널 이라고 한다.

시스템 콜 (System Call)

사용자는 운영체제의 기능을 담당하는 커널에 직접 접근할 수 없다. 따라서 사용자와 커널 사이에 인터페이스 역할이 필요한데, 시스템 콜이 바로 이 역할을 한다.
사용자가 커널 영역을 사용할 수 있게 응용 프로그램이 시스템 자원에 직접 접근하여 필요한 기능을 사용할 수 있게 해주는 함수를 의미한다.
하지만 보통은 응용프로그램이 시스템 콜을 직접 사용하지 않고, 해당 시스템 콜을 사용하여 만든 언어별 라이브러리 API를 통해 커널에 접근한다.

API (Application Programming Interface)

운영체제가 응용 프로그램을 위해 제공하는 함수

커널

Procss

실행 중인 프로그램을 process 라고 한다.
실행 파일을 클릭했을 때, 메모리(RAM) 할당이 이루어지고, 이 메모리 공간으로 코드가 올라간다. 이 순간부터 이 프로그램은 process라 불리게 된다.

task

일이 실행되는 최소 기본 단위, 프로세스와 쓰레드를 의미

프로세스의 스케줄링

CPU는 하나인데 동시에 여러 프로세스가 실행되어야 한다.
CPU는 여러 개의 프로세스를 번갈아가면서 실행하는데 매우 빠르기 때문에 우리 눈에는 동시에 실행되는 것처럼 보인다.
이러한 멀티 프로세스 운영체제에서 프로세스의 CPU 할당 순서 및 방법을 결정짓는 것을 '스케줄링'이라고 한다.

라운드 로빈 스케줄링 (Round-Robin Scheduling)

RR 알고리즘은 선점(preemptive)형 알고리즘으로, 시분할 시스템을 위해 설계되었다.
FCFS 스케줄링과 비슷하지만 시스템이 프로세스들 사이를 옮겨 다닐 수 있도록 선점이 추가된다.
시간 할당량(time quantum) 또는 time slice라는 시간의 '단위'를 정의하여 구현한다.
어떤 프로세스가 이 단위 시간을 지나면 실행을 강제로 다른 프로세스에게 선점시키는 것이다.
일반적으로 time quantum은 10에서 100밀리초 동안이다.

컨텍스트 스위칭 (Context Switching)

문맥 교환 (context switch) 이란 하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해 이전의 프로세스 상태(문맥)를 보관하고 새로운 프로세스의 상태를 적재하는 작업이다.

실행되는 프로세스의 변경 과정에서 발생하는 컨텍스트 스위칭은 시스템에 많은 부담을 준다.
레지스터의 개수가 많을 수록, 프로세스 별로 관리되어야 할 데이터 종류가 많을 수록 더 부담이 된다.
컨텍스트 스위칭에 소요되는 시간을 줄이려면 저장하고 복원하는 컨텍스트 정보의 개수를 줄여주면 된다.

프로세스와 쓰레드

프로세스는 모든 것(Code/data/heap/stack 영역)이 독립적이다. 이러한 메모리 구조를 지녔기에 프로세스 간에 데이터를 주고 받기 위해서는 IPC(Inter Process Communication)가 필요하다.

쓰레드는 Stack 영역을 제외하고 나머지(Code, Data, Heap)는 부모 프로세스 영역을 공유하고 있다. 쓰레드마다 스택을 독립적으로 할당해준다.

쓰레드는 공유하는 영역이 많기 때문에 컨텍스트 스위칭이 빠르다.

공유자원 관리 방법

뮤텍스 (Mutex)

공유자원 1개에 하나의 사용자만 사용 가능

  • 뮤텍스는 화장실이 하나 뿐이 없는 식당과 비슷하다. 화장실을 가기 위해서는 카운터에서 열쇠를 받아 가야 한다. 당신이 화장실을 가려고 하는데 카운터에 키가 있으면 화장실에 사람이 없다는 뜻이고 당신은 그 열쇠를 이용해 화장실에 들어갈 수 있다.
  • 공유된 자원의 데이터 혹은 임계영역(Critical Section) 등에 하나의 Process 혹은 Thread가 접근하는 것을 막아줌(즉, 동기화 대상이 하나)
  • 임계구역(Critical Section)을 가진 스레드들의 실행시간(Running Time)이 서로 겹치지 않고 각각 단독으로 실행(상호배제_Mutual Exclution)되도록 하는 기술
while(1)
{
   acquire lock
   critical section
   release lock
   remainder section
}

세마포어 (Semaphor)

손님이 화장실을 좀 더 쉽게 이용할 수 있는 레스토랑이다.
세마포어를 이용하는 레스토랑의 화장실에는 여러 개의 칸이 있다.
그리고 화장실 입구에는 현재 화장실의 빈 칸 개수를 보여주는 전광판이 있다
세마포어도 화장실이 공유자원이며 사람들이 쓰레드, 프로세스이다.
그리고 화장실 빈칸의 개수는 현재 공유자원에 접근할 수 있는 쓰레드, 프로세스의 개수를 나타낸다

STM32 RTOS

환경 세팅

ioc 파일에서 Middleware and Software Pack > FREERTOS > Mode Interface : CMSIS_V2
(CMSIS는 표준)

System Core > SYS > Timebase Source : TIM11

새로운 라이브러리 적용 허용 과정
FREERTOS > Advanced Settings > USE_NEWLIB_REENTRANT > Enabled

FreeRTOS가 설치된 것을 볼 수 있다

Tasks and Queues > Add > Task Name, Entry Function 이름 변경

main.c 여기에 코드 작업하면 됨

STM32 TCP/IP

System Core > SYS > Timebase Source : TIM6
SysTick을 쓰지 않는 이유는 우선순위가 낮기 때문

Middleware and Software Pack > FREERTOS > Mode Interface : CMSIS_V2
FREERTOS > Advanced Settings > USE_NEWLIB_REENTRANT > Enabled

Task 3개 만들기

뮤텍스 만들기

I2C

enable 시키기
포트 활성화하기

profile
I mean

0개의 댓글