본문 바로가기

OS

멀티 프로세스(Multi Process)

프로세스란 프로그램이 실행중인 상태를 의미합니다. 

더 정확히 얘기하면 프로그램이 메모리에 적재되어 CPU를 할당받아 자신의 작업을 수행하는 것를 의미합니다.

 

cf) 디스크 Vs 메모리

사실 메모리도 종류가 여러가지입니다.

- HDD (Hard Disk Drive)

  - 비휘발성 저장 장치로, 시스템이 꺼져도 데이터가 유지될 수 있는 디스크 (보조 기억 장치)

- RAM (Random Access Memory)

  - 프로그램 실행에 필요한 데이터와 명령어를 CPU로 빠르게 전달할 수 있는 메모리 (주 기억 장치)

  - 이 메모리가 클수록 동시에 많은 일을 처리할 수 있습니다.

 

메모리에 적재

프로그램은 보조 기억장치(ex. HDD)에 저장되어 있습니다. 이것을 "실행"하면 주 기억 장치(RAM) 메모리에 적재됩니다. 

이 때 프로세스가 동작하는 데 필요한 4가지 영역을 할당받습니다.

- Code : 기계어로 변환된 실행 코드 명령어가 저장된 공간 

- Data : 전역 변수 혹은 static 변수가 저장되는 공간으로, 프로그램의 실행동안 계속 유지됩니다.

- Heap : 동적 할당 받은 데이터가 저장되는 공간 (runtime 중 저장)

- Stack : 함수가 호출되면서 지역, 매개 변수 등이 저장되는 공간

 

PC register

프로그램이 메모리에 4가지 영역으로 적재되어 CPU가 메모리에 접근하여 실행하는 것입니다.

그렇다면 CPU가 어떤식으로 메모리에 접근하여 어떤 코드를 실행하는 걸까요? 

 

 PC register는 Code 영역에서 다음에 실행할 명령어의 위치를 가리키는 명령어 포인터입니다. CPU는 이 레지스터가 가리키는 메모리 주소로 접근하여 명령어를 읽습니다. 

 

컴파일 단계 (번역): 컴파일러는 소스 코드를 마치 AI 번역가가 영어 원문을 한국어로 번역하는 것처럼, 기계어 코드로 변환합니다. 이 기계어 코드는 프로그램의 'Code' 영역에 저장되어 CPU가 실행할 수 있는 형태가 됩니다. 예를 들어, int a = 123;라는 고수준의 명령은 "특정 메모리 위치에 123을 저장하라"는 기계어 명령으로 변환되어 'Code' 영역에 저장됩니다.

실행 단계 (실제 동작): 프로그램이 실행되면, CPU는 프로그램 카운터(PC) 레지스터를 사용하여 'Code' 영역의 명령어를 차례로 읽어 실행합니다. PC 레지스터는 다음에 실행할 명령어의 위치를 가리키고, CPU는 그 명령어를 가져와 실행합니다. 마치 한국어로 번역된 문서를 읽고 이해하여 실제로 a = 123을 메모리에 저장하는 작업을 수행하는 것과 유사합니다.

 

멀티 프로세스

멀티프로세스는 여러 개의 프로세스가 동시에 실행되는 것을 의미합니다. 기본적으로 CPU는 한 번에 하나의 프로세스만 처리할 수 있습니다. 그러나 CPU가 처리하는 속도가 매우 빠르기 때문에, 번갈아 가며 빠르게 여러 프로세스를 실행함으로써 사용자에게는 여러 프로그램이 동시에 실행되는 것처럼 보일 수 있습니다. 이러한 작업 방식을 '시분할 시스템'이라고 합니다.

 

싱글 코어 CPU에서의 멀티프로세스 동작 원리를 설명하겠습니다. 각 프로세스는 독립적인 메모리를 할당받는다고 설명하였습니다. 두 개의 프로세스가 있다면, RAM 안에는 각각 독립된 메모리 공간이 두 개 존재하게 됩니다.

 

운영체제는 시분할 시스템을 통해 각 프로세스에 CPU 사용 시간을 할당합니다. 이는 프로세스 A에서 프로세스 B로, 그리고 다시 프로세스 A로 순차적으로 전환하면서 이루어지며, 이 전환 순서는 운영체제에 의해 결정됩니다.

 

Context 와 Context Switching

이 때 A 프로세스가 CPU를 점유했다가 다시 B 프로세스로 제어권을 넘깁니다. 마찬가지로 B 프로세스가 잠깐 점유했다가 A 프로세스로 넘겨서 다시 일을 진행하는 데, 이 때 어디부터 실행했는 지 등 프로세스의 진행 상태를 저장하고 있었어야 합니다. 이 것을 프로세스의 Context라고 부릅니다. 그리고 Context 정보는 PCB에 저장됩니다.

 

* 프로세스의 진행 상태 (process state)

 

PCB

PCB (Process Control Block)은 각 프로세스의 Context를 저장한 자료구조를 의미합니다. 각 프로세스는 자신만의 PCB가 만들어지며, 이는 현재 상태, Program Counter(PC), CPU register 값 등을 포함합니다. 따라서 Context Switching이 발생했을 때 PCB에 접근하여 해당 프로세스의 상태를 확인하고 저장된 위치부터 다시 실행할 수 있게 만들어 줍니다.

 

프로세스는 프로그램이 RAM에 적재되어있어 CPU가 할당하여 작업을 수행하는 것을 의미한다.
멀티프로세스 환경에서는 2개 이상의 프로세스가 메모리에 동시에 적재되어 있으며, 이 프로세스들은 운영체제에 의해 관리됩니다. 운영체제는 필요에 따라 Context Switcing을 하여 여러 프로세스를 번갈아가며 수행하고, 이는 매우 빠른 속도로 처리되기 때문에 사용자는 동시에 프로그램들이 실행된다고 느낀다.