[OS] Process vs Thread

은승균·2022년 9월 7일

프로세스와 쓰레드

운영체제 공부를 하면 꼭 물어보는 내용인 프로세스와 쓰레드에 대해서 정리해보겠다.

프로세스

프로세스는 프로그램의 실행 단위라고 할 수 있다. 즉, 우리가 크롬 브라우저를 실행하고, 카카오톡을 실행하고, VS CODE를 실행하고 하는 작업들은 각각 프로세스가 실행되는 것이라고 생각할 수 있다.
이러한 프로그램들은 운영체제의 통제 하에 실행이 된다.
즉, 운영체제가 프로세스를 관리한다고 생각해 볼 수 있다.
운영체제는 프로세스의 생성, 스케줄링, 종료를 담당하게 된다.
이러한 과정에서 OS로부터 시스템 자원을 할당 받는다.

시스템 자원에는 다음과 같은 것들이 있다.

  • CPU
  • 메모리 영역(Code, Data, Stack, Heap)
  • 메모리 주소공간

프로세스의 특징

위에서 프로세스가 운영체제로부터 시스템 자원을 할당받는 다고 하였다. 여기서 생각해볼 수 있는 프로세스의 특징이 있다.

  • 프로세스는 각각 독립된 메모리 영역을 가지게 된다.
  • 프로세스는 각각 별도의 주소공간을 가지게 된다.

즉, 프로세스간에는 서로의 메모리 주소공간에 접근할 수 없다. 그래서 기본적으로는 다른 프로세스의 변수에 접근할 수 없다.
프로세스간의 통신은 IPC, 파일 등을 이용해 할 수 있다.

동시성

우리는 컴퓨터를 사용할 때 여러 프로그램을 동시에 사용한다.

하지만 프로세스는 스케줄링 규칙에 따라 자기 차례가 되면 CPU를 할당 받아 작업을 진행해야한다. 그렇다면 CPU가 하나일 때는 동시에 작업이 안되는 걸까?
이 분야에서는 동시라는 말이 엄밀한 의미의 동시가 아니다. 동시성이란 마치 동시에 작업하는 것 처럼 느끼도록 하는 것이다.

이러한 동시성을 제공하기 위해서 CPU는 여러 프로세스를 이것 조금하고, 저것 조금하고 이렇게 돌아가면서 실행하면서 진행한다.

이 과정이 매우 빠르게 돌아가기 때문에 우리는 프로그램이 마치 동시에 실행되는 것처럼 느낄 수 있는 것이다.

멀티 프로세스

두개 이상의 프로세서(CPU)가 하나 이상의 작업을 동시에 처리하는 것을 멀티 프로세스라고 한다.
여기서 '동시에'란, 동시성에서 동시가 아닌 엄밀한 의미의 '동시', 즉 한 번에 두 가지 이상의 일을 하는 것을 의미한다.

각 프로세서는 프로세스에 할당되어 작업을 처리한다.

장점

프로세는 각각 독립된 메모리 영역, 주소공간을 가진다.

  • 독립된 자원을 할당 받기 때문에 서로 영향을 끼치지 않는다.

IE는 멀티 쓰레드 방식, Chrome은 멀티 프로세스 방식이다. IE는 한 탭에서 튕기면 모든 탭이 죽어버린다. 이는 뒤에서 설명할 쓰레드의 특징 때문이다. 하지만 Chrome은 각 탭이 각 프로세스로 실행되기 때문에 탭 하나가 죽어도 다른 탭에는 영향을 주지 않는다.

프로세스는 CPU를 할당받아 작업을 진행한다.

  • 멀티 프로세서에서 여러 개의 프로세스가 디스크의 데이터를 공유하며 같은 작업을 진행하게 된다면 큰 일을 여러개로 쪼개서 동시에 진행하기 때문에 전체 비용(시간)이 감소하게 된다.

단점

  • 독립된 메모리 영역을 가지고 있기 때문에 다른 프로세스의 작업을 할 때 Context Switching 오버헤드가 발생한다.

    CPU가 현재 실행중인 프로세스의 정보(PCB)를 저장하고 다른 프로세스의 정보를 불러오는 과정

쓰레드

한 프로세스 내에서 여러 갈래의 작업이 진행될 수 있다. 이렇게 한 프로세스 내의 여러 실행 흐름쓰레드라고 한다.
여러 실행 흐름이라는 말은 한 프로세스 내에 여러 쓰레드가 있을 수 있다는 말이다.
멀티 쓰레드이다.

멀티 쓰레드

한 프로세스 내의 여러 쓰레드라고 하면 이 쓰레드는 프로세스에 할당 된 자원을 공유할 수 있다는 것을 알 수 있다.
하지만 모든 자원을 공유하는 것은 아니다.

쓰레드는 메모리 영역 중 코드, 데이터, 영역을 공유한다. 즉, 각 쓰레드는 각자 다른 스택 영역(지역 변수, 함수 등)을 가지게 된다.

장점

메모리 영역의 일부를 공유하기 때문에 CPU가 모든 정보를 저장하고 다른 정보를 불러와 교체를 할 필요가 없다.
즉, 컨텍스트 스위칭 오버헤드가 적다. 또한 메모리 영역의 자원을 공유할 수 있기 때문에 서로 긴밀하게 연결되어 메모리 사용을 효율적으로 할 수 있다.

  • 공유 자원으로 쓰레드 간 통신비용 절감
  • 컨텍스트 스위칭 비용이 적다
  • 메모리 사용이 효율적이다

단점

하지만 단점도 있는 법. 자원을 공유한다는 것은 서로 영향을 끼칠 수 있다는 말이다.
즉, 한 놈에게 문제가 생기면 다른 애들한테도 영향을 줄 수 있다는 것!
또한 공유하는 자원에 여러 쓰레드가 접근하게되면 데이터의 일관성이 보장되지 않아 원하는대로 바뀌거나 사용되지 않을 수 있다. 이러한 상태를 Race Condition이 발생했다고 한다.

  • 쓰레드간 영향을 줄 수 있다.

    위의 IE와 Chrome의 차이

  • Race Condition이 발생하여 데이터의 일관성이 보장되지 않는다.

    동기화 작업이 필요하다.

정리

프로세스쓰레드
프로그램의 실행 단위프로세스 내의 여러 실행 흐름
독립된 메모리 영역, 주소공간Code, Data, Heap 공유, 독립된 Stack 영역
컨텍스트 스위칭 비용 메모리 효율적, 컨텍스트 스위칭 비용 적음
서로 영향을 주지 않아 안정적서로 영향을 줄 수 있다. Race Condition 발생 가능

0개의 댓글