OS - Thread Management

Shyuuuuni·2023년 4월 18일
0

운영체제

목록 보기
2/2
post-thumbnail

CS 복습을 위해 강의 영상을 정리한 내용을 공유합니다.
전체 정리는 Notion을 참고해주세요.

스레드

프로세스 vs 스레드

  • 프로세스는 자원을 할당받고, 제어하며 원하는 작업을 처리한다.
  • 즉, 프로세스는 자원과 제어 두가지 개념이 필요하다.
  • 그 중에서 제어 역할만 하는 것을 스레드라고 볼 수 있다.
  • 자원을 여러 가지로 제어할 수 있다. = 하나의 프로세스 안에 여러 스레드가 존재할 수 있다.

프로세스 구조

  • 프로세스는 제어 정보(스택 포인터, 프로그램 카운터, 상태 등) + 지역 데이터 + 스택을 가지고 있다.
    • 스택에 지역 데이터(지역 변수)가 저장된다.
  • 그리고 프로세스는 리소스를 위한 메모리 영역도 가지고 있다. 코드 + 전역 데이터 + 힙 등 리소스를 관리하는 영역이다.
  • 스레드는 제어 부분을 처리하는 개념이므로, 아래와 같이 표현할 수 있다.
    • 스레드 = 제어 정보(SP, PC, state) + 지역 데이터(변수) + 스택 메모리
    • 하나의 프로세스에 여러개의 스레드가 존재할 수 있고,
    • 하나의 메모리 공간을 공유한다.

스레드 구조

  • 하나의 프로세스 내에 여러개의 스레드가 존재할 수 있다.
  • 각 스레드는 각각의 고유 영역을 가지고 있다.
  • 그리고 힙, 데이터, 코드와 같은 리소스 영역을 공유할 수 있다.

스레드 정리

  • 스레드를 다른말로 Light Weight Process (가벼운 프로세스) 라고 한다.
  • 스레드는 프로세서를 활용할 수 있는 기본 단위다. 다른 말로, 스레드가 여러개라면 동시에 여러개의 CPU를 사용할 수 있다.
  • 구성 요소는 프로세스의 제어 요소와 비슷하다.
    • 스레드 ID
    • 레지스터 Set (PC, SP)
    • Stack (각각의 작업 영역)
  • 코드, 데이터, 리소스 등은 프로세스 내 다른 스레드와 공유한다.
  • 한 프로세스 안에 하나의 스레드만 있다면? 단일 스레드 프로세스라고 하고, 전통적 프로세스라고도 한다.

스레드 특징

스레드의 장점

사용자 응답성

  • 작업을 분할했기 때문에, 일부 스레드 처리가 지연되어도 다른 스레드가 작업을 처리하고 응답할 수 있다.

자원 공유

  • 만약 하나의 리소스를 스레드를 사용하지 않고 여러개의 프로세스로 작업한다고 가정해보자.
  • 두 프로세스는 자원을 번갈아 사용해야 하기 때문에, Context Switching이 발생할 수 있다.
  • 이 과정은 오버헤드가 있는 연산이기 때문에, 성능이 하락할 수 있다.
  • 하지만 프로세스 안에 두개의 스레드가 있다면? 하나의 프로세스가 자원을 할당받아서 사용하기 때문에 Context Switching이 발생하지 않는다.
  • 즉, 여러 자원이 같은 리소스를 활용해야 하는 경우 스레드가 유리할 수 있다.

경제성

  • 작업을 위해 새롭게 프로세스를 생성하거나, 기존 프로세스와 Context Switching 하는 것 보다 효율적이다.

멀티 프로세서 활용

  • 스레드가 프로세서의 기본 작업 단위이므로, 병렬 처리를 통한 성능 향상이 가능하다.

스레드 종류(구현)

유저 스레드

  • 사용자 영역의 스레드 라이브러리로 구현할 수 있는 스레드.
  • 라이브러리를 통해 스레드 생성, 스케줄링이 가능하다.
    • ex) POSIX threads, Win32 threads, Java threads API
  • 이렇게 생성된 스레드는 커널이 알 수 없다.
    • 커널이 생성하고 관리하는 스레드가 아니고, 커널은 프로세스 단위로 자원을 할당하기 때문이다.
    • 유저 스레드의 단점은, 커널은 결국 프로세스 단위로 자원을 할당하므로, 프로세스 내부의 하나의 스레드에서 Block이 발생하면 프로세스 전체가 Block 상태가 될 수 있다.
    • 사용자 영역의 프로세스 = 커널 영역의 스레드 1개 → 프로세스 내부에 스레드 라이브러리를 통해 여러개의 스레드를 만들고, 스레드 제어 블록을 통해 관리한다.

커널 스레드

  • OS, 커널이 직접 관리하는 스레드.
  • 커널 영역에서 스레드를 생성하고, 관리한다.
    • 사용자 영역에서 스레드가 만들어지면, 그에 맞추어 커널 영역에서도 스레드를 생성하고 관리한다.
    • 스레드를 관리하는 것도 커널 레벨에서 관리한다.(TCB in Kernel)
  • 커널 스레드의 단점은 커널이 직접 관리하므로 Context Switching 등 오버헤드가 크다. 프로세스의 Context Switching보다는 아니지만, 스레드끼리 프로세서를 사용하기 위한 Context Switching 오버헤드가 발생할 수 있다.
  • 커널 스레드의 장점은 유저 스레드와 반대로, 프로세스 내 스레드들이 병행 수행이 가능하다. 하나의 스레드가 Block되어도 전체 프로세스는 Block되지 않는다.

혼합형 스레드

  • 유저 스레드는 1:n, 커널 스레드는 1:1 이므로 두개의 장점을 같이 사용하는 모델.
  • n개의 사용자 스레드 : m개의 커널 스레드를 사용한다. (사용자 스레드 수 > 커널 스레드 수)
  • 장점으로는 사용자 영역에서 원하는 만큼의 스레드를 사용하면서도, 커널 영역에서는 1개보다 많은 스레드를 사용하므로, 하나의 스레드가 Block 되더라도 다른 스레드로 병행 처리가 가능하다. (효율적 + 유연함)
profile
배짱개미 개발자 김승현입니다 🖐

1개의 댓글

comment-user-thumbnail
2023년 4월 20일

단일 프로세스 멀티 스레드일 때 Context Switching이 일어나지 않는다기 보다는, Thread Context Switching랑 Process Context Switching이 있고 Process Context Switching 비용이 더 크다 정도로 보는게 좋을 듯.. (과거 20세기 서적들에서 단일 스레드 프로세스 기반으로 서술)
Process Context Switching 비용이 더 큰 이유는 TCB/PCB 간 크기 차이와 추가 처리도 있겠지만, 주로 캐시 미스가 많아져서 메모리 액세스가 잦아지기 되기 때문. (지역성)

답글 달기