티스토리 뷰

CS/운영체제 정리

3주차. Thread 정리

구름뭉치 2021. 9. 24. 15:24

Thread

Q. 스레드란?

A. a thread is basic unit of CPU utilization

멀티 쓰레드는 프로세스 내부의 CPU 수행 단위인 Thread가 여러개 있는 것

 

같은일을 하는 프로세스를 여러개 실행하고 싶은 경우

→ 전부 실행시 각각 메인 메모리에 올리고 가상 메모리 공간을 가져야 하므로 메모리 낭비가 일어난다.

  • 웹을 띄우기 위해 이미지를 가져오고, 코드를 처리하는 데 이를 각각의 프로세스로 띄운다는 등, 동일 작업에 대해 별개의 프로세스를 갖는 것
  • 크롬은 탭 별로 각각의 프로세스이며, 하나의 창에서도 주소창, 플러그인, 그외 부분에서도 여러 프로세스가 존재한다. 단, 페이지를 로드하기 위한 작업은 쓰레드 별로 이뤄진다. (웹페이지를 읽어오기, 이미지 보여주기, html 코드 렌더링하기 등)

 

Multi Thread 프로세스의 PCB 구성

멀티 스레드 프로세스의 PCB

  • 하나의 프로세스로 주소 공간(code, data, stack)은 하나만 갖고, 하나의 작업에 대해 다른 부분의 코드를 실행하는 것을 각각의 thread로 구현한다.
  • thread는 프로세스의 Code, Data를 공유하고, Stack에 스레드 별로 스택 공간을 갖는다.
    (프로세스가 커널에 프로세스 별 스택 공간을 갖는것과 동일하다.)
  • PCB는 스레드 별로 PC와 각종 레지스터의 중간값을 보관한다.
  • 멀티 스레드인 경우에도 프로세스는 하나이므로 PCB도 하나이고, CPU 관련 정보에 대한 부분만 스레드 별로 갖게 된다.

 

Thread가 별도로 갖는 값

Program Counter : 현재 코드의 어느부분을 실행하고 있는지 가리키는 PC.

Register Set : CPU에서 실행되면서 메모리 레지스터의 값을 뭘로 세팅해놓고 실행했는지 정보.

Stack space : 쓰레드가 code를 실행하다가 함수를 호출 시 해당 함수 호출 및 반환의 정보를 stack에 쌓아야 하므로
PCB Stack 영역에서 각 스레드마다 별도의 스레드 스택 공간을 갖는다.

 

→ 즉, 별도의 공간을 갖는 부분을 최소화하고 공통의 공간을 최대한 가지는 방식

쓰레드끼리 공유하는 부분(Task) : Code, Data, OS resources

 

멀티 스레드의 장점

하나의 프로세스안에 여러 쓰레드를 갖게 되면, 하나의 쓰레드가 Blocked 상태일 때, 다른 쓰레드가 CPU를 잡고 Running을 할 수 있어서 응답시간이 빨라진다.

 

예를 들어 브라우저의 창(프로세스)에서 웹서버에서 웹페이지를 불러올 때를 생각해보자.

 

해당 프로세스는 목적지 웹서버에서 정보를 가져오기 위해 통신을 하면서 blocked 상태가 된다.

하지만, 웹 브라우저가 복수의 스레드구조를 가지게 되면, 웹서버에서 데이터를 가져오는 작업을 하는 스레드만 Blocked되고
먼저 가져온 텍스트, 이미지 등에 대해서 먼저 보여주는 작업을 하므로서 좀 더 빠른 처리를 할수 있다.

 

응답의 완료를 기다리지 않고 먼저 처리하는 비동기식 입출력으로 인해 응답성이 빠르고 이미지, html 코드, Text 등을 병렬처리하므로 병렬성이 높아진다.

또한, 각각의 프로세스로 올라가게 되면 메모리 낭비가 심하지만 → 하나의 프로세스안에 복수의 쓰레드를 두면 메모리나 자원을 절약할 수 있다.

 

Responsivness (응답성)

  • 프로세스의 스레드가 웹 서버에서 요청을 받아오는 것을 기다리지 않고 다른 일을 바로 처리하는 식이므로 스레드의 비동기식 입출력 처리라고 볼수 있다.
  • 한 스레드가 입출력으로 인해 작업이 진행되지 않아도 다른 스레드가 작업을 계속하여 사용자의 작업 요구에 더 빠른 응답이 가능하다.

Resource Sharing (자원공유)

  • N개의 스레드가 하나의 프로세스 상에서 Code, Data, 각종 OS 자원을 공유해서 사용하므로 자원을 아낄수있다.

Economy (효율성)

  • Creating Thread & Thread CPU context switching의 비용이 Process의 생성 및 Process의 Context Switching의 오버헤드보다 훨씬 작다.
    (생성 측면에서는 30배, 문맥교환의 경우 5배 정도 차이가 난다)
  • 불필요한 자원의 중복을 막을 수 있으므로 효율적이다.

Utilization of Mulit Processor Architectures (다중 CPU 지원)

  • Multi Processor Architecture에서 Thread가 여러개 있으면 각각의 Thread를 여러 CPU에서 병렬적으로 처리할 수 있다.

 

Thread 종류

Kernel Threads

  • 커널에의해 지원된다.
  • 쓰레드가 여러개 있다는 사실을 운영체제가 인지하고 있다.
  • 하나의 쓰레드에서 다른 쓰레드로 CPU가 넘어가는 것도 커널이 CPU 스케쥴링을 하듯이 넘겨주게 된다.

User Threads

  • 라이브러리에의해 지원된다.
  • OS는 쓰레드가 여러개있는지는 모르고, User 프로그램이 여러 쓰레드를 관리하는 것이다. (라이브러리의 지원을 통해)
  • 커널이 복수의 쓰레드가 있음을 모르므로 (커널의 도움이 없어서) 제약이 있을 수 있다.
반응형
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday