스레드 개념

프로세스 문제점

  1. Heavy-weight: 프로세스는 주소 공간, PCB 등을 저장해야 하기 때문에 커널이 해야 하는 일이 많아지고 메모리를 많이 차지한다. 또한 IPC를 할 때 커널의 개입이 필요해서 성능이 떨어진다. 이러한 문제를 해결하기 위해 선 마이크로소프트의 Lightweight Process (LWP)가 개발되었다. 프로세스를 실행 상태(주소 공간, PC, SP 등)와 분리한다. POSIX 표준화 과정을 거쳐서 만들어진 것이 스레드이다. 프로세스를 따로 만들지 않고 하나의 프로세스 안에서 여러 개의 path로 동작하게 한다. 스레드라고 불리는 이유는 path를 실처럼 표현하기 때문이다.

멀티스레드

  1. 스레드 생성: 싱글 스레드는 함수1 수행 후 함수2를 수행하는 순차적인 형식이다. 멀티스레드는 스레드를 함수 단위로 구현한다. 함수1, 함수2를 pthread_create()와 같은 시스템 콜의 인자로 넘겨줘서 스레드를 생성해서 병렬적으로 동작하는 것처럼 구현한다. 2개의 함수의 스레드를 만들면 메인 스레드를 포함해서 3개의 스레드가 존재하는 것이다. 보통 멀티스레드 환경에서는 스레드로 만들 함수들을 무한 루프로 구현한다. pthread는 POSIX 표준을 따르는 스레드와 관련된 라이브러리이다. pthread_create, pthread_exit, pthread_join 등의 함수가 존재한다. join은 멀티프로세스에서 동기화를 위해 사용한 wait과 동일하다.

  2. 차이점: 코드 세그먼트와 데이터 세그먼트, 파일 I/O는 스레드끼리 공유해서 사용하지만, 특정 함수를 스레드로 만드는 것이므로 스레드별로 다른 데이터를 관리하기 위해서 스택을 따로 가지고 있다. 코드 섹션은 공유하지만 수행되어야 하는 instruction의 위치가 다르기 때문에 레지스터 값과 스택 포인터의 값도 스레드별로 다르다. 즉, 스레드마다 레지스터 정보와 스택 영역은 독립적이다.

  3. 주소 공간: 코드 세그먼트, 데이터 세그먼트, 힙은 공유하고 스택 위에서부터 스레드가 쌓인다. 스레드 사이에는 가드 영역이 존재하고 운영체제가 그 크기를 지정한다. 각각의 스레드가 수행되다가 멈췄을 때의 context를 스택이나 커널 단에 저장해서 관리한다.

  4. 싱글 프로세스/멀티 프로세스/멀티 스레드 비교: DoCmd 함수를 수행하는 형태를 비교한다.

Multicore Programming

  1. 개념: 여러 개의 코어에서 병렬적으로 연산을 처리한다. 싱글 코어일 때는 테스크가 여러 개일 때 타임쉐어링으로 동작해도 순차적으로 동작하는 것과 같다. 멀티코어의 경우에는 하드웨어 상의존성이 없는 테스크를 병렬적으로 수행해서 효율을 올린다. Parallelism에는 두 가지 종류가 있다.

스레드의 형태

구현 방식

  1. 유저 스레드: 한 프로세스에서 여러 개의 path가 존재하도록 하려면 커널을 수정하는 방식과 어플리케이션 단에서 동작하도록 하는 방식이 있다. 유저 스레드는 라이브러리 형태로 스레드가 어플리케이션 단에서 동작하도록 구현한 것이다. 프로세스 안에 런타임 시스템을 만들고 스레드를 관리한다. 프로세스에서 어떤 스레드가 동작하고 있는지 테이블을 통해서 관리하고 런타임 시스템이 스케줄링한다. 커널은 스레드에 대한 정보가 없다. 커널의 오버헤드가 줄어드는 장점이 있다. 하지만 유저 스레드 방식은 큰 문제가 있다. 여러 개의 스레드가 동작하고 있는데 첫 번째로 런타임에 의해 선정된 스레드가 blocking I/O 요청을 한다면 다른 스레드는 수행되지 못하고 CPU에서 내려와야 한다. OS에게 스레드에 대한 정보가 없기 때문에 발생하는 문제이다.
  2. 커널 스레드: 커널에서 프로세스와 스레드 테이블을 만들어서 관리하는 형식이다. 커널 스레드 형식이 현재 많이 사용되는 형식이다. 스레드 스케줄링 등을 훨씬 최적화해서 운영할 수 있다. 오버헤드가 많지만 하드웨어가 발전하면서 많이 사용하게 되었다.

멀티스레딩 모델

  1. Many-to-One: 하나의 커널 스레드에 여러 개의 유저 스레드.커널의 오버헤드를 줄이기 위해서 커널 스레드를 줄인 형식이다. 위의 유저 스레드 형식이 구현된 것이다.