Post

Process를 이해해보자

1. Process

  • “관리”의 “단위”를 말한다.
    • “관리”란 OS에서 한다.
  • 여기서 말하는 “단위”, 프로세스라고 하는 건 연산 꺼리인데 이 연산이라는게 대단히 연속적이고 이어서 가게 되어있는데, 결국 흐름을 만들게 되어있다. 그런데 이 흐름이라는게, 프로세스에는 기본적으로 “1개” 있다.
    • 이 “흐름”이라는 걸, 플로우(Flow)라고도 하고 컨텍스트(Context)라고도 한다.
    • 이 흐름이라는게 막 연산이 되다가 외부 요인, 혹은 변수에 의해서 흐름이 바뀌기도 한다.
    • 그런데 기본적으로 프로세스가 존재한다면 거기에 쓰레드도 1개가 반드시 존재한다.
  • 그런데 프로세스에 이 흐름이 1개가 아니라 여러 개 있을 수도 있다.
    • 이 때 문제는 이 흐름들이 동시에, 각자 작동한다.
    • 이렇게 한 프로세스 내에 여러 개의 쓰레드가 작동하면 멀티 쓰레딩한다고 표현한다.
      • 프로세스가 여러 개면 멀티 태스킹이라고 표현한다.

1.1 정리

  • Process(작업)는 최소 1개의 Thread가 존재.
  • OS는 Virtual Memory(제한된 공간)을 Process에게 제공한다. 즉, Process에게 RAM에 직접적인 접근을 허용하지 않고 OS가 RAM과 HDD, 혹은 SSD 일부로 만들어낸 Virtual Memory를 생성해내 연산에 필요한 연습장을 제공한다.
  • Process에 속한 모든 Thread는 Process의 Virtual Memory로 공간이 제약된다. (이게 중요하다)

1.2 Multi-threading

이 멀티 쓰레딩엔 위에서 알아본 쓰레딩이라는 것에 “멀티”가 붙는 만큼 동시성동기화가 따라 붙는다.

프로세스부터 멀티 쓰레딩까지 이해하기 쉬운 예시를 들어보자면, 가족, 한 가구가 Process고 이 가족이 사는 집이 Virtual Memory이다. 그리고 가족 구성원 개개인은 각각 쓰레드이며, 집에서 공용으로 사용하는 거실, 화장실과 같은 시설이 있는가 하면 각자의 개인 공간인 자기 방도 있는데, 이 것을 Thread Local Storage라고 한다. 그리고 이 것 말고도 스택 구조로 관리되는 메모리 공간이 따로 있다.

거실 같은 공간은 Heap이다.

이제 프로세스의 필요성을 설명해보겠다. 쓰레드만 여러 개 사용해도 괜찮을 것 같은데, 굳이 프로세스를 사용하는 이유가 뭐냐, 프로세스 없이 멀티 쓰레딩을 한다고 하면 각 쓰레드에 VM와 힙을 분배해야 한다. 프로세스당 분배해서 나눠 사용하고 공유할 수 있던 상황과는 차이를 갖는다. 둘 중 뭐가 더 효율적이냐, 하는 것은 논쟁이 있다.

This post is licensed under CC BY 4.0 by the author.