[OS] 프로세스 개념 정리 #1
목표
1. 프로세스의 구성을 이해한다.
2. 프로세스 라이플사이클을 이해한다.
3. 프로세스 간 통신 방법을 이해한다.
1. 프로세스의 구성
컴퓨터에서 일어나는 작업들을 이해하기 위해서는 프로세스에 대한 이해가 필요하다.
우선 일반적인 전체 구조도 및 프로세스의 정의는 아래와 같다.
![]()
프로세스는 컴퓨터의 메모리에서 실행 중에 있는 프로그램을 의미한다.
스케줄링의 TASK와 같은 의미로 쓰인다.
프로세스 구성
프로세스는 Code, Data, Heap, 메인스레드, 메인스레드 안에 Stack으로 이루어져 있다. (스레드는 나중에!)
| 항목 | 설명 |
|---|---|
| Code | 소스코드로 이루어진 프로그램을 구동하기 위해 소스코드를 저장해놓는 영역 |
| Data | 전역 변수, 정적 변수, 배열 등과 관련된 데이터를 저장해놓는 영역 |
| Heap | 동적 할당(new, malloc) 된 정보들이 저장하는 영역 |
| 메인스레드 | 기본적으로 프로세스는 최소 1개의 스레드(메인스레드)를 통해 프로세스 실행 |
| Stack | 스레드 안에 위치, 지역 변수, 매개 변수, 함수, 함수 리턴 값 등 임시 메모리 영역 |
※ 여담이지만 Docker 컨테이너도 리눅스 프로세스와 chroot 기반으로 동작한다고 한다. 참고자료
2. 프로세스 라이플사이클
프로세스는 커널을 통해서 관리된다.
커널은 여러 큐를 통해 프로세스 상태를 관리하는 데 아래와 같은 총 5개의 상태를 관리한다.
![]()
- 생성(create) : 프로세스가 생성되는 중이다.
- 실행(running) : 프로세스가 CPU를 차지하여 명령어들이 실행되고 있다.
- 준비(ready) : 프로세스가 CPU를 사용하지 않지만, 언제든지 사용할 수 있는 상태
- 대기(waiting)=(block) : 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태를 말한다.
- 종료(terminated) : 프로세스의 실행이 종료
3. 프로세스 간 통신 방법
프로세스들은 자신의 독립적인 메모리 공간을 가지고 다른 프로세스들에 의해 침범 당하지 않는다. 프로세스 끼리 통신하기 위해서는 크게 2가지 카테고리로 분류가 가능하다.

-
공유 메모리 (파이썬예시) 다른 커널 통신 방법과 다르게 데이터를 아예 같이 사용하는 방법이다.
프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해당 프로세스에 메모리 공간을 할당함
이후 어떤 프로세스 건 해당 메모리영역에 접근이 가능하다.
IPC 방법 중 가장 빠른 방법 -
메세지 패싱 커널이 제공하는 API를 이용해서 커널 공간을 통해 통신한다.
메시지 큐를 통해 프로세스 끼리 통신하며, 파이프, 소켓(TCP/IP)가 해당 방법에 속한다.
커널 공간을 통해 통신
결론
프로세스 구성 : CODE, DATA, HEAP, 메인스레드, STACK
프로세스 라이프사이클 : 생성, 실행, 준비, 대기, 종료
프로세스 간 통신 방법 : 공유 메모리, 메시지 패싱
추후 공부할 것
1. 선점, 비선점 정책
2. 효율적인 프로세스 관리를 위한 스케줄링 방법
3. 교착 상태의 발생 조건과 관리법
4. 프로세스 VS 스레드, 멀티프로세스는 무엇인지