프로세스 vs 스레드, 스레드의 종류

MinHwi·2022년 5월 3일
0

OS

목록 보기
4/6
post-custom-banner

이 포스팅은 숙명여자대학교 김주균 교수님의 운영체제 강의를 바탕으로 작성되었습니다. 자세한 내용은 OS? Oh Yes! 누워서 보는 운영체제 이야기를 참고하세요. (누워서 볼 만한 책은 아닙니다 하지만 쉽게 쓰여진 책은 맞음)

프로세스 vs 스레드

  • Process
    • 큰 틀이다. 예를 들어, 쇼핑을 하는 인터넷 사이트를 띄웠을 때 생기는 일
    • 자원의 할당 단위, 자원에 대한 보호된 액세스 보장
  • Thread
    • 세분된 작은 일이다. 예를 들어, 작은 동영상, 입력칸, 배경음악 등
    • 스케줄링의 단위, 즉 CPU를 할당받는 단위
    • 프로세스의 자원을 공유하면서 각자 자신의 실행 환경 데이터를 가짐(PC, Stack, Register)
    • 다중 스레딩 : 하나의 프로레스를 다수의 스레드로 만들어 실행하는 것. 다수의 실행 단위가 자원을 공유하기 때문에 자원의 생산과 관리 중복을 줄일 수 있다.

스레드를 사용하는 이유

  • 성능 : 스레드를 만들고 없애고 스위칭에 소요되는 시간이 프로세스 단위로 이루어질 때보다 빠르고 저렴하다.
    • 단일 프로세서 상황에서 시간적 이점은 없을 수 있지만(스레드를 여러개로 나누나 프로세스 하나로 처리하나 똑같음), 활용에 따라 시간을 단축할 수도 있다.
  • 데이터 통신 : 프로세스 간의 통신은 커널 개입을 필요로 하지만, 한 프로세스 내의 스레드 간 통신은 자원을 공유하므로 커널의 개입이 필요하지 않다.
  • 프로그램을 여러 개의 스레드로 구현하여 시간과 비용을 줄일 수 있다.

스레드의 구성

  • 스레드는 자신의 제어 블록과 스택을 가진다.
  • 동시에 프로세스의 정보인 PCB와 사용자 주소 공간을 공유한다. 자신이 속한 프로세스의 상태와 자원들은 자연스럽게 공유된다.

스레드의 상태와 동기화 문제

프로세스와 마찬가지로 스레드도 실행, 준비, 대기와 같은 상태를 가진다. 다만 보류는 프로세스 레벨의 개념이므로 스레드 레벨에서는 신경 쓸 필요가 없다. 프로세스가 자원의 소유자라는 개념을 떠올려보면 자연스럽다.

한 프로세스 내의 스레드들은 그 프로세스의 주소 공간과 자원을 공유한다. 이는 특정 스레드가 변경시킨 내용이 다른 스레드에 바로 영향을 미친다. 따라서 오류를 야기할 수 있는 상호 간섭을 방지하기 위해 스레드 실행의 동기화가 요구된다. 이 문제는 프로세스 간의 동기화에서 발생하는 문제 및 해결책과 동일하다. 이 링크 참고.

스레드의 종류


스레드의 종류 : 사용자 레벨, 커널 레벨, 혼합

User Level Thread

  • 커널은 스레드의 존재를 모른다.
  • 커널은 프로세스만 보인다. → 스레드 각자가 일으키는 행위를 프로세스의 행위로 인식한다.
  • 스레드에 대한 모든 관리는 스레드 라이브러리가 한다.
  • 특정 스레드의 대기 : 자신이 소속된 프로세스의 대기를 초래한다.
  • 스레드의 실행 : 커널이 프로세스 스위칭을 수행해도 당시 실행 중이던 스레드는 라이브러리에 의해 실행 상태라고 표시되었다가 다시 CPU를 받으면 다시 실행된다.
  • 장점
    • 사용자 레벨 스레드는 스레드 스레드 스위칭에 커널의 개입이 필요하지 않다. 즉 유저 → 커널, 커널 → 유저 두 번의 모드 스위칭이 필요하지 않다.
    • 어떤 운영체제에서도 운영이 가능하다. 스레드간의 스위칭은 운영체제의 스케줄링을 따르지 않고 라이브러리를 따르기 때문이다.
  • 단점
    • 특정 스레드의 대기가 자신이 소속된 프로세스 내의 모든 스레드 대기를 초래한다.
    • CPU가 프로세스 단위로 할당되므로 스레드 단위의 다중처리가 불가능하다.
    • 여러 스레드가 다른 CPU를 할당받아 동시에 실행될 수 없다.

Kernel Level Thread

  • 모든 스레드의 관리를 커널이 한다.
  • 장점
    • 한 스레드가 대기할 경우, 다른 스레드로 스위칭이 가능하다.
    • 스레드 단위의 다중처리가 가능하다.
    • 다중처리 환경일 경우에도 병렬 실행이 가능하다.
  • 단점
    • 스레드 스위칭에 커널이 개입하므로, 모드 스위칭이 요구된다. (인터럽트 처리)

혼합 스레드

  • 커널이 모든 스레드를 보고 있다.
  • 커널이 매번 스레드 스위칭에 개입하면 부담이 되니
  • 자잘한 일들은 스레드 라이브러리가 보조하도록 한다.
  • 스레드 라이브러리가 커널 레벨의 스레드를 또 쪼갤 수 있는데, 이 경우 커널은 하나의 스레드로 본다.
profile
딩가딩가 백엔드 개발자
post-custom-banner

0개의 댓글