공사중

쉽게 정리한 운영체제 | 멀티 프로세스(Multi Process)와 멀티 스레드(Multi Thread) 본문

개발 | 운영체제

쉽게 정리한 운영체제 | 멀티 프로세스(Multi Process)와 멀티 스레드(Multi Thread)

행운개발자 LuckyDeveloper 2020. 11. 1. 10:38

본 포스팅은 아래의 주제를 다룹니다.

  • 프로세스(Process)란?
  • prcess context switching
  • 스레드(Thread)란?
  • thread context switching
  • 멀티 프로세스를 사용해야 하는 경우
  • 멀티 스레드를 사용해야 하는 경우

 


프로세스(Process)란?

    • 프로그램이 실행되어 메모리 공간이 할당되는 순간 프로세스가 됩니다. 
    • 프로세스는 자원 할당의 단위이자 스케줄링의 단위입니다.
    • 여러 작업을 동시에 수행해야 할 때, 부모 프로세스는 fork()를 호출해서 자식 프로세스를 생성합니다. 
    • 프로세스는 각각 독립적인 메모리 영역과 OS resource를 가집니다. 
      • Memory | Code : program code
      • Memory | Data : 전역변수, static 변수
      • Memory | Heap : 동적 할당된 메모리
      • Memory | Stack : 지역변수, 매개변수
      • OS resource : files, I/O devices 등

prcess context switching

  • process context switching의 경우 독립적으로 가지는 모든 자원을 store/restore 해야합니다. 뿐만 아니라 완전히 다른 프로세스가 실행되기 때문에 cache memory에 저장되어 있는 데이터도 모두 소멸됩니다. 
  • 프로세스 간의 통신을 하려면 IPC(Inter Process Communication)라는 복잡한 방법을 사용해야합니다. 

스레드(Thread)란?

    • 스레드는 프로세스 내에서 독립적인 실행 흐름을 가지는 단위입니다. 
    • 스레드는 스케줄링의 단위입니다. 
    • 여러 작업을 동시에 수행해야할 때, 프로세스는 thread()를 호출해서 스레드를 생성합니다. 
    • 스레드는 아래의 내용을 다른 스레드와 공유합니다.
      • Memory | Code : program code
      • Memory | Data : 전역변수, static 변수
      • Memory | Heap : 동적 할당된 메모리
      • OS resource : files, I/O devices 등
    • 스레드는 아래의 내용은 각각 독립적으로 가집니다.
      • register
      • Program Counter(PC)
      • Stack Pointer(SP)
      • Memory | Stack : 지역변수, 매개변수 

thread context switching

  • thread context switching의 경우 stack memory를 할당하고 regist, PC, SP 만 store/restore하면 됩니다. 
  • 스레드들 간의 통신은 Code, Data, Heap 영역을 공유하기 때문에 복잡한 방법 없이 같은 메모리에 동시에 접근할 수 있습니다. 단, critical section의 경우 lock()을 통해서 하나의 스레드만 순차적으로 접근해야합니다. 

멀티 프로세스를 사용해야하는 경우

  • 여러 개의 프로세스가 필요한 경우 ( ex 하나의 프로세스가 root의 역할을 해야하는 경우)

멀티 스레드를 사용해야하는 경우

  • 프로그램이 여러 개의 독립적인 일을 수행해야하는 경우 ( ex 스레드마다 독립적인 GUI를 그려야 하는 경우)
  • 여러 요청을 동시에 수행해야하는 서버 ( ex 스레드마다 하나씩의 요청에 대응하고, 응답 과정에서의 통신은 필요 없는 경우)
  • 큰 요청을 여러 개의 조각으로 나누고, 각각의 조각에 스레드를 할당할 수 있는 경우 ( ex 작은 조각들을 수행하는 과정에서 통신이 필요없고, 각 조각들의 결과를 모아서 최종적인 결과를 도출하는 경우)

참조