페이지 선택

Thread(쓰레드)

RTOS 시스템에서 어플리케이션/프로세스가 그리는 큰 그림은 쓰레드(Thread)라는 작은 단위의 일/작업들이 유기적으로 수행되면서 구현된다.

Thread는  형태적으로 함수이지만 그 존재를 OS에 등록해 놓고, OS가 그 실행의 흐름을 관장할 수 있도록 한 특수한 함수라고 볼 수 있겠다.

 

 

 

1. 쓰레드의 특징

♦ 생성(O/S에 등록)해 놓으면 O/S 스케쥴러가 그 실행의 흐름을 관장한다. → 함수처럼 프로그래밍에 의해 필요할 때 호출하여 사용하려는 것이 아니다.

♦ 우선순위가 있으며, 스케쥴러에 의한 Scheduling의 기본단위이자 Context Swithing의 대상이 된다.

Running, Ready, Suspend, Terminate와 같은 동작상태가 있다.

♦ 사적메모리로 Stack을 할당받아 사용, 공유메모리로 시스템/프로세스 소유의 Code, Data, Heap 영역을 다른 쓰레드들과 공유사용.

 

 

2. 쓰레드의 정의

아래는 쓰레드를 정의한 것이다. 함수를 정의하는 것과 동일하다. 따라서 함수로써 호출할 수도 있다. 다만 그 용법에서 차이성이 있다.

 
static void momo(void *arg)
{
       while(1) {
 
        app_log(“this is thread momo_job1”);  ← momo가 하는 일은 로그를 출력하는 일
        sleep(2);
 
      }
 }

 

 

 

3. 쓰레드의 생성

앞서 정의해 놓은 함수를 O/S가 제공하는 API를 사용하여 아래와 같이 등록/생성 하므로써 이 함수는 비로소 Thread로 탄생되고, 쓰레드로서 실행될 수 있겠다.

 

thread_new(5, momo, 0x500, p);  ←  thread_new( uint8_t priority, mos_thread_func_t function, uint32_t stack_size, void *arg )

 
RTOS 시스템은 쓰레드를 등록할 때 받은 정보를 토대로 쓰레드에 대한 스케줄링(우선순위), Context Swithing시 실행할 코드위치, 메모리(Stack) 등을 관리해 갈 것이다.

Thread는  형태적으로 함수이다.→쓰레드는 OS가 실행의 흐름을 관장할 수 있도록 작성하여, 그 존재를 O/S에 등록해 놓은 함수라고 볼 수 있겠다.

 

 

 

4. 쓰레드의 종료

쓰레드를 종료하여 O/S의 관리체계에서 벗어 날때에는 쓰레드가 차지하고 있던 시스템 자원(Resource)은 시스템에게 깨끗이 되돌려 주도록 하자.

♦ 사적자원(Stack)은 쓰레드를 종료하므로써 자연히 시스템에 반납되지만,

♦ 공유메모리는 명시적으로 시스템에 돌려줘야한다. → 예로 malloc()을 통해서 할당했던 메모리영역을 들 수 있다..

 

thread_delete(NULL); → 호출한 쓰레드을 종료시킨다.
 
 
 

 

 

 

 

 

Viewed Page List