스레드란?

GwanMtCat·2023년 9월 14일
0

오늘날의 운영체제는 프로세스의 낭비 요소를 제거하고, 프로세스의 작업의 유연성을 얻기 위해 멀티스레드를 사용한다.


스레드의 개념

프로세스가 생성되면 CPU 스케쥴러는 프로세스가 해야 할 일을 CPU에 전달하고 CPU가 수행한다.
이때 CPU 스케쥴러가 CPU에 전달하는 일 하나가 스레드이다.

CPU가 처리하는 작업의 단위는 프로세스로부터 전달받은 스레드이다.
운영체제 입장에서 작업단위는 프로세스이고, CPU 입장에서의 작업 단위는 스레드인 것이다.


프로세스와 스레드의 차이

프로세스끼리는 약하게 연결되어 있는 반면 스레드끼리는 강하게 연결되어 있다.
스레드는 멀티태스킹의 낭비 요소를 제거하기 위해 사용한다. 2개의 프로세스를 만드는 대신에 코드, 데이터 등을 공유하면서 여러 개의 일을 하나의 프로세스 내에서 처리하는 것이다.


하나의 프로세스 내에 여러 개의 스레드를 생성하는 멀티스레드는 코드, 파일등의 자원을 공유함으로써 자원의 낭비를 막고 효율성을 향상한다.

멀티스레드의 장점

프로세스 내 공유가 가능한 부분 (코드, 데이터, 힙) 을 제외하고, 실행과 관련된 부분 (스택) 을 스레드로 나누어 관리하면 자원의 중복 사용을 피함으로써 낭비를 막을 수 있다.

하나의 프로세스에서 여러 스레드를 사용하면 작업의 효율을 높일 수 있다.

  • 자원 공유

    • 한 프로세스 내에서 독립적인 스레드를 생성하면 프로세스가 가진 자원을 모든 스레드가 공유하게 되어 작업을 원활하게 진행할 수 있다.
  • 효율성 향상

    • 멀티스레드는 불필요한 자원의 중복을 막음으로써 시스템의 효율이 향상된다.
  • 다중 CPU 지원

    • 2개 이상의 CPU를 가진 컴퓨터에서 멀티스레드를 사용하면 다중 CPU가 멀티스레드를 동시에 처리하여, CPU의 사용량이 증가하고 프로세스의 처리 시간이 단축된다.

멀티스레드의 단점

멀티스레드의 경우 모든 스레드가 자원을 공유하기 때문에 한 스레드가 문제가 생기면 전체 프로세스의 영향을 미친다


멀티 프로그래밍, 멀티태스크, 멀티스레드, 멀티 프로세싱??

  • 멀티프로그래밍 (multi programming)

    • 단일 CPU에서 프로세스가 여러 개 실행되는 것을 말한다.
  • 멀티태스크 (multi task)

    • 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법, 즉 CPU 하나로 프로세스가 CPU를 차지하기 위한 상황에 있다면 이를 멀티태스크라고 한다.
  • 멀티스레드 (multi thread)

    • 프로세스 내 작업을 여러 개의 스레드로 분할함으로써 작업의 부담을 줄이는 프로세스 운영 기법이다.
  • 멀티프로세싱 (multi processing)

    • CPU 코어를 여러 개 사용하여, 여러 개의 스레드를 동시에 처리하는 작업 환경

멀티스레드의 모델

프로세스가 커널 프로세스와 사용자 프로세스가 있는것처럼 스레드에도 커널 스레드와 사용자 스레드가 있다.

  • 커널 스레드(kernal thread)
    • 커널이 직접 생성하고 관리하는 스레드
  • 사용자 스레드
    • 라이브러리에 의해 구현된 일반적인 스레드

사용자 스레드가 커널스레드를 사용하려면 시스템 호출로 커널 기능을 이용해야 한다.

사용자 스레드

운영체제가 멀티스레드를 지원하지 않을 때 사용하는 방법으로 초기의 스레드 시스템에서 이용하였다.

사용자 레벨에서 스레드를 구현하는 관련 라이브러리를 사용하여 커널이 지원하는 스케쥴링이나 동기화 같은 기능을 대신 구현해준다. 그러므로 커널 입장에서는 이 스레드는 하나의 프로세스 처럼 보인다.

사용자 스레드는 라이브러리가 직접 스케쥴링을 하고, 작업에 필요한 정보를 처리하기 떄문에 문맥 교환이 필요 없다.

사용자 프로세스 내에 여러 개의 스레드가 존재하지만 커널의 스레드 하나와 연결되기 때문에 1 to N 모델이라고 부른다.

여러 개의 스레드가 하나의 커널 스레드와 연결되어 커널 스레드가 입출력 작업을 위해 대기 상태에 들어가면 모든 사용자 스레드가 같이 대기하게 된다.

한 프로세스의 타임 슬라이스를 여러 스레드가 공유하기 때문에 여러 개의 CPU를 동시 사용할 수 없다.

커널 스레드

커널이 멀티스레드를 지원하는 방식으로, 하나의 사용자 스레드가 하나의 커널 스레드와 연결되어 1 to 1 모델이라고 부른다.

커널 스레드는 커널 레벨에서 모든 작업을 지원하기 때문에 멀티 CPU를 사용할 수 있고, 하나의 스레드가 대기 상태에 있어도 다른 스레드는 작업을 계속 할 수 잇다.

커널의 기능을 사용하므로 보안에 강하고 안정적으로 작동한다. 하지만 문맥 교환 시에는 오버헤드 때문에 느리게 동작하는 단점이 있다.

멀티레벨 스레드

사용자 스레드와 커널 스레드를 혼합한 방식으로 M to N 모델이라고 부른다.
멀티레벨 스레드는 사용자 스레드와 커널 스레드의 방식을 혼용하기 때문에 사용자 스레드와 커널 스레드의 장단점을 모두 가지고 있다.

0개의 댓글