TIP-맥OS

About Task(With Process, Thread) 각각의 차이는?

무한열정 2011. 2. 22. 10:12

Task?

- 사전적 정의

     task [tæsk, tɑːsk] n. 
          ① (일정한 기간에 완수해야 할) 일, 임무; 작업, 사업; 과업.
          ② 노역, 고된[어려운, 불쾌한] 일.
          ③ 〖컴퓨터〗 작업(컴퓨터로 처리되는 일의 최소단위).

- 리눅스에서는...   태스크 = 자원소유권의 단위

  *리눅스에서의 태스크, 프로세스, 쓰레드, 프로그램의 차이?

   태스크:자원소유권의 단위 / 쓰레드:수행의 단위 / 프로세스:동작중인 프로그램 / 프로그램:디스크에 저장되어 있는 실행가능한 형태의 파일

      하나의 프로세스에는 하나 혹은 여러개의 쓰레드가 포함될 수 있다. 각 쓰레드는 수행을 위해 자원소유권을 가져야 한다.

      즉, 각 쓰레드가 하나의 테스크를 갖는다 볼 수 있다. 

 

Process?

- 동작중인 프로그램

- 커널로부터 자신만의 자원을 할당받음.

   *(총 4GB 크기의 가상메모리 공간. 0~3GB는 사용자 영역, 3~4GB는 커널 영역)

- 하위주소(0GB) ~ 상위주소에 차례로 , text, data, heap 영역이 위치하며, 3GB 부터 부터 하위주소 방향으로 stack

   영역이 위치한다.

    *text : CPU에서 수행되는 명령어들        data : 전역변수        heap : 메모리의 동적할당 영역(malloc 등)        stack : 함수, 지역변수등을 저장

- 프로세스의 생성 : fork(), vfork()

- fork()로 인해 생성된 자식 프로세스는 자원을 새로이 할당 받는다. 즉, 부모 프로세스와 자원을 공유하지 않는다.

   *사실 수행중에 자식 프로세스의 내용이 변하지 않는 동안은 부모 프로세스와 자원을 공유한다. 이를 COW(Copy on Write)라 한다.

    또한 수행되는 동안 변하지 않는 text 영역은 공유를 한다.

 

Thread?

- 수행의 단위 혹은 제어의 흐름(flow of control)

- 쓰레드의 생성 : clone(), pthread()

- 자식 쓰레드는 부모 쓰레드의 자원을 공유함.

   *자식 쓰레드들과 부모 쓰레드간에 모두가 자원을 공유하기 때문에 어느 한 쓰레드에서 메모리의 내용을 변경하게 된다면 이는 모든 쓰레드에

     영향을 미치게 된다.


원문 : http://www.cyworld.com/mjcblog/2819532


----------------------------------------------

간혹 아무렇지 않게 자주 사용한것들의 정의를 생각하면 아리까리 할때가 있다. ^^;;;

이번 스터디에서 GCD에 대한 발표를 할려고 정리하면서

참고를 해봤다.