ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로세스의 상태 총 정리 (Process Status)
    운영체제 2020. 4. 19. 00:28
    반응형

    오늘은 프로세스의 상태에 대해서 공부한 것을 정리하고자 글을 씁니다. 우선 ready와 wait의 구별이 아직 잘 안 되고 현재 컴퓨터의 시분할 시스템에서 CPU time quantum을  프로세스가 어떻게 가져가는지 다시 한번 정리하여 제 것으로 만들고자 글을 작성합니다.

     

    우선 프로세스에 대해서 다시한번 정리를 해보겠습니다. 

    여기에 잘 정리하였지만 간략하고 핵심만 다시 써보겠습니다.

     

    프로그램(Program)과 프로세스(Process),프로세서(Processor) 구분하기!!!

    본인은 소프트웨어 개발자가 되기 위해 공부 중인데요. 프로그램이라는 것은 어릴 때부터 아니면 꼭 IT분야가 아니더라도 자주 들었던 말입니다. 그런데 프로세스는 전공을 공부하면서 알게 되었지만 명확한 구분..

    enlqn1010.tistory.com

    프로세스

    정적 프로그램이 운영체제의 PCB을 받아, 메인 메모리에 적재된 동적인 상태.

    여기서 프로세서는 쓰레드들(멀티 스레드)도 가지고 있지만 스레드는 다음 글에서 설명해 보겠다. 

     

    우선, CPU는 메인 메모리에 적재되어 있는 여러 프로세스 들에 시간을 준다. 이 말은 시분할 적으로 명령을 수행하는 것을 의미하는데, CPU Clock은 사람이 느낄 수 없을 만큼 굉장히 빠르기 때문에 동시에 프로세스들이 처리되는 것처럼 느껴지지만 실제 기계 입장에서는 time quantum을 프로세스마다 여러 개 주어 순차적으로 실행이 된다.

     

    그렇다면 이런 여러가지 프로세스들마다 작업이 다 다를 것이다.

    예를 들면 A프로세스는 Output을 처리하는 프로세스이고, B프로세스는 보조 메모리에 있는 파일을 접근하는 것이고.. 등등

    이때, 각각 프로세스마다 나는 수행 중이다. 나는 CPU를 기다리고 있다. 나는 프로그램이 끝났다 등 현재 상태를 나타내는데 이것이 왜 필요할까?

    자 이제 프로세스의 상태를 왜 구별하는지 일괄 작업 시스템(배치 시스템) 과 시분할 시스템을 비교하면서 설명해 보겠다. 

     

    Batch Job 시스템 상태

    일괄 작업 시스템은 사용자가 수정이나 삽입 같은 데이터의 변경을 할 수 없는, 즉 모든 작업을 한 번에 처리하는 시스템이다.

     

    [ 상태 ]

    1. Create 

    프로세스가 메모리에 올라와 있는 상태이다.

    2. Run

    CPU를 얻어서 자신의 일을 수행하는 상태이다. 일괄 작업 시스템은 CPU를 통으로 얻기 때문에 효율이 떨어지는 편이다.

    3. Terminate

    주어진 작업을 완료하여 프로세스 컨트롤 블록(PCB)를 제거하고 메인 메모리에서 빠져나간 상태이다.

     

    시분할 시스템 상태

    시분할 시스템은 CPU 시간을 쪼개서 여러가지 프로세스들에게 CPU를 사용할 수 있도록 한다. 그래서 CPU 효율이 배치 시스템에 비해서 높은 편이다. 하지만 여러 프로세스들이 유기적으로 동작하기 위해서 상태가 배치 시스템에 비해 많은 편이다.

     

    [ 상태 ]

    ACTIVE STATE

    1. Creating(생성)

    OS에 프로세스의 PCB가 생성이 되면서 프로세스가 메인 메모리에 적재되어 실행 준비를 마친 상태이다.

    2. Readying(준비)

    프로세스가 CPU를 얻을 때까지 자신의 차례를 순서대로 기다리는 상태이다. Ready Queue에 들어와 있는 상태라고 이야기한다. (Queue 자료구조는 먼저 들어온 것을 먼저 처리하는 과정이다.)

    Ready Queue는 여러개를 사용하기도 하며, 자신의 차례는 CPU Scheduler가 관리한다.

    3. Running(실행)

    Ready Queue에 있던 프로세스가 자신의 차례를 부여받아 실제로 수행되는 상태로, (execute status라고도 한다.) CPU Scheduler가 Dispatch()를 수행하면 준비상태에서 실행상태로 바뀐다. 이때 주어진 시간은 모든 프로세스마다 동일한데 이것이 바로 CPU time quantum이다. 이 time quantum을 다할 때까지 작업이 끝나지 않는다면 Readying 상태로 돌아간다. 이를 time out(cpu clock으로부터 인터럽트)을 실행하여 작업한다. 즉, 다시 Ready Queue에 삽입이 되는 것이다.

    4. Waiting(대기)

    프로세스가 실행 상태에서 입출력이 발생했을 때, CPU는 입출력 관리자에게 작업을 맡기고 프로세를 대기상태로 만든다. block()을 실행하여 수행한다. 이는 CPU효율을 높이기 위해서 다른 상태로 옮겨둔 것이다.

    대기 상태의 프로세스들은 보통 입출력 장치마다 각각의 큐에서 기다린다.

    이후에, 입출력 관리자가 해당 I/O를 완료했다면 인터럽트가 발생해 Waiting 상태의 프로세스 중에서 해당 프로세스를 찾는데 wakeup()을 실행하여 찾고 다시 Ready Queue에 들어간다. 원래는 스냅샷을 보면 현재 Running 상태의 프로세스가 Ready Queue로 들어가고 방금 대기상태의 프로세스를 실행 상태로 바꾸는 과정이 일어나야 하는데 복잡하기 때문에 위처럼 처리된다.

    5. Terminating(종료)

    프로세스가 자신의 작업을 모두 마치고 운영체제가 PCB를 제거하고 메인 메모리에서 빠져나간 상태이다. exit()를 실행하여 처리한다. 만약 오류나 강제 종료(abort)를 만다면 디버깅을 위해 abort 이전의 메모리 상태를 저장장치로 옮기는데 이를 코어 덤프(core dump)라고 한다.

     

    =============================================================

    INACTIVE STATE

    6. Pause State(휴식)

    CTRL+Z를 누르면 프로그램이 종료되지 않고 잠시 실행을 멈춘 상태가 되는데 , 이는 휴식 상태라고 한다. 다른 말로는 stop 되었다고 한다. 메인 메모리에 PCB도 그대로 있고 프로세스의 데이터도 유지되기 때문에 resume 명령어를 통해서 재시작할 수 있다.

    7. Suspend State(보류)

    메모리가 꽉 차서 프로세스를 메모리 밖으로 내보내거나, 프로그램 오류로 인해서 실행을 미룰때, 바이러스가 발견되었을 때, 입출력이 계속 지연될 때 등에 이유가 발생한다면 보류 상태로 들어가게 된다. 

    Readying과 Waiting 상태에서 보류가 발생하면 각각 보류 준비상태, 보류 대기 상태라고 한다. 보류 상태에서 메모리 밖으로 쫓겨난 프로세스는 swap 영역에서 보관된다. 여기서 주목할 점은 보류 대기 상태에서 인터럽트가 발생하면 보류 준비상태로 가서 resume 된 후에 Ready Queue에 들어간다는 점이다.

    Process status

     

     

     

     

    사진출처 : https://www.javatpoint.com/os-process-states 

    반응형
Designed by Tistory.