프로세스

  • 프로세스(process)란 일반적으로 CPU에 의해 처리되는 사용자 프로그램으로 실행중인 프로그램을 의미합니다.

 

 

프로세스와 프로그램

  • 프로그램은 일반적으로 하드 디스크 등에 저장되어 있는 실행 코드를 말합니다.
  • 프로세스는 프로그램을 구동하여 프로그램의 상태가 메모리 상에서 실행되는 작업 단위를 지칭합니다.
  • 프로그램은 보조 기억장치에 존재하며 실행되기를 기다리는 명령어와 정적인 데이터의 묶음입니다.
  • 이 프로그램의 명령어와 정적 데이터가 자원을 할당받고 메모리에 적재되면 프로세스가 됩니다.

 

프로세스의 특징

프로세스는 각각 독립된 영역(Code, Data, Stack, Heap)을 할당 받습니다.

  • Code 영역
    • 실행 명령을 포함하는 코드들이 들어가는 영역입니다.
    • 프로그램을 시작할 때 컴파일한 프로그램(기계어)이 저장되어 있고, 읽기 전용 영역이기때문에 프로세스가 함부로 변경할 수 없고 변경 시 오류를 발생시킵니다.
  • Data 영역
    • 프로그램이 실행될 때 생성되고 프로그램이 종료되면 시스템에 반환됩니다.
    • 전역변수, 정적변수, 배열, 구조체 등이 저장됩니다.
  • Heap 영역
    • 메모리를 동적으로 할당할 때 사용되는 메모리 영역입니다.
  • Stack 영역
    • 프로그램이 자동으로 사용하는 메모리 영역입니다.
    • 함수 호출과 관계되는 지역변수와 매개변수가 저장됩니다. 함수 호출 시 생성되고 함수가 끝나면 반환됩니다.

 

 

멀티 프로세스

  • 멀티 프로세스(Multi Process)란 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것 입니다.
  • 장점
    • 멀티 프로세싱은 여러 개의 자식 프로세스 중 하나에 문제가 발생해도 다른 프로세스들에게 영향이 확산되지 않습니다.
  • 단점
    • Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등 오버헤드가 발생합니다.
    • 프로세스는 각각 독립된 영역을 가지고 있기 때문에 프로세스 사이에서 공유하는 메모리는 없습니다. 따라서 Context Switching이 발생하면 캐시에 있는 모든 데이터를 모두 리셋하고 다시 캐시 정보를 불러와야 합니다.
    • 독립된 영역 때문에 프로세스간의 통신이 필요합니다.

 

 

스레드

스레드(Thread)란 어떠한 프로세스 내에서 실행되는 흐름의 단위입니다.

 

 

스레드의 특징

  • 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유합니다.
  • 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원(Heap 공간 등)을 같은 프로세스 내에 스레드끼리 공유하면서 실행됩니다.
  • 같은 프로세스 안에 있는 여러 스레드들은 같은 Heap 영역을 공유합니다. 반면 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없습니다.

 

멀티 스레드

  • 멀티 스레드(Multi Thread)는 하나의 프로그램을 여러 개의 스레드로 구성하는 방식입니다.
  • 장점 
    • 멀티 스레드는 Stack을 제외한 자원들을 공유하고 있기 떄문에 Context Switching 시에 캐시 메모리를 비울 필요가 없고 이를 통해서 자원을 아낄 수 있습니다.
    • Stack 이외의 메모리를 공유하고 있기 때문에 통신의 부담도 멀티 프로세스에 비해 적습니다.
  • 단점
    • 내부의 메모리를 공유하고 있기때문에 한 프로세스의 스레드가 문제가 생길 시 해당 프로세스 안의 다른 스레드에도 문제가 생깁니다.
    • 같은 데이터를 공유하기에 데이터 동기화에 신경을 써야합니다.

 

 

멀티 프로세스와 멀티 스레드 비교

멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching이 빠르다는 장점이 있지만, 하나의 스레드가 문제가 생길 시 다른 스레드에 문제가 생길 수 있다는 치명적인 단점과 동기화의 문제를 가지고 있습니다. 반면 멀티 프로세스는 하나의 프로세스가 문제가 생기더라도 다른 프로세스에 영향을 끼치지 않는 장점이 있지만, 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 있습니다.

 

동시에 여러 작업을 수행할 수 있다는 점에서 동일하지만 적용해야 하는 시스템에 따라 멀티 프로세스와 멀티 스레드 중 잘 선택해야하는 장, 단점이 존재합니다.

 

 

Context Switching

Context Switching이란 하나의 프로세스가 CPU를 사용중인 상태에서 다른 프로세스에게 CPU를 넘겨주기 위해, 이전의 프로세스 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업을 말합니다. 여기서 한 프로세스의 상태는 프로세스 제어 블록인 PCB에 적재되어 있습니다.

 

 

P1 -> P2, P2 -> P1 의 Context Switching 과정은 다음과 같습니다.

  1. P1의 실행 중에 Interrupt 또는 System call 이 발생하면 P1은 idle 상태가 됩니다.
  2. P1이 executing 상태에서 idle 상태로 변할 때 프로세스와 실행에 대한 데이터는 레지스터에 존재하는데 이 데이터를 메모리에 저장합니다.(save state into PCB1)
  3. 그 다음 P2가 실행되는데 P2가 실행되기 위해서 메모리에 존재하는 P2에 대한 데이터를 레지스터에 올려야 합니다.(reload state from PCB2)
  4. P2가 실행되었다가 다시 idle 상태로 변경되면서 자신의 데이터를 메모리에 저장합니다.(save state into PCB2)
  5. 다음에 P1이 실행되는데 P1의 데이터를 메모리에 저장했었다. 이 데이터를 읽어서 레지스터에 올리고 P1을 이전에 멈추었던 시점에서 이어서 실행합니다.

 

 

 

+ Recent posts