1 분 소요

:fire: 목표

1. 프로세스의 구성을 이해한다.
2. 프로세스 라이플사이클을 이해한다.
3. 프로세스 간 통신 방법을 이해한다.

:speech_balloon: 1. 프로세스의 구성

컴퓨터에서 일어나는 작업들을 이해하기 위해서는 프로세스에 대한 이해가 필요하다.
우선 일반적인 전체 구조도 및 프로세스의 정의는 아래와 같다.

프로세스

프로세스는 컴퓨터의 메모리에서 실행 중에 있는 프로그램을 의미한다.
스케줄링의 TASK와 같은 의미로 쓰인다.

프로세스 구성

프로세스는 Code, Data, Heap, 메인스레드, 메인스레드 안에 Stack으로 이루어져 있다. (스레드는 나중에!)

항목 설명
Code 소스코드로 이루어진 프로그램을 구동하기 위해 소스코드를 저장해놓는 영역
Data 전역 변수, 정적 변수, 배열 등과 관련된 데이터를 저장해놓는 영역
Heap 동적 할당(new, malloc) 된 정보들이 저장하는 영역
메인스레드 기본적으로 프로세스는 최소 1개의 스레드(메인스레드)를 통해 프로세스 실행
Stack 스레드 안에 위치, 지역 변수, 매개 변수, 함수, 함수 리턴 값 등 임시 메모리 영역

※ 여담이지만 Docker 컨테이너도 리눅스 프로세스와 chroot 기반으로 동작한다고 한다. 참고자료

:speech_balloon: 2. 프로세스 라이플사이클

프로세스는 커널을 통해서 관리된다.
커널은 여러 큐를 통해 프로세스 상태를 관리하는 데 아래와 같은 총 5개의 상태를 관리한다.

프로세스

  • 생성(create) : 프로세스가 생성되는 중이다.
  • 실행(running) : 프로세스가 CPU를 차지하여 명령어들이 실행되고 있다.
  • 준비(ready) : 프로세스가 CPU를 사용하지 않지만, 언제든지 사용할 수 있는 상태
  • 대기(waiting)=(block) : 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태를 말한다.
  • 종료(terminated) : 프로세스의 실행이 종료

:speech_balloon: 3. 프로세스 간 통신 방법

프로세스들은 자신의 독립적인 메모리 공간을 가지고 다른 프로세스들에 의해 침범 당하지 않는다. 프로세스 끼리 통신하기 위해서는 크게 2가지 카테고리로 분류가 가능하다.

ipc

  1. 공유 메모리 (파이썬예시) 다른 커널 통신 방법과 다르게 데이터를 아예 같이 사용하는 방법이다.
    프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해당 프로세스에 메모리 공간을 할당함
    이후 어떤 프로세스 건 해당 메모리영역에 접근이 가능하다.
    IPC 방법 중 가장 빠른 방법

  2. 메세지 패싱 커널이 제공하는 API를 이용해서 커널 공간을 통해 통신한다.
    메시지 큐를 통해 프로세스 끼리 통신하며, 파이프, 소켓(TCP/IP)가 해당 방법에 속한다.
    커널 공간을 통해 통신

:memo: 결론

프로세스 구성 : CODE, DATA, HEAP, 메인스레드, STACK
프로세스 라이프사이클 : 생성, 실행, 준비, 대기, 종료
프로세스 간 통신 방법 : 공유 메모리, 메시지 패싱

:question: 추후 공부할 것

1. 선점, 비선점 정책
2. 효율적인 프로세스 관리를 위한 스케줄링 방법
3. 교착 상태의 발생 조건과 관리법
4. 프로세스 VS 스레드, 멀티프로세스는 무엇인지

태그: ,

카테고리:

업데이트: