프로세스

프로세스

프로세스란 실행중인 프로그램이다. 프로세스는 자신만의 Stack, Heap, Data, Code영역을 가진다. 프로세스는 운영체제에 의해 생성되고 스케줄링된다. 프로세스는 실행 과정중에서 I/O, Time Slice의 만료와 같은 상황에 따라 상태가 바뀌며 실행된다.

프로세스의 상태

프로세스의 상태는 크게 new, ready ,running, waiting, termiated로 볼 수 있다.

  • new (생성) : 프로세스가 생성중인 상태이다.
  • ready(준비) : 프로세스가 실행될 준비가 되어 있으며 준비 큐에서 실행되기를 기다리고 있는 상태이다. ready 큐에 있는 프로세스들은 단기스케줄러에 의해 디스 패치되어 cpu를 할당 받는다.
  • running(실행) : 프로세스가 실행중인 상태이다. CPU를 할당받아 명령을 실행하는 상태이다. 이 경우 TimeSlice가 만료되면 인터럽트가 일어나 다시 ready 상태로 천이 되고 I/O 이벤트를 만나게 되면 I/O 이벤트에 대해 기다리는 wating 상태가 되고 완료되면 다시 ready 상태로 돌아간다.
  • waiting(wait,sleep) : CPU를 할당받아도 지금 당장 실행할 수 없는 상태이다. 어떠한 입출력을 기다리거나 Sleep 상태이기 때문에 다른일을 처리할 수 없다.
  • terminated(중단) : 프로세스가 모든 명령을 처리하여 중단된 상태이다.

PCB

PCB(Process Control Block)은 운영체제가 프로세스를 관리하기 위해 프로세스당 유지하는 정보이다. 프로세스 상태, PC, 프로세스 ID,레지스터, 메모리 위치정보 등을 저장한다. Context Switching을 하기 위해서는 PCB에 프로세스의 정보를 저장할 필요가 생긴다. A라는 프로세스를 실행하다가 B라는 프로세스를 실행할 때 A의 실행 정보를 저장함으로써 A가 수행하던 작업을 나중에 다시 이어나갈 수 있다.

Context Switching

여러 프로세스들은 스케줄링 되고 CPU를 할당받아 자신의 Time Slice만큼 작업을 수행한다. 만약 Time Slice가 만료되어 자신의 수행 시간이 지났을 경우 새로 수행할 프로세스에게 CPU를 할당해야 하는데 이 과정에서 PCB에 프로세스의 정보를 저장하고 불러오는 과정을 Context Switching이라고 한다.

스케줄러(Scheduler)

스케줄러에는 장기 스케줄러, 중기 스케줄러, 단기 스케줄러가 있다. -> 스케줄러는 어떠한 프로세스가 메모리를 할당 받을지, ready queue에서 대기하는지 등을 결정한다.

  • 장기 스케줄러 -> 장기 스케줄러는 new 상태의 프로세스 중 어떠한 프로세스들이 ready queue 상태에서 대기할지를 결정하는 스케줄러이다. 즉 동시에 몇개의 프로그램이 실행될지를 결정하는 스케줄러이다.(Ready 큐에 있는 프로세스들은 번갈아가면서 동시에 실행된다.)

    • 디스크 -> 메모리로의 프로세스를 결정한다.

    • 보통 시분할 시스템에서는 장기스케줄러가 존재하지 않고 프로세스 생성시 바로 ready queue로 간다.

  • 중기 스케줄러 -> 프로세스가 메모리상에 너무 많이 올라와 있을 경우 메모리 상에 있는 프로세스를 디스크 상으로 쫓아내는 작업을 한다.(swap out)

  • 단기 스케줄러 -> 실제적으로 어떠한 프로세스가 cpu를 할당받는지를 결정한다. 스케줄링 알고리즘에 따라서 다음번에 실행될 프로세스를 결정한다.

공유하기