페이지 선택
Generic selectors
Exact matches only
Search in title
Search in content
Search in pages

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”);  ← 로그를 콘솔로 출력한다.
        sleep(2);
 
      }
 }

 

 

 

3. 쓰레드의 생성

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

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

 

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

 

 

 

 

 

4. 쓰레드의 종료

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

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

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

 

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

 

 

 

 

 

Adsense

EMW3070

Viewed Page List