프로세스 관리 및 상태

김진한·2022년 5월 5일
0

운영체제(OS)

목록 보기
2/8
post-thumbnail

프로세스 관리


Job vs Process

  • 작업(Job) / 프로그램(Program)
    Job이란 우리가 짠 프로그램과 이 프로그램이 처리하는 데이터를 묶어놓은 것이다. 심플하게 프로그램이라고 부르기도 한다. Job은 Disk에 보관된 상태이고 실행 요청 전의 상태이다.

  • 프로세스(Process)
    실행을 위해 시스템(커널)에 등록된 작업이다. 시스템에 등록됐다는 것은 메모리를 할당받았다는 것이다. 시스템 성능 향상을 위해 시스템(커널)에 의해 관리된다. 각종 자원들을 요청하고 할당 받을 수 있는 개체이며, 프로세스 관리 블록(PCB)을 할당받은 개체이다.

  • Process Control Block(PCB)
    커널 공간 내에 존재하며 각 프로세스들에 대한 정보를 관리한다.


프로세스의 종류

  • 시스템(커널) 프로세스
    모든 시스템 메모리와 프로세서의 명령에 액세스 할 수 있는 프로세스이다. 프로세스 실행 순서를 제어하거나 다른 사용자 및 커널(운영체제) 영역을 침범하지 못하게 감시하고, 사용자 프로세스를 생성하는 기능을 한다.

  • 사용자 프로세스
    사용자 코드를 수행하는 프로세스이다.

  • 독립 프로세스
    다른 프로세스에 영향을 주지 않거나 다른 프로세스의 영향을 받지 않으면서 수행하는 병행 프로세스이다.

  • 협력 프로세스 다른 프로세스에 영향을 주거나 다른 프로세스에서 영향을 받는 병행 프로세스이다.


자원(Resource)의 개념

  • 프로세스에게 할당/반납되는 수동적 개체(passive entity)를 자원이라 한다. 이러한 프로세스 할당/반납을 관리하는 것이 커널이다.

  • 하드웨어 리소스(H/W resources)
    Processor, memory, disk, monitor, keyboard, Etc.

  • 소프트웨어 리소스(S/W)
    Mesasge, Signal, files, installed SWs, etc.


프로세스 제어 블록(Process Control Block, PCB)

  • OS가 프로세스 관리에 필요한 정보를 저장하는 공간이다. 프로세스를 생성할 때 같이 생성된다. 메모리에 프로세스 P1이 생성됐다면 P1에 대한 상태정보를 저장하고 있는 PCB-P1이 메모리에 같이 생성된다. 프로세스는 메모리에서 사용자 영역에 저장되고, PCB는 메모리에서 커널이 관리하는 영역에 저장 된다.
    PCB 정보는 OS 별로 서로 다르다. PCB 참조 및 갱신 속도는 OS의 성능을 결정 짓는 중요한 요소 중 하나다.

PCB가 관리하는 정보

  • Process Identification Number(PID)
    프로세스 고유 식별번호

  • 스케줄링 정보
    프로세스 우선순위 등과 같은 스케줄링 관련 정보들

  • 프로세스 상태
    자원 할당, 요청 정보 등

  • 메모리 관리 정보
    Page table, segment table 등

  • 입출력 상태 정보
    할당 받은 입출력 장치, 파일 등에 대한 정보 등

  • 문맥 저장 영역(context save area)
    프로세스의 레지스터 상태를 저장하는 공간 등

  • 계정 정보
    자원 사용 시간 등을 관리



프로세스의 상태(Process States)

  • 프로세스가 시스템에 등록된 후에는 여러 상태를 거치면서 작업을 수행한다. 프로세스의 상태는 자원 간의 상호작용에 의해 결정된다. 프로세스의 상태는 아래 다이어그램처럼 순환한다.


Created State

  • Job이 커널에 등록된 상태이며, PCB 할당 및 프로세스를 생성한다. 이 때 프로세스는 ready로 갈 것인지, suspended ready로 갈 것인지 선택한다. 다시 말해 가용 메모리 공간을 체크해서 가용 메모리가 있다면 할당하고, 없다면 할당하지 않는다.

Ready State

  • 프로세서(CPU)를 제외한 모든 자원을 할당 받은 상태이다. 프로세서 할당은 대기 상태이고, 즉시 실행가능한 상태이다. CPU를 할당을 기다리고 있다가 할당을 받으면 running state로 올라간다. 이러한 과정을 dispatch 혹은 schedule 됐다고 말한다.

Running State

  • 프로세서와 필요한 자원을 모두 할당받아서 열심히 작업을 하고 있는 상태이다. Running State에서 갈 수 있는 상태는 Ready State, Asleep State가 있다.

    Ready State는 프로세서가 없는 상태이기 때문에 프로세서 할당을 뺏으면 Ready State가 된다. 이렇게 Running State에서 Ready State로 내려오는 것을 Preemption/Timer run-out이라 한다. 프로세서 스케줄링에 따라 다른 Job이 들어오거나 해당 프로세서의 할당 시간이 종료됐을 때 발생한다.

    Block/sleep State는 해당 프로세스가 잠시 작업을 잠시 멈추고 I/O라는 것을 하는 간 상태이다. 이렇게 잠시 자리를 비우고 프로세서를 반환한 상태를 작업이 Block/Sleep됐다고 한다. 지금은 I/O가 끝나기를 기다리고 있다.

Blocked/Asleep State

  • 프로세서 외에 다른자원을 기다리는 상태이다. 자원 할당은 System call에 의해 이루어 진다. asleep 상태에서 바로 다시 running 상태로 갈 수 없다. ready 상태로 돌아가서 다시 프로세서 할당을 기다려야 한다. 이렇게 asleep 상태에서 ready 상태로 가는 것을 wakeup이라고 한다.

Suspended State

  • 메모리를 할당 받지 못한/뺏긴 상태이다. 이러한 상태는 커널 또는 사용자에 의해 발생한다. 메모리를 뺏기는 것을 swap-out(suspended)라 하고, 메모리를 다시 할당 받는 것을 swap-in(resume)이라고 한다.
    그런데 메모리를 빼앗긴다고 기존에 하던 작업 모두를 날리는 것은 아니다. 현재까지의 진행 상태를 이미지로 남겨둔다. 이것을 Memory Image라고 한다. Memory Image는 swap device에 보관하는데, swap device는 프로그램 정보 저장을 위한 특별한 파일 시스템이다. 예를 들어서 바둑을 두다가 중단하고, 내일 다시 둬야 한다면 현재까지 진행된 상태를 사진으로 남겨두고, 내일 다시 실행하는 것과 같다. swap device는 하드디스크 같은 것이라고 이해하면 된다.

Terminated/Zombie State

  • 프로세스 수행이 끝나고, 모든 자원을 반납한 상태이다. terminated에 들리는 이후에 실행될 다음 작업을 위해서다. 커널이 해당 프로세스가 어떻게 진행됐고, 어떤 자원들을 요청했고, 일을 얼마나 해야하는지를 알고 있으면 다음에 비슷한 작업이 들어왔을 때 관리하기 쉽기 때문이다. 그래서 커널 내에 일부 PCB 정보들을 남겨놓는다. 이러한 정보 수집이 끝나면 프로세스를 삭제시키고 완전히 프로세스가 종료된다.


프로세스 관리를 위한 자료구조

  • Ready Queue
  • I/O Queue
  • Device Queue

0개의 댓글