[OS] 프로세스 상태

zooneon·2021년 3월 22일
2

OS

목록 보기
1/1
post-thumbnail

프로세스는 실행되면서 여러 상태에 있을 수 있다.

프로세스의 상태는 프로세스가 생성되고 끝날 때까지 계속해서 바뀌는데, 그 이유로는 I/O 요청, ISR(Interrupt Service Routine), 프로세스 스케쥴링 알고리즘 등등이 있다.

우선 프로세스가 언제 생성되고 언제 끝나는지 알아보자

📕 Process Creation

프로세스가 생성되는 경우

  • 새로운 프로그램(파일)을 실행시킬 때
  • 유저가 어떤 사이트에 접속을 하면 유저의 명령들을 받기 위한 프로세스가 만들어진다.
  • OS에 요청을 하면 들어온 요청을 처리하기 위해 프로세스가 생성된다.
  • 프로그램 안에서 프로세스를 직접 만드는 경우(Parent Process, Child Process)

📗 Process Termination

프로세스가 끝나는 경우

  • 작업이 끝났을 때
  • 유저가 접속했던 사이트에서 로그아웃 했을 경우
  • Parent Process가 종료하면 Child Process는 Parent Process에 의해 강제 종료된다.
  • OS가 종료되었을 때(OS는 모든 프로세스를 관리하기 때문에 강제로 종료할 수 있는 권한을 갖고 있다.)
  • 오류가 발생하거나 하드웨어에 fault가 발생했을 때

📘 Dispatcher

프로세스의 각 단계를 알아보기 전에 Dispatcher를 알아야한다.

Dispatcher는 OS 프로그램의 일부로, 실행중인 프로그램을 중단하고 다른 프로그램을 실행시키도록 하는 프로그램이다.

Interrupt(timeout, I/O request)가 발생하거나 종료된 프로세스로부터 준비 중인 프로세스를 수행 상태로 만들 때 항상 Dispatcher가 수행된다.

📙 Two-State Process Model

가장 간단한 모델이다.

two-state 모델에는 Not Running과 Running 상태 두 가지로 나뉜다.

  • Not Running : 실행 대기 중인 상태
  • Running : 현재 실행 중인 상태

State Transitions

새 프로세스가 생성되면 OS는 프로세스의 PCB(Program Control Block)를 생성하고 not running 상태로 초기화 시킨다.

not running 상태인 프로세스들은 Queue에서 대기하게 되는데, Queue에는 각 프로세스의 PCB 주소를 가르키는 포인터를 갖고 있다.

만약 현재 실행중인 running 상태의 프로세스에서 Interrupt가 발생하면 OS는 해당 프로세스를 not running 상태로 옮긴다.

그러면 dispatcher가 Queue에서 대기 중인 프로세스들 중 하나를 골라 running 상태로 옮긴다.

📕 Five-State Process Model

five-state 모델은 다섯가지 상태로 나뉜다.

  • New : 프로세스가 만들어진 상태이다. 프로세스가 생성되면 바로 Ready 단계로 가면 되는거 아닌가? 라고 생각할 수 있다. 하지만 프로세스가 만들어지면 메모리도 할당해야하고 프로세스의 정보를 담고 있는 PCB와 프로세스가 실행되면서 사용할 스택 메모리도 할당하고 초기화해줘야 한다. 그렇기 때문에 프로세스 생성에는 시간이 걸리고 New 상태에 어느 정도 머물러야 한다.
  • Ready : 실행을 하기 위해 기다리는 상태이다. 언제든지 실행할 준비가 되어있고, CPU를 할당해주면 바로 실행할 수 있는 단계이다.
  • Running : 프로세스가 CPU를 차지하고 실행하고 있는 상태이다.
  • Blocked : CPU를 할당해주어도 실행할 수 없는 상태이다.(I/O request, 다른 프로세스가 끝날 때까지 대기 등등)
  • Exit : 프로세스가 끝나게 되면 프로세스가 할당 받았던 자원들을 반납해야한다. 따라서 Exit 상태에서도 처리 시간이 걸린다.

State Transitions

New → Ready

New 상태에서 Ready 상태로 자연스럽게 넘어가는 것이 아니라 OS가 Ready 단계로 허락(Admit)할 때 넘어갈 수 있다.

OS의 허락을 맡는 이유는 메모리 자원 문제와 CPU 문제가 있다.

메모리의 공간은 한정적이기 때문에 메모리에 올릴 수 있는 프로그램도 한정적이다. 그렇기 때문에 프로그램을 메모리에 올리기 전에 올려도 되는지 OS의 허락이 필요하다.

두 번째 이유로 CPU가 있다. CPU는 프로그램을 Time Sharing을 통해 동시에 진행하는 것처럼 보이게 한다. 하지만 프로그램이 많아지면 각 프로그램의 대기 시간이 길어지게 되고 이는 버벅이는 것처럼 보이는 문제가 될 수 있다.

Ready → Running

Dispatcher가 대기하고 있는 프로그램 중 적절한 프로그램을 골라 Running 상태로 옮긴다.

Running → Exit

OS는 프로그램이 종료하게 되면 Exit 상태로 옮긴다.

Running → Ready

CPU는 Time Sharing을 통해 프로세스들을 실행시키므로 프로그램이 길면 timeout이 걸려 Ready 상태로 돌아가게 된다.

Running → Blocked

프로그램 실행 중 I/O request가 발생하거나 OS에 어떤 작업을 요청하면 Blocked 상태로 변경한다.

Blocked → Ready

기다리던 이벤트가 발생하면 바로 Running 상태로 가는 것이 아닌 Ready 상태로 간다.

📗 Seven-State Process Model

Five state process model with two suspended states

Suspend란?
Suspend는 메모리에서 꺼내서 하드디스크로 옮기는 것이다.
Queue에 있는 프로그램의 포인터를 이용하여 옮긴다.

five-state 모델에서 Ready/Suspend 상태와 Blocked/Suspend 상태가 추가된 모델이다.

  • Ready/Suspend : I/O 작업이나 요청한 작업이 끝났지만 메모리에 자리가 없어 여전히 하드디스크에 있는 상태이다.
  • Blocked/Suspend : 요청한 작업이 끝나지 않았고, 메모리에 있던 프로세스들이 Swaping으로 인해 하드디스크로 내려간 상태이다.

Swaping이란?
메모리의 크기는 한정적이기 때문에 들어올 수 있는 프로그램의 수는 정해져 있다.
올라온 프로세스들이 모두 block이 되면 CPU가 하는 일이 없어지기 때문에 하드디스크에서 대기 중인 프로세스들을 메모리에 올리고 기존의 메모리에 있던 프로세스들은 하드디스크로 내린다.
이 작업을 Swaping이라고 한다.

State Transitions

Blocked → Blocked/Suspend

메모리에 올라와 있는 프로세스들이 모두 요청한 작업을 하느라 block 상태이고, 하드디스크에 Swapped 되었던 프로세스들을 메모리에 올려야 한다. 그러기 위해 메모리에 있던 프로세스들을 하드디스크의 Swapped Area로 옮긴다.

Blocked/Suspend → Blocked

요청한 작업이 다 끝나지 않았지만 메모리에 공간이 충분히 있을 경우 다시 메모리로 올라갈 수 있다.

Blocked/Suspend → Ready/Suspend

요청한 작업이 다 끝났지만 메모리에 공간이 없는 경우 Ready/Suspend 상태로 옮긴다.

Ready/Suspend → Ready

Ready/Suspend 상태에서 대기하던 중 메모리에 공간이 생겨 다시 Ready 상태로 변경한다.

Ready → Ready/Suspend

여러 suspend 이유로 Ready에서 Ready/Suspend로 옮겨질 수 있다. 예를 들어 프로세스의 우선순위 때문에 메모리에 공간을 만들어야할 경우 Ready/Suspend 상태로 옮겨진다.

New → Ready/Suspend

만약 메모리가 가득 차 있는 경우라면 OS는 New 상태에서 Ready/Suspend 상태로 Admit 한다.


📚 참고 및 이미지 출처

profile
블로그 이전했습니다. https://blog.zooneon.dev

0개의 댓글