[Philosophers] 프로세스와 스레드

Yejin Kim·2022년 8월 1일
0

42 cursus

목록 보기
16/20

Program

어떤 작업을 위해 실행할 수 있는 파일
우리가 어떤 file에 실행가능한 코드를 작성하면 그것이 바로 프로그램이다 !

Process

컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
운영체제로부터 시스템 자원(ex. CPU, 메모리 영역 등)을 할당받고 실행된 상태의 프로그램의 인스턴스
프로그램이 메모리에 올라가서 OS(운영체제)로부터 CPU를 할당받고 프로그램이 실행되는 상태

각 프로세스는 각각 독립된 메모리 영역을 할당받는다.
프로그램 별로 실행될 때 (Code, Data, Stack, Heap)에 대한 메모리 영역이 할당되는 것이다.

각 프로레스는 별도의 주소 공간에서 실행되므로 각각의 변수 등에 접근할 수 없다.
다른 프로세스의 자원에 접근하기 위해서는 IPC(Inter Process Communication)을 사용해야함

Inter Process Communication

  • PIPE
  • Socket
  • Semaphore
    etc

Thread

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

스레드는 Process에서 code, data, heap 영역은 공유하고
Stack만 각각 할당받는다.

따라서 한 프로세스 내에서 여러 스레드가 있을 때,
스레드1이 프로세스의 자원을 변경하면 다른 스레드들도 그 변경사항을 확인할 수 있다.

Multi-Process, Multi-Thread

Multi-Process(멀티 프로세스)

  • 하나의 프로그램을 여러 개의 프로세스로 구성
  • 여러 개의 프로세스가 하나의 작업을 처리한다.

    ex. pipex, minishell 에서 우리는 멀티 프로세싱을 통해 작업을 수행한다.

특징

  • 안정성
    프로세스 간 자원이 분리되므로, 하나의 프로세스에 문제가 발생했을 때 비교적 안정적
  • IPC(프로세스 간 통신)
    프로세스 별 메모리 공간이 별도로 할당되므로 프로세스 간 통신 시에는 IPC를 통해야 한다.
  • 메모리 사용량 많음
  • 성능 저하의 우려
    Scheduling(스케쥴링)에 따라 Context Switch가 많아질 수 있다.

    Context Switch
    운영 체제는 한정된 CPU 자원을 할당하는 Scheduler를 통해 여러 프로세스가 CPU를 효율적으로 사용할 수 있도록 한다.
    프로세스 A가 CPU를 점유 중일 때, 다른 프로세스 B가 CPU를 사용할 수 있도록 하기 위해, 이전 프로세스의 상태를 저장하고 새 프로세스의 상태를 적재한다.
    이 때, 이전 프로세스의 상태 저장 및 새 프로세스 상태 적재가 너무 자주 일어나게 되면 성능 저하가 될 수 있다.

Multi-Thread(멀티 스레드)

  • 하나의 프로그램을 여러 개의 스레드로 구성
  • 여러 스레드가 하나의 작업을 처리

특징

  • 자원 공유가 쉬움
  • 비용이 적다
    프로세스에 대한 할당보다 스레드 할당의 비용이 적어서 성능이 비교적 좋다
  • 구현, 테스트, 디버깅의 어려움
  • 동기화 및 교착 상태
    자원을 공유하기 때문에 생기는 문제로 변수를 읽고 쓰는 타이밍에 따라 결과가 달라지는 문제가 생길 수 있음!
    이를 주의하여 코드를 구현해야 함

🦋 Philosophers repo address
https://github.com/kyj93790/42-cursus/tree/master/Philosophers


참고 사이트

profile
The World Is My Oyster 🌏

0개의 댓글