게시:
수정:

프로세스(Process)란?

컴퓨터 시스템에 어떠한 처리 요청이 들어오면 메모리에 있는 명령을 불러와 CPU에서 실행하고 그 결과를 다시 메모리에 저장한 뒤 저장장치에 기록하거나 네트워크를 통해 다른 컴퓨터에 전송한 뒤 필요 시 그 결과를 사용자에게 디스플레이 장치를 통해 결과를 표시해준다.

이러한 순서를 반복해서 처리하는 기능을 하나로 패키징한 것을 프로그램이라고 하며 OS가 프로그램을 관리하기 위한 단위를 프로세스라고 한다. 다시 정리하면, OS는 여러 가지 프로그램을 프로세스라는 단위로 실행하며 각 프로그램은 1개 혹은 여러 개의 프로세스로 구성된다.

프로세스(Process)란 실행되고 있는 프로그램을 말한다.
“Process is a program in execution.”

프로세스의 문맥(Context)

특정 시점을 놓고 봤을 때 이 프로세스가 어디까지 실행을 했는지 가리키는 것이다.

프로세스는 실행이 시작되면 독자적인 주소공간(Address Space)를 형성한다. 이 프로세스가 CPU를 잡게 되면 PC 레지스터(Program Counter Register)가 이 프로세스 코드(Code)의 어느 부분을 가르키게 되고 매순간 인스트럭션(Instruction)을 CPU로 불러와 레지스터에 값을 넣고 ALU(산순논리연산장치)에서 무언가 연산 결과를 레지스터나 메모리에 저장하게 된다.

이 과정을 계속하다가 해당 프로세스가 어디까지 진행해서 와있는가를 규명하는데 필요한 요소들을 프로세스의 문맥(Context, 이하 컨텍스트[1])라고 한다.

현대의 컴퓨터 시스템[2]은 프로세스를 번갈아가며 실행하는 시분할 멀티태스킹(Time sharing multitasking)으로 구현된다.

만약 컨텍스트가 없다면 프로그램이 CPU를 놓고 다시 CPU를 잡을 때 앞부분부터 다시 시작하여야 한다. 따라서 프로그램 컨텍스트를 정확하게 파악하고 있어야 어디까지 진행했는지 알 수 있고 다음 인스트럭션을 실행할 수 있다. 컨텍스트의 종류는 아래 목록과 같다.

  1. CPU와 관련된 하드웨어 컨텍스트
    • PC, 각종 레지스터(Registers)의 값
  2. 메모리(Memory)와 관련된 프로그램 주소공간
    • 코드(Code), 데이터(Data), 스택(Stack)에 어떤 내용이 들어있는가
  3. 프로세스와 관련된 커널(Kernel) 자료구조
    • PCB(Program Control Block), 커널 스택(Kernel Stack)

프로세스의 상태(State)

프로세스는 상태가 변경되며 수행된다. 상태는 크게 ▲CPU를 잡았거나(Running) ▲CPU를 기다리거나(Ready) ▲뭔가 오래 걸리는 것을 하고 있거나(Blocked)로 나뉜다.

Process State Diagram.
Running(Monitor mode)는 OS가 Running이라는 것이 아니라 프로세스가 OS모드라는 의미이다.

Running

CPU를 잡고 인스트럭션을 실행 중인 상태를 말한다.

Ready

CPU를 기다리는 상태이다. 마냥 기다리는 것이 아니라 메모리 등 다른 조건이 모두 만족하고 대기하는 상태가 Ready이다. 보통 Running과 Ready를 번갈아가면서 CPU를 잡았다가 놓았다가 왔다갔다하며 Time sharing system을 구현한다.

커널 주소공간의 데이터 영역에 큐(Queue)로 구현되며 프로세스가 Ready 상태로 변경되면 큐에 들어간다.

Blocked(Wait, Sleep)

CPU를 넘겨 줘봤자 당장 인스트럭션을 실행하지 못하는 상태이다. 프로세스 자신이 요청한 이벤트(예: 입・출력)가 즉시 만족되지 않아 이를 기다리는 상태이다. 아직 CPU 할당시간이 남아있지만 자발적으로 프로세스를 중지시킨 상태이다.

요청한 이벤트가 종료되면 Ready 상태로 변경(Ready Queue에 들어가게)된다.

Suspended(Stopped)

외부적인 이유로 프로세스 수행이 중지된 상태이다. 프로세스는 통째로 디스크에 Swap out된다.

Blocked와 비슷하여 햇갈릴 수 있는데 Blocked는 자신이 요청한 이벤트를 위하여 자발적으로 프로세스를 정지시킨 것이고 Suspended는 자의적이지 않은 외부적인 요인(예: 사용자가 중단시킨 경우)에 의하여 중지된 상태이다.

Suspended는 요청한 입・출력이 끝나면 Ready 상태로로 돌아가는 Blocked와 달리 외부에서 Resume해야 Active 상태로 돌아간다.

New

프로세스가 막 생성 중인 상태를 말한다.

Terminated

프로세스가 종료된 상태를 말한다. 주어진 인스트럭션을 모두 수행하고 마지막 정리 중인 상태이다.

PCB(Program Control Block)

운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보를 말한다. 커널 주소공간의 데이터 영역에 포함되며 다음의 구성요소를 가지며 구조체로 유지된다.

전술한 컨텍스트에 대한 내용을 보면 알 수 있듯이 아래의 제2~제4항은 컨텍스트와 관련된 정보이다.

  1. 운영체제가 관리상 사용하즌 정보
    • Process state, Process ID, Scheduling Information, Priority[3]
  2. CPU 수행 관련 하드웨어 값
    • Program counter 값, registers 값
  3. 메모리 관련
    • Code, Data, Stack의 위치 정보
  4. 파일 관련
    • 열려 있었던 파일의 설명 등
Structure of Process Control Block
PCB(Process Control Block) 구조

컨텍스트 전환(Context Switch)

컨텍스트 스위치[4]는 CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정을 말한다.

운영체제가 프로세스의 상태(PC, 레지스터 값, 메모리 맵 등)을 해당 프로세스의 PCB에 저장하고 새로 얻는 프로세스의 상태를 해당 프로세스의 PCB에서 읽어오는 작업이다. 입・출력을 위한 시스템 콜이나 CPU 할당시간이 초과되어 인터럽트가 발생하면 컨텍스트 전환이 발생한다.

Image of Context switch.
컨텍스트 스위치는 PCB를 저장하고 PCB를 불러오는 과정이다.

시스템 콜과 인터럽트는 모두 컨텍스트 전환을 발생시키는가

그럴 수도 있고 아닐 수도 있다.

사용자 프로세스가 시스템 콜을 발생시키거나 외부에서 인터럽트가 들어오면 운영체제는 인터럽트 서비스 루틴을 실행시키거나 시스템 콜 함수를 실행한다. 보통 이때는 컨텍스트 스위치 없이 다시 이전 프로세스에 CPU 제어권을 준다.

반면 타이머 인터럽트가 발생하면 CPU를 다른 프로세스에 할당하며 CPU에 비해 처리속도가 매우 느린 I/O 요청 시스템 콜의 경우에도 해당 프로세스를 Blocked로 변경한 뒤 운영체제가 CPU를 다른 프로세스에 할당한다. 이 경우에는 컨텍스트 전환이 발생한다.

전자의 경우에도 CPU 수행정보 등 컨텍스트의 일부는 PCB에 저장하는 과정이 있긴하지만 후자의 경우 모든 컨텍스트를 저장하고 캐쉬 메모리(Cache Memory)를 Flush 하는 등 오버헤드(Over Head)가 훨씬 크다.

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

프로세스들은 상태에 따라서 각 큐들을 오가며 수행한다.

Ready queue and variety device queue.
Ready queue와 다양한 Device queue. 다음 PCB를 포인터가 가리키고 있다.
  • Job Queue
    • 현재 시스템 내에 있는 모든 프로세스의 집합
  • Ready Queue
    • 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  • Device Queue
    • 입・출력(I/O) 디바이스의 처리를 기다리는 프로세스의 집합
Process scheduling queue.
프로세스 스케줄링 큐.

스케줄러(Scheduler)

각각의 자원별로 순서를 정해주는 것을 스케쥴러라고 한다.

단기 스케줄러(Short-term Scheduler, CPU Scheduler)

  • 어느 프로세스에 CPU를 줄지 결정하는 스케줄러이다.
  • Ready Queue에 있는 프로세스 중 어떤 것을 다음 번에 Running시킬지 결정한다.
  • 충분히 빨라야 하며 밀리세컨드(Milli second) 단위로 이루어진다.

장기 스케줄러(Long-term Scheduler, Job Scheduler)

  • 어느 프로세스에 메모리를 줄지 결정하는 스케줄러이다.
  • 어떤 프로세스를 메모리에 올릴지(Ready Queue로 보낼지) 결정한다.
  • 메모리에 프로그램에 몇 개 올라갈지(Degree of Multiprogramming)를 제어한다.
  • 사실 Time sharing system에는 잘 쓰이지 않는다. (실행과 동시에 Ready)

중기 스케줄러(Medium-term Scheduler, Swapper)

  • 어느 프로세스를 메모리에서 쫒아낼지 결정하는 스케줄러이다.
  • 너무 많은 메모리에 프로그램이 올라오면 성능이 안 좋아지기 때문에 메모리에 너무 많은 프로그램이 올라가 있으면 스와퍼가 일부 프로세스를 메모리에서 통째로 디스크에서 쫓아낸다.
  • 현대의 운영체제에서는 중기 스케줄러(Swapper)를 활용하여 Degree of Multiprogramming을 제어한다.

각주

1 : 원 강의에서 ‘문맥’이라고 표현했으나 보다 직관적인 영어식 표현을 차용.
2 : 싱글 코어(Single core) 프로세스의 경우를 말한다.
3 : 레디 큐(Ready Queue)에 있다고 순차적으로 수행되는 것이 아니라 우선순위를 감안하여 수행
4 : 원 강의에서 ‘문맥 변경’이라고 표현했으나 보다 직관적인 영어식 표현을 차용.

Reference

반효경, “반효경 [운영체제] 5. Process1” KOCW. 2014년 3월 18일. video, http://www.kocw.net/home/cview.do?lid=b31830a2b3cf1e60


OS 시리즈 모두보기 (펼치기)


댓글남기기