[OS] Thread

kmjoo·2022년 1월 10일
0
post-thumbnail
post-custom-banner

Thread = basic unit of CPU utilization (CPU의 수행 단위)

Thread

Thread의 개념

  • 동일한 일을 하는 프로세스가 여러 개 있다면, 이들을 별도의 프로세스로 만들면 프로세스별로 메모리 주소공간이 여러 개 만들어짐 → 메모리 낭비

    • 같은 일을 하는 프로세스를 여러 개 띄워놓고 싶다면 주소공간은 하나만 띄워놓고 프로세스마다 다른 부분의 코드를 실행할 수 있도록 하면 됨 ⇒ 이것이 프로세스의 개념
  • 즉, 프로세스 하나에 CPU 수행 단위만 여러 개 두고 있음

    • 각 Thread마다 현재 register에 어떤 값을 넣고, PC가 어느 부분을 가리키고 있는지, stack 정보 등을 별도로 유지함
      - 즉, Thread는 프로세스 하나에서 공유할 수 있는 것(메모리 주소공간, 프로세스 상태, 프로세스가 사용하는 각종 자원 등) 은 최대로 공유하고, CPU 사용과 관련된 정보(PC, registers, stack 등)는 별도로 가짐
  • Thread = lightweight process 라고도 부름

    • 프로세스를 별도로 두는 것보다, 프로세스 안에 Thread를 별도로 두는 것이 훨씬 가볍기 때문
    • 전통적인 프로세스는 heavyweight process 라고 부름
      • 하나의 Thread를 가지고 있는 task

Thread의 구성

  • Thread 간에 독립적으로 가지는 것
    • Program counter
    • register set
    • stack space

Task

  • Thread가 동료 Thread와 공유하는 부분
    • code section
    • data section
    • OS resources
  • 하나의 프로세스 안에는 하나의 task가 존재함 (공유하므로)

Thread의 장점

  • Responsiveness (빠른 응답성)
    • 하나의 프로세스 안에 Thread를 여러 개 두면, Thread 하나가 blocked 상태일 때 다른 Thread가 CPU를 잡고 running할 수 있어서 응답시간이 빨라짐
      • ex) 웹브라우저에서 naver를 볼 때, Network를 통해 웹페이지를 읽어옴 (I/O 작업에 해당). 웹페이지를 읽어오는 동안에는 웹 브라우저가 blocked 상태가 됨. 이는 사용자 입장에서 답답함. 따라서 웹브라우저를 여러 개의 Thread를 사용해서 프로그램을 만들어놓게 되면, 하나의 Thread가 naver 웹서버에서 그림 등을 불러오는 동안에 이 프로세스를 blocked 시키지 않고(해당 thread만 block됨), 또다른 thread가 이미 읽어온 text를 화면에 display함으로써 사용자가 결과를 빨리 볼 수 있도록 함. 즉, 사용자에게 빠른 응답성(Responsiveness)을 제공할 수 있음
        • 일종의 비동기식 입출력이라고 볼 수 있음. (I/O 결과를 보고 나머지 작업을 하는 것이 아니라, I/O를 던져놓고 할 수 있는 나머지 작업을 하니까)
  • Resource Sharing (자원 공유)
    • 같은 일을 하는 작업을 별도의 프로세스로 만들어두면, 메모리 등의 자원이 낭비됨. 즉, Thread를 사용하면 자원을 절약할 수 있음
  • Utilization of MP Architecture
    • (CPU가 여러 개 달린 컴퓨터에서는,) 스레드 사용 시 병렬성을 높일 수 있음
  • Economy
    • 프로세스를 하나 만드는 작업, context switch가 일어나는 작업 등에 비해 thread를 만들고, thread 간 switch를 하는 것이 overhead가 훨씬 작음
      • thread 간의 switch는 간단함 (동일한 주소공간을 쓰고 있기 때문에 대부분의 문맥을 그대로 사용할 수 있기 때문)
  • throughput
    • 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율을 얻을 수 있음

Thread 구현 방법

  • Kernel Threads
    • OS kernel의 지원을 받고 있음
    • Thread가 여러개 있다는 사실을 OS kernel이 알고 있음
      • 따라서 하나의 Thread에서 다른 Thread로 CPU가 넘어가는 것도 kernel이 CPU scheduling을 하듯이 넘겨줌
  • User Threads
    • 라이브러리를 통해서 지원됨
    • 프로세스 안에 Thread가 여러개 있다는 사실을 OS가 모름
      • 구현 상의 제약점이 있을 수 있음
    • User program이 스스로 여러 개의 thread를 관리함
    • kernel이 볼 때는 일반적인 프로세스로 보임
      • 프로세스 본인이 CPU 수행단위를 내부에 여러개 두어서 관리함
  • real-time Thread 등도 존재함

질문



참고 링크

KOCW 운영체제 - 이화여대 반효경 교수 (2014-1) 6, 7강

profile
개발 취준생
post-custom-banner

0개의 댓글