프로세스란

프로그램은 명령어 리스트를 가진 디스크에 저장된 파일로 passive entitiy이다. 이러한 프로그램이 메인 메모리에 올라오게 되어 자원을 할당받은 상태를 프로세스 라고한다. 프로세스에 대한 정보는 PCB(Proccess Control Block)와 메인메모리에 저장된다.

프로세스 구조

프로세스는 stack, heap, code, data 로 구성되어있다. 하나씩 살펴보자

  • Stack은 지역변수와 프로그램 수행 흐름을 위한 데이터를 임시로 저장하는 영역으로 heap과 반대 방향으로 자라나, 충돌 위험이 있다.
  • Heap은 동적 메모리를 할당하는 부분으로 프로그램 실행중(런타임)에 메모리 영역이 결정된다.
  • Code 영역은 text라고도 부르며, 프로그램 코드(기계어 코드)가 저장된다.
  • Data 영역에는 전역변수와 static변수가 저장된다. 컴파일 시점에 메모리 크기가 결정됨으로 프로세스 동작중에 변하지 않는다.

프로세스 상태

스크린샷 2019-09-28 오후 6.19.17.png

  • new(created) => ready
    • 사용자가 프로그램을 실행, 이 때 디스크에 저장되어 있는 실행파일이 메모리에 load 된다.
  • ready => running
    • 메모리에는 여러 개의 프로세스가 load 되어 있을 수 있다. 그러나 load된 프로세스 중 일부는 cpu와 같은 자원을 점유하지 못 한 상태일 수 있다. 즉 ready 상태는 실행할 준비가 끝나 실행을 기다리고 있는 상태이다.
    • 대기 중인 프로세스중 어떤 프로세스를 시킬지는 CPU 스케쥴링에 의해 결정된다. 이를 dispatch라고 한다.
    • running 상태에 프로세스는 CPU 점유권을 가지게 된다.
  • running => wating
    • I/O 요청이 발생이나 Event를 기다리는 프로세스는 점유권을 빼앗기고 wating상태가 된다.
  • wating(asleep) => ready
    • IO / Event가 완료된 프로세스는 다시 ready 상태로 돌아간다.

ready 상태에서 cpu 점유권을 계속 가져가지 못하거나, wait상태에서 ready로 못넘어가는 프로세스는 swap out을 통해 하드 디스크로 간다.