쓰레드 개요

라마·2023년 7월 13일

운영체제

목록 보기
11/32

※ 전남대학교 박태준 교수님의 운영체제 강의를 듣고, 정리한 내용입니다.

프로세스의 문제점

프로세스 생성시 오버헤드가 크다는 단점이 존재하고, 프로세스 간 context switching 하는데도 오버헤드가 크다는 단점이 있습니다.

또 프로세스간 통신을 하려고 하니, 통신을 하기 위한 별도의 방법을 도입해야 한다는 단점이 존재했습니다.

프로세스 문제점

  • 오버헤드가 크다
  • 통신을 하기 위한 별도의 방법이 필요하다

즉 하나의 작업을 처리하려고 하는데, 이를 쪼개서 일할 때 번거롭다는 문제점이 나타나게 되었습니다.

예를 들어, 미디어 플레이어의 경우를 생각해본다면..

영상 처리, 소리 처리, 자막 처리 등등을 동시에 ( = 시분할 ) 작동이 이루어져야 합니다.

만약 각 기능들이 프로세스 기반 멀티태크싱으로 이루어진다면, context switching 하는데도 너무 무거워 결국 시분할 사이의 시간이 길어질 수 밖에 없게 됩니다.

이러한 문제를 해결하고자 쓰레드가 등장하게 되었습니다.


쓰레드

프로세스를 사용할 때 발생하는 문제점을 해결하고자 고안된 방법입니다.

프로세스보다 더 작은 실행단위이고, 현대 운영체제가 작업을 스케줄링하는 단위 입니다.

쓰레드

  • 프로세스보다 더 작은 실행단위
  • CPU 스케줄러가 CPU 에 작업을 전달하는 단위
  • 운영체제 입장에서 작업 단위는 프로세스!

쓰레드를 도입함으로써 프로세스의 생성 및 소멸에 따른 오버헤드가 감소했고, Context Switching 의 속도가 더 빨라지게 되었습니다.


프로세스는 쓰레드들의 컨테이너

프로세스는 쓰레드들을 담기 위한 컨테이너라고 볼 수 있습니다.

또, 쓰레드는 곧 함수라고도 볼 수 있습니다.

프로세스가 생성될 때 운영체제에 의해 자동으로 1개의 쓰레드가 생성되는데, 이를 메인 쓰레드 ( main ) 라고 부릅니다.

( 우리가 코딩할 때 쓰는 그 main 함수 )

또 하나의 컨테이너가 여러개의 쓰레드를 가지면, 이를 멀티쓰레드라고 부릅니다.

  • 다른 쓰레드들은 함수를 쓰레드로 만들어줄 것을 요청 → 생성
  • 그리고 각 쓰레드 별로 TCB ( Thread Control Block ) 이 생성됨
  • 이 TCB 는 PCB 에 등록됨

프로세스는 쓰레드들의 공유 공간 ( 환경 ) 을 제공해줍니다.

모든 쓰레드는 프로세스의 코드, 데이터, 힙 공간을 공유해서 사용하기 때문에, 쓰레드 사이 통신이 용이하다는 장점이 있습니다.

( 단, 스택은 쓰레드별로 별도의 공간을 사용함. 왜냐하면 각 지역 변수들은 따로 각자 관리 )

하지만 서로 다른 쓰레드가 동시에 전역 변수에 접근한다면 ( 데이터 영역 ), 쓰레드간 실행 순서를 알 수 없기 때문에 예상하지 못한 값이 나오게 됩니다.

예시

  1. 전역변수 s = 0
  1. thread1 에서 반복문을 돌면서 s 의 값에 1을 더하는 작업을 100번 반복
  1. thread2 에서 반복문을 돌면서 s 의 값에 1을 빼는 작업을 100번 반복

이 작업을 진행하고 나면 우리가 예상하는 값은 0 이 돼야 하지만..
서로 다른 쓰레드가 동시에 전역 변수에 접근하기 때문에 예상과 다른 값이 나오게 됩니다.

이를 공유자원 문제라고 합니다.

쓰레드도 마찬가지로 생명주기가 존재합니다.

  • 쓰레드로 만든 함수 종료 → 쓰레드 종료 ( TCB 제거 )
  • 프로세스에 속한 모든 쓰레드 종료 → 프로세스 종료
  • 프로세스가 종료되면 → 쓰레드도 당연히 종료

정리해보자면, 다음과 같습니다.

  • 프로그램의 실행 단위는 함수 → 쓰레드 단위는 결국 함수
  • 프로세스는 쓰레드들간 공유 자원 제공 ( 공유 공간 )
    • Stack 영역은 별개
  • 쓰레드의 실행 순서를 알 수 없음
    • 공유자원 ( 전역 변수 ) 의 합이 0 이 되질 않음

    • 하나의 자원을 여럿이 쓰려고 하니.. 문제!

      ( 이 문제는 후에 다룰 예정입니다. )


쓰레드 장단점

장점

  • CPU 응답성 향상
  • 자원 공유, 효율성 향상
  • 다중 COU 운용 용이

단점

  • 모든 자원을 공유한다는 말은, 하나의 쓰레드가 잘못되면 프로세스 전체가 죽을 수 있다는 뜻
  • 너무 많은 쓰레드는, Context Switching 이 너무 많이 일어날 수 있음

0개의 댓글