이번 시간에는 스레드에 대해서 알아보자. 스레드가 무엇인지, 어디에서 구현하는지, 어떻게 스케줄링을 해야하는지에 대해서 알아볼 예정이다.

 

 우선 스레드프로세스를 비교해보자.

 프로세스컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이라면 스레드의 경우 프로세스 내에서 연속적으로 실행되고 있는 흐름을 말한다. 스레드는 하나의 프로세스 내부로 제한되어 있고, 프로세스는 여러 개의 스레드를 가지고 있을 수 있다. 하나의 프로세스 내부에 위치한 여러 개의 프로세스는 서로 자원을 공유하기도 하고, stack이나 register의 경우, 독립적으로 사용하기도 한다. 따라서 응답성과 효율성이 향상된다는 장점이 있지만, 자원을 공유하기 때문에 하나의 스레드에 문제가 발생하는 경우 전체 프로세스에 영향을 미칠 수 있다는 문제점이 있다.

 

Thread

 

 스레드를 여러 개 사용하는 것을 멀티스레드라고 하는데, 이 멀티스레드에도 여러 개의 모델이 존재한다. 각각에 대해서 구체적으로 살펴보면 다음과 같다.

 

  • 커널 레벨 스레드

 커널 레벨 스레드란 스레드의 존재를 커널이 알고 있는 경우이다. 따라서, 커널 스레드 간의 switching은 작은 context switch를 필요로 하게 되고, 커널이 스레드를 관리하고 스케줄링한다. 커널이 제공하는 보안 서비스를 받을 수 있지만 상대적으로 커널의 비중이 커지기 때문에 시스템의 성능이 떨어질 수 있다는 단점이 존재한다.

 

  • 유저 레벨 스레드

 유저 레벨 스레드란 운영체제가 스레드의 존재를 모르는 경우이다. 따라서 OS는 스레드를 직접 스케줄링하지 않게 된다. 프로그래머는 스레드 라이브러리를 통해 스레드를 관리할 수 있다. 따라서 context switch가 필요 없게 되고, 처리 속도가 빨라지게 된다. 그러나 OS는 유저 레벨 스레드의 존재를 알지 못하므로 좋지 않은 스케줄링 결정을 내리게 될 수 있다.

 

 

'study > CS377 (2014)' 카테고리의 다른 글

CS377: Scheduling Algorithms  (0) 2020.03.11
CS 377: Processes  (0) 2020.03.11
CS377: Operating System Structures  (0) 2020.03.11
CS377: OS and Architecture  (0) 2020.03.10
CS 377: Introduction  (0) 2020.02.17

+ Recent posts