OS/vxWorks Task 란? / taskSpawn
  • 728x90
    반응형

     

     

    목차

       

      Task 사전 의미

      태스크 (Task)

      컴퓨터에서 처리를 할 경우 처리의 단위는 두 가지의 보는 법이 있다. 하나는 OS(오퍼레이팅 시스템)

      에 외부에서 주어지는 일의 단위이며, 이것을 잡(job)이라 한다. 다른 쪽은 OS가 자원을 할당하여

      처리를 할 경우의 일의 단위이며 이것을 태스크라고 한다. 태스크의 개념은 자원의 효율적 사용, 다중

      처리에서의 스루풋의 향상을 도모하기 위해 생긴 것이며, 각 프로그램은 태스크를 거쳐서 컴퓨터 자원을

      할당하여 주행하는 것으로 된다. 태스크에는 각종 상태가 있으며, 이들을 제어하는 프로그램을 태스크

      관리 프로그램이라고 하고 OS의 주요기능의 하나이다.

      - naver 지식백과 참조

       

       

      Task Control

      • Task에 대한 라이브러리는 taskLib이다.
      • 이러한 루틴들은 Task에대한 정보 검색 뿐만 아니라 Task생성 및 컨트롤을 위한 수단을 제공한다.
      • 더 많은 정보를 위해 taskLib에 대한 VxWorks API Reference 표제어를 참고하라.
      • 대화식의 사용을 위해, Host 또는 Taget shell로부터 VxWorks 태스크를 제어할 수 있다.

       

       

      Task 생성 및 활성화

      아래 표에 나열된 루틴은 Task를 생성하기 위해 사용된다.

      taskSpawn( )에서 인수들은 새로운 Task의 이름(ASCII문자열), Task의 우선권, "options" 워드, 스택 크기,

      main루틴 주소 그리고 시동 파라미터로써 main루틴에 전달될 10개의 인수이다.

       

       

       

       

       

       

      NOTE : "FUNCPTR" type 을 따라가보면 아래 그림과 같이 함수 포인터로 typedef되어있다.

       

       

       

       

      taskSpawn( ) 루틴의 새로운 Task 문맥(context)를 만든다. 이것은 스택을 할당하고 명시된 인수들로

      main루틴 (평범한 루틴)을 호출하기 위해서 Task환경을 설정하는 것을 포함한다.

      새로운 Task는 명시된 루틴의 엔트리에서 실행을 시작한다.

       

      Call Description
      taskSpawn( ) Spawns(creates and activates) a new task
      taskInit( ) Initializes a new task
      taskActivate( ) Activates an initialized task

       

      taskSpawn( ) 루틴은 할당, 초기화, 활성화에 대한 더 낮은 레벨의 스탭을 구체화한다. 초기화와 활성화

      기능은 taskInit( ) 와 taskActivate( )로 제공된다. 그러나, 할당 또는 활성화 중에 더 많은 컨트롤을 필요로할

      때만 이 루틴을 사용할 것을 권한다.

       

       

      Task Stack

      시스템 구성을 분해하여 분석하지 않고는 정확하게 얼마나 많은 스택 공간이 필요한지 아는 것은 어렵다.

      스택 오버플로우 그리고, Task스택 손상을 피하게 하도록 다음의 접근법을 취할 수 있다.

      처음에 스택을 할당할 때, 예상했던 것 보다 훨씬 크게 만든다. 예를 들어, 어플리케이션의 형태에 따라 20KB

      100KB까지 그리고 나서 checkStack( )로 주기적으로 스택을 감시한다.

      그리고 만약 작게 만드는 것이 안전하다면 크기를 수정한다.

       

       

      Task 이름과 ID

      • Task가 spawn 될 때, Task 이름으로 ASCII 문자열을 기입할 수 있다.
      • VxWorks는 Task의 데이터 구조에 대한 4-byte핸들인 Task ID를 리턴한다.
      • 대부분의 VxWorks Task루틴은 Task를 명시하는 인수로써 Task 를 취한다. VxWorks는 'Task ID 0은 항상 호출하는 Task를 의미한다'라는 관례를 사용한다.
      • VxWorks는 Task 이름이 유일하도록 요구하지는 않는다. 그러나 사용자에게 혼동시키는 것을 피하기 위해 유일한 이름이 사용 되는 것을 추천한다. 이름 충돌을 피하기 위해, VxWorks는 모든 Task이름에 접두사를 붙이는 관습을 사용한다. Target으로부터 시작된 Task 이름에는 문자 t를 그리고 Host로부터 시작된 Task 이름에는 문자 u를 붙인다.
      • 모든 어플리케이션에게 이름을 붙이는 것을 원하지 않을지도 모른다. 만약 NULL포인터가 taskSpawn( )의 name인수를 위해 제공된다면, 그때 VxWorks는 유일무이한 이름을 할당한다. 그 이름은 tN형식이다.
      • N은 각각의 이름없는 Task를 위해 1씩 증가되는 십진법의 숫자이다.
      • 아래 표에 나열된 taskLib루틴은 Task ID와 이름을 관리한다.

       

      Call Description
      taskName( ) Gets the task name associated with a task ID
      taskNameTold( ) Looks up the task ID associated with a task name
      taskIdSelf( ) Gets the caling task's ID
      taskIdVerlfy( ) Verilfys the existence of specified task

       

       

      Task 옵션

      Task가 생성될 때, 아래 표에 나열된 하나 이상의 옵션 파라미터를 넘겨줄 수 있다. 결과는 명시된 옵션에서

      논리 OR연산을 수행함으로써 결정된다.

       

      Name Hex Value Description
      VX_FP_TASK 0x0008 Excutes with the flotion-point coprocessor.
      VX_NO_STACK_FILL 0x0100 Does not fill the stack with 0xee.
      VX_PRIVATE_ENV 0x0080 Executes a task with a private environment.
      VX_UNBREAKABLE 0x0002 Disables breakpoints for the task.
      VX_DSP_TASK 0x0200 1 = DSP coprocessor support.
      VX_ALTIVEC_TASK 0x0400 1 = ALTIVEC coprocessor support

       

       

       

       

       

      728x90
      반응형

      'OS > vxWorks' 카테고리의 다른 글

      VxWorks (Task 생성 / RS232 통신 )  (0) 2017.06.30
      VxWorks OS구성 / 개발 방법  (2) 2017.06.30
      VxWorks Workbench / 전기신호 강의 정리  (0) 2017.06.30
      VxWorks / SBC 강의 정리  (0) 2017.06.30
      Tornado Tutorial  (0) 2017.06.26
    상단으로