초보 개발자의 성장기

컴퓨터 구조 파헤치기 ... (프로그램, 프로세스, 쓰레드) 본문

BackEnd 지식

컴퓨터 구조 파헤치기 ... (프로그램, 프로세스, 쓰레드)

개발자 김케빈 2023. 9. 22. 23:03
Program

프로그램은 쉽게 표현해 파일 시스템 내에 존재하는 실행 파일입니다.

다른 표현으로 사용자가 원하는 업무를 처리하기 위한 명령어들의 집합이라고 표현할 수 있습니다.

즉, 우리가 컴퓨터에서 실행하는 모든 파일을 프로그램이라고 칭할 수 있습니다.

 

Process

프로세스는 프로그램이 실행되는 상태라고 표현할 수 있습니다.

프로세스는 운영체제로부터 필요한 자원을 할당받아 프로그램이 명령을 수행하는 상태입니다.

프로세스가 할당받는 시스템 자원의 예

  • cpu시간
  • 운영되기 위해 필요한 주소 공간
  • Code, Data, Stack, Heap의 구조로 되어있는 독립된 메모리 영역
    • Code
      프로세스가 실행할 코드와 매크로 상수가 기계어 형태로 저장된 공간입니다.
      컴파일 시 결정되고 변경은 불가합니다.
      프로그램 시작부터 종료까지 메모리에 남음
    • Data
      코드에서 선언한 전역 변수 또는 static 변수가 저장되는 공간입니다.
      전역 변수 또는 static 변수는 컴파일 후 Data 영역의 주소 값을 가리킵니다. 
      프로그램 시작과 동시에 할당되고, 종료 시에 메모리에서 소멸됨 
    • Stack
      프로세스의 메모리 공간으로 함수 안에서 선언된 지역변수, 매개변수, 리턴 값 등등이 저장됩니다.
      컴타임에 크기가 결정됩니다.
      함수 호출 시 생성되고, 함수 종료 시 소멸됩니다.
    • Heap
      사용자가 필요할 때마다 사용하는 메모리 공간입니다.
      런타임 시에 크기가 결정됩니다.

Thread

프로세스 내에서 실행되는 작업 단위로 프로세스의 실행 흐름을 구성합니다.

하나의 프로세스는 여러 개의 쓰레드가 포함될 수 있습니다.

쓰레드는 아래와 같은 특징을 가지고 있습니다.

  • 쓰레드는 각자 자신의 Stack 영역을 보유한다. ( 최소한 자신의 레지스터 상태를 보유한다 )
  • 쓰레드는 프로세스 내에서 Code, Data, Heap 영역을 공유한다.
  • 쓰레드를 생성하고 switching 하는 것은 inexpensive(비싸지않은) 하다.

그렇다면 프로세스와 쓰레드는 어떤 차이가 있을까요?

Process Thread
프로세스는 각자 프로세스 간 통신에 IPC가 필요합니다. 쓰레드는 쓰레드 간 통신에 IPC가 필요 없습니다.
프로세스는 고유한 Code, Data, Stack, Heap 영역을 보유합니다. 쓰레드는 Stack 영역만 각자 보유하고, 나머지는 공유합니다.
프로세스는 생성과 context switching에 많은 비용이 들어갑니다. 쓰레드는 생성과 context switching에 적은 비용이 들어갑니다.

⌘ IPC (InterProcess Communication)

IPC는 프로세스끼리 협력하는 방법입니다. 2가지 자주 사용되는 방법이 있습니다.

  • message passing : 커널 메모리 영역에서 메시지 전달을 위한 채널을 만들어 협력하는 방식. 별도의 동기화 로직이 필요 없음.
  • shared memory : 일부 주소 공간을 공유하여 데이터를 주고 받는 형식. 메모리에 직접 접근해 message 방식보다 빠름

⌘ 문맥 교환 (Context Switching)

문맥 교환은 CPU가 프로세스를 처리하다가 다른 프로세스의 처리를 시작하려고 할 때 발생합니다.

좀 더 상세하게 보면 CPU 코어를 다른 프로세스로 교환하기 위해 이전 프로세스의 상태를 보관하고
새로운 프로세스의 보관된 상태를 복구하는 작업입니다.

 

제어 블록

PCB (Process Control Block)

PCB는 운영체제가 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 가지고 있는 곳입니다.

PCB가 가지고 있는 정보는 프로세스 고유 번호, 실행 상태, 스케줄링 정보 등 CPU가 처리하던 작업의 내용들을 가지고 있습니다.


TCB (Thread Control Block)

TCB는 쓰레드에 대한 정보를 저장합니다.

TCB는 쓰레드 고유 번호, 실행 상태, 스케줄링 정보 등을 가지고 있습니다.

 

멀티 프로세스

멀티 프로세스는 운영체제에서 하나의 응용 프로그램에 대해 동시에 여러 개의 프로세스를 실행하는 것을 의미합니다.

멀티 프로세스를 살펴 보면 하나의 부모 프로세스가 여러 개의 자식 프로세스를 생성함으로서 다중 프로세스를 구성하는 구조입니다.

부모 프로세스와 자식 프로세스는 각각 고유의 번호를 가지고 있고
부모 프로세스는 자식 프로세스의 고유 번호를 통해 자식 프로세를 제어할 수 있습니다.

멀티 프로세스 이용을 통한 이점

  1. 멀티 프로세스는 각 프로세스가 독립적인 메모리 공간을 가지므로,
    한 프로세스가 비정상적으로 종료되어도 다른 프로세스에 영향을 주지 않습니다.
    그래서 프로그램 전체의 안전성을 확보할 수 있다는 장점이 있습니다.
  2. 각 프로세스를 병렬적으로 실행시켜 성능을 향상시킬 수 있습니다.
  3.  각 프로세스가 독립적이므로, 새로운 기능이나 모듈을 추가하거나 수정할때 다른 프로세스에 영향을 주지 않는다.
    그래서 시스템의 규모를 쉽게 확장할 수 있다.
멀티 쓰레딩

하나의 프로세스에서 둘 이상의 스레드가 동시에 작업을 수행하는 것입니다.

자원을 공유하고 자원의 생산과 관리의 중복성을 최소화하여 수행 능력을 향상합니다.

사용자의 입장에서는 하나의 프로그램에서 여러 작업들이 동시에 수행되는 것처럼 보이지만

실제로는 아주 짧은 시간 동안 여러 작업을 번갈아 가며 수행합니다.

멀티 쓰레딩을 통한 장점

  1. 멀티 스레드는 하나의 프로세스 내에서 여러 개의 스레드를 생성되기 때문에, heap 영역과 같은 공유 메모리에 대해
    스레드 간에 자원을 공유가 가능합니다.
    이를 통해, 프로세스 간 통신 (IPC)을 사용하지 않고도 데이터를 공유할 수 있기 때문에,
    자원의 효율적인 활용이 가능해 시스템 자원 소모가 줄어든다.
  2. Context Switching 비용이 프로세스보다 현저하게 낮습니다.
  3. 멀티 스레드는 스레드 간의 통신이나 자원 공유가 더욱 용이하며, 프로세스 보다 가벼워 컨텍스트 스위칭 오버헤드도 작다. 
    따라서 멀티 프로세스 보다 응답 시간이 빠르다.

 

Comments