2011-10-12 3 views
2

우리가 taskSpawn을 할 때 작업이 vxworks에서 생성됩니다. 실제로 작업이란 무엇입니까? 스레드와 어떤 관계가 있습니까?vxworks의 작업

제 생각에는 vxworks는 스레드 기반 운영 체제입니다.

실제 시나리오에서 작업/스레드/프로세스 간의 실제 차이점을 알려주십시오.

어딘가에 작업 집합 명령의 실행입니다. 스레드가 그렇다면 스레드는 일부 명령어 세트를 가지므로 스레드를 태스크로 호출 할 수 있습니다.

답변

6

스레드는 일반적으로 당신이 프로세스를 실행 운영체제 지원 프로세스 모델 (유닉스/리눅스/윈도우)와 함께 사용되는 개념입니다 도와주세요.
이 프로세스는 단일 실행 스레드 (예 : 간단한 C 프로그램)를 가질 수 있습니다. 또는 현재 프로세스 메모리 공간에서 병렬로 특정 작업을 수행하기 위해 여러 스레드를 작성할 수 있습니다.

이전 버전의 vxWorks에는 프로세스 모델이 없었습니다. 모든 것이 동일한 메모리 공간에서 실행됩니다. vxWorks 작업은 시스템 코드가 실행되는 컨텍스트를 제공합니다. 모든 코드 (인터럽트 처리기 제외)는 Task의 컨텍스트에서 실행됩니다.

작업은 독립 실행 형 실행 단위입니다. 그들은 자원을 공유하고 공통 메모리를 가질 수 있지만 스케줄러는 매우 특정한 기준에 따라 작업을 실행합니다. 일반적으로 시스템에서 가장 우선 순위가 높은 작업은 주어진 시간에 실행될 작업입니다.

작업이 리소스를 기다리는 동안 완료/취침/차단되면 시스템에서 우선 순위가 가장 높은 우선 순위 작업이 실행됩니다.

목적에 따라 스레드를 작업이라고 생각할 수 있습니다.

2

작업은 OS 디자인에서 추상적 인 개념입니다. 작업은 단일 실행 컨텍스트입니다. 작업에는 데이터와 코드가 저장되는 곳에서 작동하는 메모리 공간이 있습니다. 이 메모리 공간은 다른 작업과 공유되거나 공유되지 않을 수 있습니다. 작업은 상태 (예 : 실행 중, 중지됨, 종료 중 ...)이며 스택 (일반적으로)이 있습니다. 작업은 다른 작업보다 우선합니다.

이러한 작업의 예로 VxWorks 작업이 있습니다. 또 하나는 Linux 스레드입니다.

Linux에서 (그리고 나는 VxWorks btw의 최신 버전을 믿습니다.) 관련 작업 그룹 개념이 있습니다. 동일한 그룹에 속한 작업은 메모리 공간 및 다른 여러 리소스 (예 : 파일 핸들러)를 공유합니다. Linux 프로세스는 그러한 작업 그룹입니다.

큰 경우 OS 스케줄러가 프로세스가 아니라 작업을 예약합니다. 이 과정은 프로그래머가 관련 스레드 그룹을 함께 생각할 수있는 대류적인 추상화입니다.

도움이 되었기를 바랍니다.

0

vxWorks에서 작업은 실행 가능한 단위입니다.

작업에는 고유 작업 공간 및 특정 우선 순위 (taskSpawn 함수에서 정의한대로)가있는 TCB (작업 제어 블록)가 있습니다.

vxWorks 스케줄러는 태스크 만 실행할 수 있습니다. 이것은 최소 실행 가능한 유닛입니다 (스케줄러는 커널 자체를 실행할 수 있고 시스템에서 인터럽트를 실행할 수 있음).

실행할 작업은 작업 상태 (READY에 있어야 함)와 작업 우선 순위 (vxWorks에서는 가장 높은 우선 순위가 낮은 번호 임)에 따라 결정됩니다.

여러 작업이 동일한 우선 순위에있을 수 있으며 커널은 구성된 구성 (FIFO 또는 라운드 로빈)에 따라 다른 작업을 실행합니다.

vxWorks에서 모든 작업에는 동일한 메모리 공간 (커널 메모리 공간 포함)이 있습니다. 이것이 WindRiver가 vxWorks 6.x에서 "프로세스와 유사한"메커니즘을 추가 한 이유입니다. 프로세스에는 MMU로 보호되는 자체 "가상 메모리 공간"이 있습니다.

그냥 당신을 위해 여름합니다 :

작업은 시스템을 통해 동일한 메모리 공간을 가지고있다.

스레드는 프로세스 내에서 동일한 메모리 공간을 갖습니다.

MMU로 보호되는 프로세스 메모리 공간.

+0

사실, SMP를 사용하여 여러 작업을 병렬로 실행할 수 있습니다 – mjs

0

기존 anwers 외에도 : VxWorks 시스템에서 POSIX 스레드를 생성해야하는 경우 (커널 구성에 POSIX를 포함시키고 pthread_create()를 호출하여 가능함) 이러한 스레드가 나타납니다 (C 쉘에서 'i'를 입력하십시오).

따라서 작업과 스레드는 매우 비슷합니다. VxWorks는 POSIX 스레드를 작업으로 래핑하기 때문에 기존 기본 작업과 병행하여 처리 할 수 ​​있습니다.

0

프로세스 및 스레드는 프로세스와 유사합니다. 하지만 차이점은 스레드 자체가 프로세스 자체의 PCB (스택) 아래에서 실행하는 별도의 메모리 공간이 없다는 것입니다. 그러나 태스크는 자체 스택 영역을 가지며 가벼운 가중 프로세스 즉, tcb는 따라서 컨텍스트 스위칭이나 작업 전환이 더 빨리 발생할 수 있습니다. vxworks가 rtos를 처리하고 전환 대기 시간이 매우 적어야하므로 작업을 처리합니다.