[운영체제] 다중 스레드 모델

1 분 소요

사용자 스레드와 커널 스레드

http://dl.dropbox.com/s/6w99cbtyaeaun7h/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%8B%A4%EC%A4%91%20%EC%8A%A4%EB%A0%88%EB%93%9C%20%EB%AA%A8%EB%8D%B8-1.png

사용자 스레드

  • 사용자 스레드는 커널 위에서 지원되고 커널의 지원 없이 관리된다.
  • 구현된 스레드 라이브러리를 가져와 코드를 작성해 사용되는 스레드를 말한다.
  • 스레드 라이브러리는 스레드의 생성 및 스케줄링 등에 관한 관리 기능을 제공한다.
  • 동일한 메모리 영역에서 스레드가 생성 및 관리되므로 속도가 빠르다.
  • 여러 사용자 스레드들 중 하나의 스레드가 시스템 호출 등으로 중단되면, 나머지 스레드들도 모두 중단되버린다. 이는 커널이 프로세스 내부에 있는 스레드들을 인식하지 못하며, 해당 프로세스를 대기 상태로 전환시켜버리기 때문이다.

커널 스레드

  • 커널 레벨 스레드는 운영체제에 의해 직접 지원되고 관리된다.
  • 스레드가 시스템 호출 등으로 중단되더라도 커널은 프로세스 내의 다른 스레드들도 중단시키지 않고 계속 실행시켜 준다.
  • 사용자 스레드에 비해 생성 및 관리하는 것이 어렵다.

다중 스레드 모델

다대일 모델

http://dl.dropbox.com/s/y4rbtqehu982mwm/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%8B%A4%EC%A4%91%20%EC%8A%A4%EB%A0%88%EB%93%9C%20%EB%AA%A8%EB%8D%B8-2.png

  • 여러 사용자 스레드들을 하나의 커널 스레드로 매핑한다.
  • 한 스레드가 블럭을 유발하는 시스템 콜을 호출했을 경우, 전체 프로세스가 블럭되버리므로, 나머지 사용자 스레드들도 블럭 되버린다.
  • 한 번에 하나의 스레드만이 커널에 접근할 수 있기 때문에, 여러 스레드가 멀티 코어 시스템에서 병렬로 실행될 수 없다.
  • 이 모델을 사용 중인 시스템은 거의 존재하지 않는다.

일대일 모델

http://dl.dropbox.com/s/cgcxtqxqrdfjeps/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%8B%A4%EC%A4%91%20%EC%8A%A4%EB%A0%88%EB%93%9C%20%EB%AA%A8%EB%8D%B8-3.png

  • 각 사용자 스레드를 각각 하나의 커널 스레드로 매핑한다.
  • 한 스레드가 블럭 시스템 콜을 호출하더라도, 다른 스레드가 실행될 수 있다. 따라서, 다대일 모델보다 큰 병렬성을 제공한다.
  • 여러 스레드가 멀티 코어 프로세서에서 수행될 수 있다.
  • 사용자 스레드를 만드려면 매핑되는 커널 스레드를 만들어야 하며, 이로 인한 수많은 커널 스레드가 시스템에 부담을 줄 수 있다는 단점이 있다.
  • 리눅스, 윈도우를 포함한 대부분의 운영체제는 일대일 모델을 사용한다.

다대다모델

http://dl.dropbox.com/s/gjcyz27f8yd5n95/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%8B%A4%EC%A4%91%20%EC%8A%A4%EB%A0%88%EB%93%9C%20%EB%AA%A8%EB%8D%B8-4.png

  • 여러 개의 사용자 레벨 스레드를 이보다 같거나 적은 수의 커널 스레드로 매핑한다.
  • 위의 다대일 모델, 일대일 모델의 단점을 어느 정도 보완했다. 커널이 알아서 사용자 스레드와 커널 스레드간의 매핑을 적절히 조절해준다.

카테고리:

업데이트:

댓글남기기