3-3. 프로세스와 스레드 [01] - 프로세스와 컴파일 과정, 상태, 메모리 구조, PCB, 멀티프로세싱

2025. 11. 8. 19:55·CS 스터디

0. 프로세스란?

프로세스는 컴퓨터에서 실행 중인 프로그램을 말한다. 운영체제로부터 자원(CPU, 메모리, 입출력 장치 등)을 할당받아 동적으로 활동하는 개체이다. 프로그램이 메모리에 올라가면 프로세스가 되고, CPU 스케줄러에 따라 CPU가 프로세스를 실행한다. 즉, 프로세스는 프로그램이 메모리에 올라가 인스턴스화 된 것을 말한다.

 

 

 

1. 프로세스와 컴파일 과정

프로그램의 소스 코드가 기계어로 변환되어 실행 가능한 파일로 만들어지기까지의 과정을 말한다.

 

1) 전처리

가장 먼저 수행되는 단계로, 전처리기가 소스코드를 가공한다. 코드에 포함된 #include과 같은 헤더파일과 #define으로 정의된 매크로를 실제 값이나 코드로 치환한다.

 

2) 컴파일러

전처리된 소스파일을 어셈블리어 코드로 변환하는 단계이다. 문법 오류를 검사하고 코드 최적화 작업을 한다.

 

3) 어셈블러

컴파일러가 생성한 어셈블리어 코드를 CPU가 직접 실행할 수 있는 이진 형태의 기계어 코드(목적 코드)로 변환하는 단계이다.

 

4) 링커

컴파일 과정의 마지막 단계로, 하나 이상의 오브젝트 파일과 프로그램 내에 있는 외부 라이브러리 파일을 결합하여 실행 파일을 완성한다. 프로그램 내에서 사용했지만 실제 코드가 외부 라이브러리에 있는 함수나 변수의 주소를 연결한다.

* 정적 라이브러리 : 프로그램 빌드 시 라이브러리가 제공하는 모드 코드를 실행 파일에 넣는 방식

* 동적 라이브러리 : 프로그램 실행 시 필요할 때만 DDL이라는 함수 정보를 통해 참조하여 라이브러리를 사용하는 방식

 

 

 

2. 프로세스의 상태

프로세스는 실행 과정에서 여러 상태를 오가며 CPU 자원을 할당 받습니다. 운영체제가 프로세스의 현재 상태를 파악하고, CPU 자원을 효율적으로 관리하기 위해 단계를 나눈다.

 

1) 생성 상태

프로세스가 생성된 상태를 의미하며, fork() 혹은 exec() 함수를 사용하여 생성한다. 이때 PCB가 할당된다.

* fork() : 부모 프로세스의 주소 공간을 그대로 복사하여 새로운 자식 프로세스를 생성하는 함수

* exec() : 새롭게 프로세스를 생성하는 함수

 

2) 대기 상태

메모리 공간이 충분하면 메모리를 할당 받고, 그렇지 않으면 CPU 스케줄러로부터 CPU를 할당 받기를 기다리는 상태이다. 이때, 대기 중단 상태는 메모리 부족으로 일시 중단된 상태이다.

 

3) 실행 상태

CPU와 메모리를 할당 받고 인스트럭션(실제 명령)을 실행하고 있는 상태이다. CPU burst가 일어났다고도 표현하며, 하나의 CPU 코어만이 하나의 프로세스를 실행할 수 있다.

 

4) 중단 상태

입출력 작업 완료나 이벤트 발생을 기다리며 프로세스가 차단된 상태이다. 이때, 일시 중단 상태는 중단된 상태에서 실행되려고 했지만 메모리 부족으로 일시 중단된 상태이다.

 

5) 종료 상태

프로세스가 실행을 완료했거나 오류로 인하여 종료되어 메모리와 CPU 등 모든 자원이 회수된 상태이다. 자연스럽게 종료되는 것도 있지만, 부모 프로세스가 자식 프로세스를 강제로 종료 시키는 비자발적 종료도 존재한다.

 

 

 

3. 프로세스의 메모리 구조

프로세스는 코드 영역, 데이터 영역, 스택 영역, 힙 영역으로 나뉜다.

 

1) 스택과 힙

스택과 힙은 동적 메모리 할당을 위한 영역이며, 런타임 단계에서 메모리를 할당 받는다.

 

- 스택 : 지역 변수, 매개변수, 함수 호출 정보 등이 임시로 저장되는 영역이다. 함수가 호출될 때마다 생성되고 반환될 때마다 해제된다.
- 힙 : 동적 메모리 할당을 위한 영역이다. malloc(), free(), new() 함수를 통해 할당할 수 있으며, 프로그램 실행 중에 필요할 때마다 메모리 크기가 유동적으로 변한다.

 

2) 데이터 영역과 코드 영역

데이터 영역과 코드 영역은 정적 할당을 위한 영역이다. 컴파일 단계에서 메모리를 할당 받는다.

 

- 데이터 영역 : BSS, Data, code/text 세그먼트로 나뉘어서 저장된다. 전역 변수와 정적 변수가 저장되며, 프로그램이 시작될 때 할당되고 종료될 때까지 유지된다.

- 코드 영역 : 실행할 프로그램 코드가 저장되는 영역이다. 읽기 전용으로 설정되어 프로세스 간에 공유될 수 있다.

 

 

 

4. PCB

PCB는 운영체제가 시스템 내의 모든 프로세스에 대한 정보를 저장하고 관리하는데 사용하는 핵심 데이터 구조이다. 프로세스의 신분증 역할이기 때문에 일반 사용자가 접근하지 못하도록 커널 스택의 가장 앞부분에서 관리된다. 프로세스가 생성될 때마다 운영체제에 의해 만들어지며, 프로세스가 종료될 때까지 해당 프로세스의 모든 상태 정보를 저장한다.

 

1) PCB의 구조

- 프로세스 스케줄링 상태 : 생성, 대기, 실행, 중단, 종료 중 어떤 상태에 있는지에 대한 정보

- 프로세스 ID : 프로세스의 고유 번호

- 프로세스 권한 : 컴퓨터 자원, I/O 디바이스에 대한 권한 정보

- 프로그램 카운터 : 프로세스가 다음에 실행할 명령어의 메모리 주소에 대한 포인터

- CPU 레지스터 : 프로세스를 실행하기 위해 저장할 모든 레지스터에 대한 정보

- CPU 스케줄링 정보 : 우선순위, CPU 시간, CPU 스케줄러에 의해 중단된 시간 등에 대한 정보

- 계정 정보 : 프로세스 실행에 사용된 CPU 사용량, 실행한 유저의 정보

- I/O 상태 정보 : 프로세스에 할당된 I/O 디바이스 목록

 

2) 컨텍스트 스위칭

컨텍스트 스위칭은 CPU를 한 프로세스에서 다른 프로세스로 전환하는 과정을 의미하며, PCB가 핵심적인 역할을 수행한다. 시분할 시스템에서 CPU를 공평하게 나누어 사용하기 위해 필수적인 과정이다.

 

2.1 컨텍스트 스위칭 과정

- 현재 프로세스 정보 저장 : 실행 중이던 A 프로세스를 중단할 때, A 프로세스의 모든 상태 정보를 A의 PCB에 저장한다.

- 새로운 프로세스 정보 로드 : CPU가 새로운 프로세스인 B를 선택하면, B의 PCB에 저장되어 있던 상태 정보를 CPU의 레지스터로 복원한다.

- 실행 재개 : CPU는 복원된 정보를 바탕으로 B 프로세스를 중단했던 지점부터 다시 실행한다.

 

2.2 컨텍스트 스위칭 비용

CPU가 아무런 작업을 하지 않고 제어권을 넘기기 위해 PCB 정보를 저장하고 복원하는 데 시간을 소모하면, 오버헤드가 일어나며 시스템 효율성이 떨어질 수 있다. 또한 CPU가 접근한 데이터가 캐시메모리에 존재하지 않아 메인 메모리와 같은 장치에서 데이터를 가져오는 캐시 미스가 일어날 수 있다.

 

 

 

5. 멀티프로세싱

멀티프로세싱은 여러 개의 CPU를 사용하여 동시에 여러 개의 프로세스를 처리하는 것을 말한다. 여러 프로세스가 동시에 다른 CPU 자원을 사용하는 병렬 처리를 수행하므로 성능이 극대화된다. 프로세스들이 독립된 메모리 공간에서 실행되므로, 한 프로세스에 문제가 생겨도 다른 프로세스에 영향을 미치지 않아 안정성과 신뢰성이 높다. 또한, 특정 CPU가 과부하 걸리는 것을 방지하는 장점이 있다.

 

1) 웹 브라우저

최신 웹 브라우저는 멀티 프로세스 구조를 채택하고 있다.

 

- 브라우저 프로세스 : 웹 브라우저 전체를 총괄 관리하는 메인 프로세스이다. 사용자 인터페이스와 디스크 입출력, 네트워크 통신 등을 관리한다.

- 렌더러 프로세스 : 웹 페이지의 실제 콘텐츠를 해석하고 화면에 표시하는 작업을 수행한다.

- 플러그인 프로세스 : 웹 사이트에 사용하는 외부 콘텐츠 플러그인을 처리한다.

- GPU 프로세스 : 3D 그래픽, 복잡한 애니메이션 등과 같이 GPU를 이용해서 화면을 그리는 부분을 처리한다.

 

2) IPC

멀티 프로세스 구조에서는 각 프로세스가 독립적인 메모리 공간을 가지기 때문에, 데이터를 주고받거나 정보를 공유하기 위해 IPC라는 통신 메커니즘을 사용해야 한다.

 

- 공유 메모리 : 여러 프로세스가 공통으로 접근할 수 있는 메모리 영역을 만들어 통신한다.

- 파일 : 한 프로세스가 데이터를 파일에 기록하고, 다른 프로세스가 그 파일을 읽어서 통신한다.

- 소켓 : 네트워크 통신을 위한 엔드포인트로, 동일한 시스템 내 프로세스 뿐만 아니라 네트워크의 원격 프로세스와 통신한다.

- 익명 파이프 : FIFO 방식으로 단방향 통신만 가능하며, 부모-자식 프로세스 간에만 사용할 수 있는 임시 공간인 파이프로 통신한다.

- 명명 파이프 : FIFO 방식으로 단방향, 양방향 통신이 가능하다. 서로 관련 없는 프로세스 간에도 통신이 가능하다.

- 메시지 큐 : 메시지를 큐 형태로 저장해두고, 프로세스들이 이 큐에 메시지를 송수신하여 통신한다. 우선순위를 부여할 수 있으며, 데이터를 비동기적으로 교환할 때 유용하다.

'CS 스터디' 카테고리의 다른 글

3-4. CPU 스케줄링 알고리즘 - 비선점형 방식, 선점형 방식  (2) 2025.11.08
3-3. 프로세스와 스레드 [02] - 스레드와 멀티스레딩, 공유 자원과 임계 영역, 교착 상태  (0) 2025.11.08
3-2 메모리 - 메모리 계층, 메모리 관리  (0) 2025.11.01
3-1. 운영체제와 컴퓨터 - 운영체제의 역할과 구조, 컴퓨터의 요소  (0) 2025.10.31
2-5. HTTP - HTTP/1.0, HTTP/1.1, HTTP/2, HTTPS, HTTP/3  (1) 2025.10.26
'CS 스터디' 카테고리의 다른 글
  • 3-4. CPU 스케줄링 알고리즘 - 비선점형 방식, 선점형 방식
  • 3-3. 프로세스와 스레드 [02] - 스레드와 멀티스레딩, 공유 자원과 임계 영역, 교착 상태
  • 3-2 메모리 - 메모리 계층, 메모리 관리
  • 3-1. 운영체제와 컴퓨터 - 운영체제의 역할과 구조, 컴퓨터의 요소
leastzero
leastzero
  • leastzero
    빵이
    leastzero
  • 전체
    오늘
    어제
    • 모든 글 (31) N
      • CS 스터디 (25)
      • 활동 (2)
      • IT 기술 (4) N
  • hELLO· Designed By정상우.v4.10.4
leastzero
3-3. 프로세스와 스레드 [01] - 프로세스와 컴파일 과정, 상태, 메모리 구조, PCB, 멀티프로세싱
상단으로

티스토리툴바