• 05. 프로세스의 개요

    2021. 9. 20.

    by. ahntree

    728x90

    1. 프로세스

    저장장치에 있는 프로그램을 실행하면 해당 코드가 메모리에 올라와서 작업이 진행된다. 이렇게 메모리에 올라온 동적인 상태를 프로세스라고 한다. 쉽게 얘기하면, 프로그램을 실행하면 프로세스인 거다.

     

    프로그램이 프로세스로 전환될 때 어떤 일들이 일어날까?

     

     

     

    2. 프로그램 to 프로세스

    운영체제는 프로그램을 메모리의 적당한 위치에 가져오면서 프로세스 제어 블록(Process Control Block, PCB)을 생성한다. PCB에는 프로세스를 처리하는 데에 필요한 여러 가지 정보가 담겨 있는데, 주요 정보는 다음과 같다.

     

     

    프로세스 구분자

    메모리에는 여러 개의 프로세스가 존재하기 때문에 각 프로세스를 구분하기 위한 구분자가 필요하다. 이를 프로세스 구분자(Process IDentification, PID)라고 한다.

     

     

    메모리 관련 정보

    프로세스가 위치한 메모리의 위치 정보가 담겨 있다. 또한 프로세스가 운영체제의 제재없이 할당된 메모리 영역을 벗어나는 것을 방지하기 위해 경계 레지스터한계 레지스터가 포함되어 있다.

     

     

    각종 중간값

    CPU는 한 개의 프로세스만 실행하지 않기 때문에 여러 개의 프로세스를 왔다갔다하면서 실행한다. 이 때, 프로세스를 실행했던 위치를 알아야 다음에 동일한 위치에서 다시 시작할 수 있다. 이를 프로그램 카운터라고 한다. 이를 보관 중인 레지스터도 같이 저장된다.

     

    프로세스 제어 블록은 운영체제 영역에 만들어진다. 프로세스가 종료되면 메모리에서 삭제되고 PCB도 폐기된다. PCB와 관련해서 프로그램과 프로세스를 정의하면 다음과 같다.

     

    프로세스 = 프로그램 + 프로세스 제어 블록
    프로그램 = 프로세스 - 프로세스 제어 블록

     

     

     

    3. 프로세스의 상태

    프로세스를 처리하는 과정에서 프로세스는 5가지의 상태를 가진다.

     

     

    생성 상태 (create status)

    프로세스가 메모리에 올라와 실행 준비를 완료한 상태. 프로세스 제어 블록도 이 때 생성된다.

     

     

    준비 상태 (ready status)

    생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태. 프로세스 제어 블록은 준비 큐(ready queue)에서 기다리며 CPU 스케줄러에 의해 관리된다.

     

    CPU 스케줄러는 실행할 프로세스 제어 블록을 선택해서 dispatch(PID) 명령을 실행한다.

     

     

    실행 상태 (running status 또는 execute status)

    CPU를 얻어 실제 작업을 수행하는 상태. 주어진 시간 즉, 타임 슬라이스 동안만 작업할 수 있으며 실행이 끝나도 작업이 완료되지 않으면 timeout(PID) 명령이 실행되면서 다시 준비 상태로 돌아간다. 실행이 끝났으면 exit(PID) 명령이 실행되어 프로세스가 정상 종료된다.

     

    실행 상태에 있는 프로세스가 입출력을 요청하면 CPU는 입출력 관리자에게 입출력을 요청하고 block(PID)를 실행한다. 해당 프로세스는 대기 상태가 되고 CPU 스케줄러는 새로운 프로세스를 디스패치한다.

     

     

    대기 상태 (blocking status 또는 wait status)

    실행 중인 프로세스가 입출력을 요청하고 입출력이 완료될 때까지 기다리는 상태. 입출력장치별로 마련된 큐에서 기다린다. 입출력이 완료되면 인터럽트가 발생하고 wakeup(PID) 명령이 실행되면서 프로세스는 준비 상태로 이동한다.

     

     

    완료 상태 (terminate status)

    주어진 시간 동안 작업을 마치고 완료한 상태. 프로세스 제어 블록도 사라진다. 정상적인 종료는 exit로 처리하지만 비정상적인 종료(abort)를 만나면 디버깅을 위해 강제 종료 직전의 메모리 상태를 저장장치로 옮기는 코어 덤프(core dump)가 실행된다.

     

     

     

    4. 휴식 상태와 보류 상태

    위의 명시한 5가지 상태를 활성 상태(active status)라고 한다. 프로세스는 활성 상태 말고도 다른 상태를 가지는데, 휴식 상태와 보류 상태이다.

     

     

    휴식 상태 (pause status)

    프로세스가 작업을 일시적으로 쉬고 있는 상태이다. 유닉스의 경우 Ctrl + Z 명령으로 프로세스를 잠시 멈출 수 있다. 사용하던 데이터도 프로세스 제어 블록도 메모리에 유지되고 있는 상태다.

     

     

    보류 상태 (suspend status)

    프로세스가 메모리에서 잠시 쫓겨난 상태이다. 프로세스는 다음과 같은 경우에 보류 상태가 된다.

     

    • 메모리가 꽉 차서 일부 프로세스를 메모리 밖으로 보낼 때
    • 프로그램에 오류가 있어서 실행을 미루어야 할 때
    • 바이러스와 같이 악의적인 공격을 하는 프로세스라고 판단될 때
    • 매우 긴 주기로 반복되는 프로세스라 메모리 밖으로 쫓아내도 큰 문제가 없을 때
    • 입출력을 기다리는 프로세스의 입출력이 계속 지연될 때

     

    다른 경우도 있지만 대부분의 경우에는 컴퓨터의 성능을 떨어뜨리거나 미루어도 영향이 적은 프로세스일 경우이다. 보류 상태에 들어간 프로세스는 메모리 밖으로 쫓겨나 스왑 영역(swap area)에 보관된다. 이곳에 데이터가 임시로 보관된다.

     

    프로세스는 옮겨지기 전의 상태에 따라 보류 대기 상태, 보류 준비 상태로 나뉜다. 각 상태에서 다시 활성 상태가 되면 옮겨지기 전의 상태로 돌아가며 보류 대기 상태의 경우, 입출력이 끝나면 보류 준비 상태가 된다.

    728x90

    '운영체제' 카테고리의 다른 글

    07. 프로세스의 연산  (0) 2021.09.20
    06. 프로세스 제어 블록과 문맥 교환  (0) 2021.09.20
    04. 병렬 처리  (0) 2021.09.20
    03. 컴퓨터 성능 향상 기술  (0) 2021.09.20
    02. CPU와 메모리  (0) 2021.09.20

    댓글