프로세스의 개념과 특징

김명주·2025년 1월 14일

프로세스는 실행 중인 프로그램의 인스턴스로, 운영체제에서 자원을 할당받는 작업의 단위다.

프로세스 정보

  • PID(Process ID) : 각 프로세스의 고유 식별자로, 1부터 시작하여 순차적으로 할당된다.
  • PPID(Parent Process ID) : 해당 프로세스를 생성한 부모 프로세스의 ID
  • 프로세스 상태 : 실행중, 대기중, 중지됨 등 프로세스의 현재 상태를 나타낸다.
  • 프로세스 우선순위 : 시스템 자원 할당을 결정하는 값으로, nice 값으로 조절할 수 있다.
  • 메모리 사용 : 프로세스가 사용하는 실제 메모리(RSS)와 가상 메모리(VSZ) 정보를 포함한다.

프로세스의 특징

  • 독립성

    • 각 프로세스는 독립적인 메모리 공간을 가진다.
    • 프로세스 별로 고유한 시스템 자원(CPU 시간, 메모리, 파일 핸들 등)을 할당받는다.
    • 한 프로세스의 오류가 다른 프로세스에 영향을 미치지 않도록 보호한다.
  • 병렬 실행

    • 여러 프로세스가 동시에 실행될 수 있어 멀티태스킹이 가능하다.
    • CPU 시분할 기법을 통해 여러 프로세스가 번갈아가며 실행되어 동시 실행처럼 보이게 된다.
    • 멀티 코어 시스템에서는 실제로 여러 프로세스가 동시에 실행될 수 있다.
  • 계층 구조

    • 부모 프로세스가 자식 프로세스를 생성할 수 있다.
    • 자식 프로세스는 fork() 시스템 호출을 통해 이루어진다.
    • 자식 프로세스는 부모 프로세스의 복사본으로 시작하지만, 이후 exec() 호출을 통해 새로운 프로그램으로 대체될 수 있다.
    • 이러한 계층 구조는 프로세스 관리와 자원 할당에 중요한 역할을 한다.
  • 프로세스의 상태

    • 생성 : 프로세스가 생성되어 초기화되는 상태

    • 준비 : CPU 할당을 기다리는 상태

    • 실행 : CPU를 할당받아 실행 중인 상태

    • 대기 : I/O 작업 등으로 인해 CPU를 사용하지 않고 기다리는 상태

    • 종료 : 프로세스 실행이 완료되거나 강제 종료된 상태

    • 각 상태 간의 전이는 운영체제의 스케줄러에 의해 관리된다.

  • 컨텍스트 스위칭

    • CPU가 여러 프로세스를 번갈아 실행하는 과정
    • 현재 실행중인 프로세스의 상태를 저장하고 다음 실행할 프로세스의 상태를 복원하는 작업을 포함한다.
    • 프로세스의 컨텍스트에는 프로그램 카운터, 레지스터 값, 메모리 맵 등이 포함된다.
    • 컨텍스트 스위칭은 상당한 오버헤드를 발생시킬 수 있으니 효율적인 관리가 중요하다.

프로세스와 쓰레드의 차이점

  • 프로세스
    • 독립적인 메모리 공간을 가지며 각 프로세스는 자체 주소 공간을 가진다.
    • 프로세스 간 전환 시 많은 자원이 필요하다.
    • 한 프로세스의 문제가 다른 프로세스에 영향을 미치기 어렵다.
    • 프로세스 간 통신에는 특별한 메커니즘 필요
  • 쓰레드
    • 프로세스 내 메모리를 공유하며 같은 프로세스의 쓰레드들은 힙 영역을 공유한다.
    • 쓰레드 간 전환이 프로세스보다 빠르고 효율적
    • 한 쓰레드의 문제가 같은 프로세스의 다른 쓰레드에 영향을 줄 수 있다.
    • 쓰레드 간 통신이 더 쉽고 빠르다.

멀티프로세스보다 멀티스레드가 더 좋은걸까?

멀티스레드가 항상 최선은 아니다.

  • 장점

    • 자원 공유로 인한 효율성 증가
    • UI 스레드와 작업 스레드 분리 가능
    • 병렬 처리로 인한 성능 향상
  • 단점

    • 복잡성 증가
    • 디버깅 어려움
    • 스레드 생성, 관리, 컨텍스트 스위칭에 따른 비용 증가

    단순한 작업일수록 단일 스레드가 더 효과적일 수 있다.

프로세스의 우선순위

  • Nice

    • -20(최고)에서 19(최저)까지의 범위로 우선순위 설정
    • 실제 우선순위는 0(최고)에서 139(최저)로 계산됨
    • 우선순위 계산 : 20+nice 값 + 100(사용자 프로세스 기준)
  • Nice의 특징

    • 기본값은 0이며 음수 값은 루트 사용자만 설정 가능
    • 커널은 I/O 대기 시간을 고려해 동적으로 우선순위 조정
    • 리눅스의 기본 스케줄러인 CFS는 공정한 CPU 시간 분배를 목표로 함

백그라운드와 포그라운드 프로세스

  • 프로세스 실행 모드
    • 포그라운드 프로세스 : 사용자와 직접 상호작용
    • 백그라운드 프로세스 : 사용자 입력 없이 독립적 실행
  • 프로세스 제어
    • 백그라운드 실행 : 명령어 뒤에 & 추가 (예 : sleep 100 &)
    • 포그라운드 전환 : fg %[작업번호]
    • 백그라운드 전환 : Ctrl+Z로 중지 후 bg %[작업번호]
  • 작업 관리
    • jobs : 현재 셸의 작업 목록 확인
    • jobs -l : PID를 포함한 상세 정보 표시
profile
개발자를 향해 달리는 사람

0개의 댓글