1 minute read

프로세스란?

실행되기 전 데이터 덩어리 -> 프로그램
실행되어서 메모리에 적재된 것 -> 프로세스

포그라운드 프로세스

사용자가 볼 수 있는 공간에서 실행되는 프로세스

백그라운드 프로세스

사용자의 간섭 없이 보이지 않는 뒷편에서 실행 중인 프로세스 (서비스 / 데몬)

프로세스 제어 블록

프로세스는 CPU가 필요하고, CPU 자원은 한정되어 있다.
프로세스는 한정된 시간 만큼만 CPU 이용 가능
타이머 인터럽트 발생하면 다음 프로세스에게 차례를 양보
클럭신호를 발생하는 장치에서 주기적으로 발생하는 하드웨어 인터럽트

이렇게 빠르게 번갈아가며 수행하는 프로세스을 관리하기 위해 필요한 것이

프로제스 제어 블록 (PCB)

프로세스 관련 정보를 저장하는 자료 구조
프로세스에 붙는 상품 태그
프로세스 생성 시 커널 영역에 생성되고, 종료시 폐기 된다.

PCB에 담기는 정보

  • pid
  • 레지스터 값
  • 프로세스 상태
  • CPU 스케줄링 정보
  • 메모리 정보
  • 사용한 파일과 입출력 장치 정보

PID

특정 프로세스를 식별하기 위해 부여하는 고유한 번호

레지스터 값

  • 타이머 인터럽트가 발생하면 지금까지의 정보를 저장하고 있어야 다시 복구하여 이어서 실행 가능
  • 프로그램 카운터, 스택 포인터 등

프로세스 상태

  • 입출력 장치를 위해 기다리는 상태
  • 생성 / 준비 / 실행 / 대기 / 종료

CPU 스케줄링 정보

프로세스가 언제, 어떤 순서로 CPU를 할당 받을 지

메모리 정보

  • 프로세스가 어느 주소에 저장되어 있는지에 대한 정보
  • 페이지 테이블 정보

    사용한 파일과 입출력 장지 정보

    할당된 입출력 장치, 사용 중인 (열린) 파일 정보

문맥 교환 (Context Switch)

프로세스 A에서 프로세스 B로 실행 순서가 넘어가면 어떤 작업이 이루어져야 하는가?

  1. 기존에 실행되던 프로세스 A는 중간 정보를 백업
    • 위의 PCB에 해당하는 정보
    • 이러한 정보를 문맥 (Context)
    • 다음 차례에 실행을 재개하기 위한 정보
  2. 뒤이어 실행할 프로세스 B의 문맥을 복구

    이처럼 기존에 실행 중인 프로세스의 문맥을 백업하고, 새로운 프로세스의 문맥을 복구하는 과정을 문맥 교환이라고 한다.

    • 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리

프로세스의 메모리 영역

코드 / 데이터 / 힙 / 스택

코드 영역 (텍스트 영역)

  • 기계어로 이루어진 명령어가 저장된 영역
  • CPU가 실행할 명령어가 담기기에 쓰기가 금지된 영역 (Read-Only)

    데이터 영역

  • 프로그램이 실행되는 동안 유지할 데이터를 저장
  • 지역 변수 / 정적 변수

위의 두 영역은 크기가 변형되지 않으므로 정적 할당 영역이라고도 한다.

힙 영역

  • 사용자가 직접 할당할 수 있는 공간
  • 직접 할당하고 해제해야 함 / 최근 언어들은 G.C가 있어서 알아서 해줌 / 안하면 메모리 누수 (leak) 발생

스택 영역

  • 데이터가 일시적으로 저장되는 공간
  • 매개 변수 / 지역 변수

위의 두 영역은 크기가 변형될 수 있으므로 동적 할당 영역이라고도 한다.

힙 영역은 낮은 주소 -> 높은 주소로 할당
스택 영역은 높은 주소 -> 낮은 주소로 할당
동적 할당 영역이므로 둘이 반대되는 방향으로 할당 됨