운영체제 - 프로세스(2)

WooHyeong·2022년 12월 28일
0

OS(Operating System)

목록 보기
5/7

Thread 쓰레드

스레드는 프로세스 내부의 cpu 수행 단위가 여러 개 있는 경우를 스레드라고 부른다.
프로세스가 하나 주어지면 code, data, stack으로 구성된 주소공간이 프로세스마다 만들어진다. 그리고 프로세스 하나를 관리하기 위해 운영체제 내부에 pcb를 두고 프로세스의 상태, id를 나타낸다. pcb에서 프로그램 카운터가 현재 메모리의 어느 부분을 실행하고 있는지를 가르키고 있다. 동일한 작업을 하는 프로세스가 여러 개 있다고 하면, 이것을 별도의 프로세스로 만들면 메모리 주소 공간이 여러 개 만들어지게 된다. 프로세스마다 별도의 주소공간이 만들어져서 메모리가 낭비된다. 같은 일을 하는 프로세스를 여러 개 띄워놓고 싶다면, 메모리 공간 하나만 띄워놓고 현재 각 프로세스마다 다른부분의 코드를 실행할 수 있게 해주면 되는 역할을 스레드가 해준다.
스레드라는 것은 프로세스 하나에 cpu 수행단위만 여러 개 두고 있는 것을 스레드라고 부른다.

스레드는 cpu를 수행하는 단위이다.

  • Thread의 구성은 프로그램 카운터, 레지스터 셋, 스택만 독립적으로 갖고 있다.
  • 프로세스 내부에서 Thread들끼리 공유하는 부분(=task)은 코드, 데이터, 운영체제 자원이 있다.
  • 그래서 스레드를 lightweight process 라고 부른다. 아무래도 프로세스를 별도로 두는 것보다 프로세스 안에 스레드를 여러 개 두는 것이 훨씬 더 가볍다. 그렇지 않은 경우는 heavyweight process 라고 부른다.

Thread의 장점

  • 다중 스레드로 구성된 task구조에서는 하나의 서버 스레드가 blocked(waiting) 상태인 동안에도 동일한 task 내의 다른 스레드가 실행(running)되어 빠른 처리를 할 수 있다.
  • 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있다.
  • 스레드를 사용하면 병렬성을 높일 수 있다. (cpu가 여러개 달린 컴퓨터에서만 가질 수 있는 이점)

스레드를 이용하면 빠른 응답성을 제공한다는 점과 자원을 절약한다는 장점이 있다. ex) 웹브라우저를 여러개 띄우는 경우 각각의 프로세스를 만들게 되면 메모리 낭비가 심하다. 그렇게 하지 않고 하나의 프로세스 안에 스레드를 여러개 두면 성능 향상이나 자원을 절약할 수 있는 효과가 있다.

프로세스 스레드가 여러개 있게 되면, cpu 수행과 관련된 정보(프로그램 카운터, 레지스터)만 각각 스레드마다 별도의 카피를 갖게 된다.


우측에 다중 스레드 그림처럼 스레드가 여러개 있는 경우 code, data 등 여러 자원들 같은 것은 공유하게 되고, cpu 수행과 관련된 정보(register set, stack)는 스레드마다 별도로 갖게 된다.

스레드의 장점

  • 응답성 : 사용자 입장에서 빠르다. 웹브라우저가 스레드를 여러개 갖고 있으면 하나의 스레드가 멀리 있는 서버에서 데이터를 들고 오고 그 안에 있는 이미지 파일들을 웹서버에 요청하게 된다. 요청을 한 순간 그 프로세스가 원래는 블락되지만, 스레드를 여러개 두게 되면 요청한 스레드만 블락이 되고 다른 스레드는 동작한다.

  • 자원 공유 : 똑같은 일을 하는 프로그램이 여러 개 있다면, 별도의 프로세스를 사용하는 것보단, 하나의 프로세스를 만들고 그 안에 스레드를 여러개 두게 되면 각종 데이터 자원들을 공유할 수 있게 되어 자원을 효율적으로 사용할 수 있게 된다.

  • 경제성 : 프로세스를 하나 만드는 것은 오버헤드가 크다. 그렇지만 스레드를 하나 추가하는 것은 오버헤드가 크지 않다. 또한 문맥 교환은 오버헤드가 상당히 크다. 그렇지만 프로세스 내부에서 스레드 간의 cpu switch가 일어나는 것은 간단하다.

  • Utilization of MP(Multi Processor) Architectures : cpu가 여러개 있는 환경에서 얻을 수 있는 장점. 프로세스는 하나지만 스레드가 여러 개 있으면 각각의 스레드가 서로 다른 cpu에서 병렬적으로 일을 할 수 있어서 결과를 빠르게 얻을 수 있다.

본 포스팅은 이화여대 반효경교수님 운영체제 강의를 바탕으로 작성하였습니다.

profile
화이링~!

0개의 댓글