JJ BLOG

Ruby on Rails로 웹개발을 하고있는 웹개발자입니다.

프로세스(Process)

08 Oct 2019 »

운영체제

프로세스(Process)란?

프로세스는 실행 중인 프로그램을 말합니다.
프로그램과 프로세스를 구분할 줄 알아야합니다. 이 둘의 차이는 정말 명확합니다.
프로그램은 보조 기억장치(하드디스크, SSD)에 존재하며 실행되기를 기다리는 명령어와 정적인 데이터의 묶음입니다.
이 프로그램의 명령어와 정적 데이터가 메인 메모리에 적재되면 프로세스가 됩니다.


프로세스 상태

프로세스는 다섯 가지의 상태 중 하나의 상태로 존재합니다.
프로세스는 이러한 상태가 변경되면서 수행되는 것입니다.

process


프로세스 문맥

현재 컴퓨터는 하나의 CPU가 여러 프로세스를 동시에 수행합니다.
빠른 속도로 여러 개의 프로세스를 번갈아가며 수행하는 CPU의 입장에서 이전에 수행하고 있던 프로세스가 어디까지 진행되었는지 알아야 합니다. 이러한 부분 외에도 여러 데이터를 프로세스 문맥에서 저장하고 있습니다.

  • CPU의 수행상태
    PC(Program Counter)는 다음에 수행할 명령어의 위치에 대한 주소를 담고 있습니다. CPU가 할당되었을 때 PC가 가리키는 부분부터 수행해나갑니다.

  • 프로세스의 주소 공간
    code, data, stack 각각의 공간에 어떤 값이 들어있는가를 나타내는 주소값을 포함합니다. 현재 변수의 값, 메모리에 담긴 내용, 스택에 어떤 내용이 쌓여있는가 등에 대한 정보입니다.

  • 프로세스 관련 커널 자료구조
    프로세스가 시작될 때, 운영체제는 그 프로세스를 관리하기 위해 PCB를 생성합니다.
    Kernel stack은 주소 공간에서 data에 해당하는 부분에 PCB를 저장합니다.
    시스템 콜이 발생했을 때, 운영체제는 어떤 프로세스가 시스템 콜을 했는지 알기 위해 주소공간의 stack에 시스템 콜을 한 프로세스의 Kernel stack 값을 저장합니다.
    PCB(Process Control Block)?

    프로세스의 정보를 저장하는 블록

    Kernel stack?

    PCB가 저정되는 공간

문맥 교환 (Context Switch)

문맥 교환이란 프로세스 간 CPU 점유가 오가가는 것을 말합니다. 이때, CPU는 이전 프로세스의 상태(PCB)를 저장하고, 다음 프로세스의 상태(PCB)를 읽어와 동작합니다. 시스템 콜이나 인터럽트가 발생했다고 반드시 문맥 교환이 일어나는 것은 아닙니다. 다른 프로세스로 넘어가는 과정에 cache memory에 진행하던 프로세스에 대한 cache를 모두 비워줘야하기 때문에 상당한 오버헤드를 발생시킵니다. 때문에 문맥 교환이 일어나는 상황은 timer Interrupt, I/O 요청 시스템 콜 요청이 왔을 때 입니다.


프로세스를 스케줄링하기 위한 큐(Queue)

  • Job queue
    현재 시스템 내에 있는 모든 프로세스가 담겨있는 공간
  • Ready queue
    현재 메모리 내에 있으면서 CPU를 점유하기위해 기다리는 프로세스가 담겨있는 공간
  • Device queue
    I/O device의 처리를 기다리는 프로세스가 담겨있는 공간

스케줄러(Scheduler)

스케줄은 각각의 자원(CPU, Memory 등)을 어떻게 우선순위를 정할지 나타낼때 사용합니다.

  • 장기스케줄러(Long-term scheduler/job scheduler)
    프로세스에 메모리를 주는 문제를 스케줄링합니다. 시작 프로세스 중 어떤 것들을 Ready queue로 보낼지 결정합니다. 현재에는 곧바로 메모리에 올라가 Ready 상태가 되기때문에 사용되지 않습니다.

  • 단기스케줄러(Short-term scheduler/CPU scheduler)
    프로세스에 CPU를 점유시키는 문제를 스케줄링 합니다. 어떤 프로세스(Ready)를 다음번에 Running 시킬지 결정합니다.

  • 중기스케줄러(Medium-term scheduler/Swapper)
    여유공간 마련을 위해 프로세스에게서 Memory를 뺏는 문제를 스케줄링 합니다. 메모리에 너무 많은 프로세스가 올라와 있을 때, 사용자가 프로그램을 일시 정지시킨 경우 Suspended(Stoped)상태가 됩니다. 외부적인 이유로 프로세스의 수행이 정지된 상태를 말합니다. Blocked 상태는 스스로 Ready로 돌아갈 수 있지만 Suspended 상태는 스스로 돌아갈 수 없습니다.