[OS] 프로세스와 스레드

Wonjun Seo·2023년 8월 12일
0

프로세스

프로그램은 어떤 작업을 위해 실행할 수 있는 파일을 말한다.

  • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 객체)

  • 컴퓨터에서 연속적으로 실행되고 있는 프로그램

  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위

프로세스의 특징

  • 기본적으로 프로세스는 최소 1개의 스레드를 가지고 있다.

  • 각 프로세스는 별도의 주소 공간에서 실행되며 기본적으로 다른 프로세스의 자원에 접근할 수 없다.

  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간 통신(IPC)을 사용해야 한다.

    • 파이프, 파일, 소캣 등을 이용한 통신 방법
  • 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받는다.

    • 코드 영역(Code Area): 프로그래머가 작성한 프로그램이 저장되는 영역
    • 데이터 영역(Data Area): 코드가 실행되면서 사용한 환경이나 파일들의 각종 데이터들이 모여있다.
    • 스택 영역(Stack Area): 호출한 함수가 종료되면 되돌아온 메모리의 주소나 지역 변수등이 저장된다.
    • 힙 영역(Heap Area): 동적으로 할당되는 데이터를 위해 존재한다.

스레드

  • 프로세스 내에서 실행되는 여러 흐름의 단위

  • 프로세스의 특정한 수행 경로

  • 프로세스가 할당받은 자원을 이용하는 최소 실행 단위

스레드의 특징

  • 스레드는 프로세스 내에서 각 필요한 Stack만 할당받고, 나머지 영역은 다른 스레드와 공유해서 사용한다.

  • 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.

  • 한 스레드가 프로세스 자원을 변경하면 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있다.


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

운영체제는 프로세스마다 독립된 메모리 영역을 Code, Data, Stack, Heap의 형식으로 할당한다. 각각 독립된 메모리 영역을 할당해주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다.

이와 다르게, 스레드는 메모리를 서로 공유할 수 있다. 자세히는 프로세스가 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역은 따로 할당받고, 나머지 Code, Data, Heap 형식으로 할당된 메모리 영역은 서로 공유한다. 따라서, 스레드는 각각 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있게 된다.

요약하자면, 프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용한다는 차이점이 있다.


멀티 프로세스

하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것을 말한다.

멀티 프로세스의 특징

  • 여러개의 자식 프로세스 중 하나에 문제가 발생해도 다른 프로세스는 영향을 받지 않는다.

  • 프로세스 간 통신을 하기 위해서는 IPC를 통해야 한다.

  • 각각 독립된 메모리 영역을 가지고 있어, 작업량이 많을수록 오버헤드가 발생한다.

  • Context Switching으로 인한 성능 저하가 발생할 수 있다.


멀티 스레드

하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것을 말한다.

윈도우나 리눅스 등 많은 OS에서 멀티 프로세싱도 지원하지만 멀티 스레딩을 기본으로 하고 있다.

멀티 스레드의 장점

  1. Context-Switching 할 때 공유하고 있는 메모리만큼 메모리 자원을 아낄수 있다.

  2. 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어서 자원을 효율적으로 관리할 수 있다.

멀티 스레드의 단점

  1. 하나의 프로세스에 문제가 발생하면 프로세스 전체가 영향을 받는다.

  2. 자원을 공유하기 때문에 동기화나 교착상태가 발생할 수 있다.

  3. Thread-Safety에 문제가 없는지 확실한 설계가 필요하다.


References

https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Operating%20System/Process%20vs%20Thread.md

https://jaehoney.tistory.com/241

https://velog.io/@aeong98/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C#%EB%A9%80%ED%8B%B0%ED%83%9C%EC%8A%A4%ED%82%B9-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C

0개의 댓글