프로세스와 스레드

beluga000·2024년 8월 9일
0
post-thumbnail

프로세스(Process), 스레드(Thread) 정의

Process

  • 프로세스는 운영체제에서 실행 중인 프로그램의 독립적인 인스턴스이며, 하나의 프로그램은 여러 개의 프로세스를 생성할 수 있습니다.
  • 프로세스는 독립적인 실행 환경을 가지며, 각 프로세스는 고유의 메모리 공간을 할당 받습니다.
  • 프로세스는 CPU 스케줄링의 기본 단위이며, 다른 프로세스와는 메모리 공간이 격리되어 있어 상호 간섭이 없습니다.

Thread

  • 스레드는 프로세스 내에서 실행되는 작업의 단위로, 여러 스레드가 하나의 프로세스 안에서 실행될 수 있습니다.
  • 스레드는 프로세스의 메모리 공간을 공유하며, 동일한 데이터에 접근할 수 있습니다.
  • 스레드는 프로세스 내에서 경량화된 단위로, 스케줄링과 관리가 비교적 적은 오버헤드로 이루어집니다.

메모리 및 자원 관리

Process

  • 각 프로세스는 독립적인 메모리 공간을 가집니다. 따라서 프로세스 간에 데이터를 주고받으려면 IPC(Inter-Process Communication, 프로세스 간 통신) 메커니즘을 사용해야합니다.
  • 프로세스는 자체적인 자원을 소유하며, 다른 프로세스의 자원에 직접 접근할 수 없습니다.

Thread

  • 동일한 프로세스 내의 스레드는 메모리 공간을 공유합니다. 따라서 스레드 간에는 데이터를 공유하기 쉽지만, 이를 적절히 관리하지 않으면 동기화 문제(데드락, 경쟁상태)가 발생할 수 있습니다.
  • 스레드는 동일한 프로세스의 자원에 접근할 수 있으며, 이는 스레드 간의 통신을 더 쉽게 만들어줍니다.

생성 및 종료

Process

  • 프로세스의 생성과 종료는 비교적 무겁고, 많은 자원(메모리, 파일 핸들, 장치 등)을 소모합니다.
  • 프로세스 생성은 운영체제에서 새로운 메모리 공간을 할당하고, 필요한 리소스를 초기화해야 하므로 시간이 더 걸립니다.

Thread

  • 스레드는 비교적 가볍고, 프로세스 내에서 여러 스레드는 쉽게 생성하고 종료할 수 있습니다.
  • 스레드 생성은 운영체제가 프로세스 내의 공유 메모리를 사용하기 때문에 프로세스 생성보다 훨씬 빠르고 자원이 적게 소모됩니다.

실행 및 스케줄링

Process

  • 프로세스는 운영체제의 스케줄러에 의해 독립적으로 스케줄링됩니다. 하나의 프로세스가 실생 중일 때, 다른 프로세스는 대기 상태가 될 수 있습니다.
  • 각 프로세스는 독립적으로 실행되며, 여러 프로세스가 동시에 실행되더라도 서로 간섭하지 않습니다.

Thread

  • 스레드는 프로세스 내에서 병렬로 실행될 수 있으며, 운영체제는 여러 스레드를 동시에 스케줄링할 수 있습니다.
  • 스레드는 프로세스의 일부분이기 때문에, 하나의 스레드가 예외적으로 종료되면, 전체 프로세스나 다른 스레드에도 영향일 미칠 수 있습니다.

메모리 영역

Process

  • 코드 영역(Text Segment) : 프로그램의 실행 코드가 저장되는 영역, 모든 프로세스는 이 영역에 있는 명렁어를 실행됩니다.
  • 데이터 영역(Data Segment) : 초기화된 전역 변수와 정적 변수가 저장, 이 영역은 프로그램이 시작할 때 이미 값이 할당된 데이터로 채워집니다.
  • 힙 영역(Heap Segment) : 동적으로 할당된 메모리가 저장되는 영역, 프로세스는 실행중에 메모리를 동적으로 할당받고, 이 메모리 공간은 힙에 위치합니다. 힙 영역은 런타임에 크기가 변할 수 있습니다.
  • 스택 영역(Stack Segment) : 함수 호출과 관련된 지역 변수 및 함수 호출 스택 프레임이 저장되는 영역, 스택은 함수 호출 시 새로운 프레임이 추가되고 함수가 종료되면 해당 프레임이 제거됩니다.

프로세스는 가상 메모리 주소 공간을 가집니다. 운영체제는 이 가상 메모리 주소를 물리적 메모리 주소로 매핑하기에 각 프로세스는 자신만의 주소 공간을 가지므로, 서로 다른 프로세스는 서로의 메모리 공간에 영향일 미치지 않습니다.

Thread

  • 스레드는 동일한 프로세스 내에서 실행되기 때문에, 프로세스의 모든 메모리 공간을 공유 즉, 스레드는 코드, 데이터, 힙 영역을 다른 스레드와 공유합니다.
  • 하지만 각 스레드는 고유한 스택 공간을 가지고 있습니다. 스택은 함수 호출 시 사용되며, 지역 변수와 함수 호출 정보가 저장됩니다.
  • 스레드의 스택은 스레드 실행 중에만 유효하며, 스레드가 종료되면 스택도 사라집니다.

스레드 간에 메모리 공간이 공유되기 때문에, 동기화 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해서는 락, 세마포어, 뮤텍스 등과 같은 동기화 메커니즘이 필요합니다. 이러한 메커니즘을 통해 여러 스레드가 동일한 데이터를 동시에 수정하지 않도록 제어합니다.

결론

프로세스는 운영체제에서 실행 중인 프로그램의 독립적인 인스턴스로, 고유의 메모리 공간을 할당받아 다른 프로세스와 메모리를 공유하지 않으며, 프로세스 간 통신을 위해서는 별도의 메커니즘이 필요합니다. 반면, 스레드는 동일한 프로세스 내에서 실행되는 경량 실행 단위로, 코드, 데이터, 힙 등의 메모리 영역을 다른 스레드와 공유하면서도, 각 스레드는 고유한 스택을 갖습니다. 이러한 특성 덕분에 스레드는 효율적인 병렬 처리가 가능하지만, 공유 자원에 대한 동기화 문제를 적절히 관리해야 합니다.

profile
Developer

0개의 댓글