프로세스 상태

고장난 고양이·2022년 7월 14일
0

운영체제

목록 보기
6/21

프로세스란?

프로세스(process)는 컴퓨터에서 실행되고 있는 프로그램을 말하며 cpu스케줄링의 대상이 되는 작업(task)와 거의 같은 의미로 쓰입니다.

프로세스의 상태

프로세스의 상태는 여러가지 상태 값을 가집니다.

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

프로세스 생성(Creation)

프로그램을 메모리에 가져와 실행 준비가 완료된 상태이다.

  • fork() : 부모 프로세스의 주소 공간을 그대로 복사하며, 새로운 자식 프로세스를 생성하는 함수. 주소 공간만 복사할 뿐이지 부모 프로세스의 비동기 작업 등을 상속하지는 않습니다.

  • exec() : 새롭게 프로세스를 생성하는 함수

프로세스 종료(Termination)

종료 상태는 메모리와 cpu소유권을 모두 놓고 가는 상태를 의미합니다.

자연스럽게 종료되는 경우 도있으나, 부모 프로세스가 자식 프로세슬르 강제시키는 비자발적 종료도 존재합니다. 이는 자식 프로세스에 할당된 자원의 한계치를 넘어서거나 부모 프로세스가 종료되거나 사용자가 process.kill 등 여러 명령어로 프로세스를 종료할 때 발생합니다.

또 오류가 발생하거나 하드웨어에 fault가 일어날 경우에도 존재합니다.

Dispatcher

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

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

📚 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

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 한다.

참고
https://velog.io/@zooneon/OS-Process-State

profile
개발새발X발일지

0개의 댓글