태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

'Thread'에 해당되는 글 2건

  1. 2008/07/19 프로세스(process)와 스레드(thread)
  2. 2008/07/19 멀티스레드 프로그램의 구현 방법
스폰서 링크

1. 프로세스
프로세스는 샐행중인 프로그램을 말한다. 운영체제는 프로그램을 실행하기 위해서 이 프로세스를 생성하게 된다.
운영체제의 프로세스 관련 정보는 다음과 같다.
 - 프로세스 상태(process state) : 프로세스가 실행중인지, 준비(ready)상태인지, 이벤트를 기다리고 있는지, 중단(suspend)된 상태인지 확인이 가능하다.
 - 프로그램 카운터(program counter) : 다음에 실행될 명령어의 주소다.
 - 프로세서 레지스터 값 : 프로세스가 CPU의 사용 권한을 얻을 때 프로세스를 restore 한다..
 - 메모리 관리 정보 : 페이지 테이블, 파일 기술자(descriptor), I/O request 등의 정보를 포함한다.

2. 스레드
스레드는 프로세스 내의 실행 유닛을 말한다. 스레드는 프로세스에 비해서 빨리 생성 될 수 있고, 다른 스레드와의 통신에 오버헤드가 작기 때문에 Parallel Programming에서 스레드를 사용하는것이 더 효율적이다.

3. 프로세스와 스레드
프로세스는 하나이상의 스레드를 포함한다. 프로그램이 실행되면 주 스레드(main-thread)가 프로그램의 main 함수를 실행한다. 주 스레드는 프로그램 내의 다른 함수를 실행하는 부 스레드(sub-thread)를 생성할 수 있다.
그리고 프로세스 내의 여러 스레드는 프로그램 카운터, 프로세서 레지스터, 스택을 스레드는 별로 따로 갖는다. 반면에 스레드는 코드나 주소 공간 같은 프로세스의 자원을 다른 스레드와 공유해서 사용한다. 즉, 같은 프로세스 내의 스레드는 항상 주소 공간을 공유 한다.

Posted by cncdenny
스폰서 링크

멀티스레드 프로그램은 두 가지 방법에 의해 구현될 수 있다.

1. pthreads와 Windows 스레드와 같은 저 수준 스레드 라이블러리를 이용하는 방법
 스레드 생성 시 pthread_create, CreateThread 함수를 이용한다. 이 방법은 스레드를 미세하게 제어하는데 유리하지만 스레드에 대한 많은 이해를 필요로 한다. (Thread pool을 직접 구현해야 한다.)
 저 수준 스레드 라이블러리를 이용하는 방법은 UI등의 비동기 처리를 구현이나 예외 처리 구조를 구현하는데 적당하다.

2. OpenMP 를 이용하는 방법
 OpenMP는 Multi-threaded 어플리케이션을 개발하기 위한 API로 공유 메모리 환경에서 멀티스레드 병렬 프로그램을 작성할 수 있다.
스레드 생성시 #pragma omp parallel 키워드를 이용하게 되며 순차적으로 작성된 기존 코드를 점진적으로 병렬화하기 쉬운 방법이다.
이 방법은 내부적으로 Thread pool을 이용한 fork/join 모델을 사용한다.

OpenMP execution model

* OpenMP 공식 홈페이지 : http://www.openmp.org

Posted by cncdenny