[운영체제] 프로세스, 스레드

ssh00n·2023년 4월 21일
0

운영체제

목록 보기
2/3

프로그램, 프로세스, 스레드

프로그램(Program)

우리가 어떠한 작업(task)을 수행 하기 위해 이에 필요한 코드(a set of instructions)를 작성하고 이 코드를 실행 가능한 파일로 만드는 작업을 거친다. 이 때 만들어진 파일을 프로그램이라고 하는데, 프로그램은 그 자체로는 아무런 기능도 하지 않고 메모리에 적재되어 사용되어야 한다.

👉 프로그램 : 작업(task)을 수행하기 위해 코드(instructions)들로 만들어 진 실행 가능한 파일

프로세스(Process)

프로그램이 메모리에 적재되는 순간, 프로그램은 실행되어 다양한 작업을 수행할 수 있다.

실행중인 프로세스를 잘 살펴 보면 각 프로세스가 사용중인 메모리, 스레드, CPU 사용률 등을 확인할 수 있다.
이를 통해 프로세스운영체제가 자원을 할당하는 단위가 될 수 있다는 것을 알 수 있다.

👉 프로세스 : 운영체제에게 자원(메모리)을 할당받아 CPU에 의해 실행/제어 되고 있는 프로그램

스레드(Thread)

위 사진을 보면, 각각의 프로세스가 여러 개의 스레드를 가지고 있다. 이를 통해 자원을 할당받는 단위와 실제 작업을 수행하는 단위다르다는 것을 알 수 있다.

👉 스레드 : 하나의 프로세스 내에서 실행되는 각각의 실행 흐름

그렇다면 스레드를 사용하는 이유는 무엇일까❓

Multi-Process에 비해 Overhead 절감
Multi-process 로 실행되는 작업을 Multi-thread로 실행하면

  • 프로세스를 생성하면서 자원을 할당하는 과정이 줄고
  • 프로세스들을 context switching하는 것보다 오버헤드를 더 줄일 수 있다.

주소공간 공유

  • 스레드는 주소공간을 공유하기 때문에 동일한 값에 접근할 수 있다.
  • 스레드 간의 context switching 에서는 주소 공간을 그대로 사용한다.
    👉 따라서 프로세스 간 통신비용보다 스레드 간 통신비용이 훨씬 적다.

쓰레드와 프로세스의 차이점

  • 스레드는 주소공간을 공유하지만, 프로세스는 공유하지 않는다. 따라서 프로세스끼리 통신을 위해서는 IPC라는 프로세스 간 데이터 통신 기법을 사용해야 하며 데이터 통신이 까다롭다.
  • 단일 스레드 프로세스에서는 스택이 하나만 존재하지만, 멀티 스레드 프로세스의 경우 각 스레드가 독립적으로 실행되며, 스레드가 실행하기 위해 여러 루틴들을 호출할 수 있다.
  • 주소 공간에는 쓰레드마다 스택이 할당되어 있다.

Multi-Process vs. Multi-Thread

멀티 프로세스(Multi Process)
👉 하나의 프로그램을 여러 개의 프로세스로 나눠 사용하는 것

장점

  • 각 프로세스는 독립적인 메모리를 사용하여 안전하다.
  • 각각의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 미치지 않는다.

단점

  • 각 프로세스는 서로 독립된 메모리 공간을 할당 받았으므로, 메모리 공유를 위해 IPC(Inter Process Communication)기법을 사용해 공유해야 하는데, 이 과정에서 추가적인 비용이 발생하고 다소 비효율적이다.
  • 프로세스 간 Context Switching은 무거운 작업이므로 시간이 오래 걸린다.

Multi Thread
👉하나의 프로세스가 여러개의 스레드를 갖고, 각 스레드가 서로 다른 작업들을 수행

장점

  • 프로세스를 추가적으로 생성하지 않기 때문에, 비용 측면에서 효율적이다.
  • 스레드는 동일한 프로세스 내 자원을 공유하기 때문에, 데이터 공유에 있어 프로세스에 비해 효율적이다.

단점

  • 공통된 자원을 공유하기 때문에, 설계가 복잡하다.
  • 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 발생한다.
profile
Whatever I want

0개의 댓글