본문 바로가기

CS/컴퓨터 구조

Process 알아보기

반응형

Process

 

프로세스란? 

프로세스란 실행되기 위해 주기억장치로 올라간 프로그램, 즉 실행 중인 프로그램이라고 정의할 수 있다. 프로세스는 주기억장치에 있으면서 하드웨어를 동작시키는 능동적인 존재다. 또한 프로세는 프로그램 코드뿐만 아니라 실행에 필요한 다양한 정보가 포함된다. 프로세스는 각자 자신만의 독립적인 주소 공간을 가지고 수행되며 프로세스가 다른 프로세스의 주소 공간을 참조하는 것을 허용하지 않는다. 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미칠 수 없다. (다른 프로세스와 정보를 주고받을 수 없기 때문) 운영체제는 프로세스 간의 협력 메커니즘을 제공해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있게 한다.

 

 

프로세스 상태

프로세스의 상태를 구분해보자.

실행 상태 - 프로세스가 CPU를 보유하고, 기계어 명령을 실행하고 있는 상태

준비 상태 - 프로세스가 CPU만 보유하면 당장 명령을 실행할 수 있지만 CUP를 할당받지 못한 상태

봉쇄 상태 - CPU를 할당받더라도 당장 명령을 실행할 수 없는 프로세스의 상태

                  (프로세스가 요청한 입출력 작업이 진행 중이 경우)

시작 상태 - 프로세스가 시작되어 그 프로세스를 위한 각종 자료구조는 생성되었지만 아직 메모리 획득을 승인받지 못한 상태

완료 상태 - 프로세스가 종료되었으나 운영체제가 그 프로세스와 관련된 자료 주조를 완전히 정리하지 못한 상태

 

프로세스의 상태를 구분하는 이유는 컴퓨터의 자원을 효율적으로 관리하기 위해서이다.

 

프로세스 진행 방법

방법 1.

새로운 프로세스가 생성된다. -> 중앙처리장치에 의해 프로세스가 실행되기를 기다린다. -> 중앙처리장치에 의해 프로세스가 실행된다. -> 프로세스가 종료된다.

 

방법 2.

새로운 프로세스가 생성된다. -> 중앙처리장치에 의해 프로세스가 실행되기를 기다린다. -> 중앙처리장치에 의해 프로세스가 실행된다. ->(반복)  어떤 이벤트가 일어나기를 기다린다. -> 중앙처리장치에 의해 프로세스가 실행되기를 기다린다. -> 중앙처리장치에 의해 프로세스가 실행된다. ->  프로세스가 종료된다.

 

Context Switching (문맥 교환)이란?

실행시킬 프로세스를 변경하기 위해 원래 수행 중이던 프로세스의 문맥을 저장하고 새로운 프로세스의 문맥을 세팅하는 과정이다. Context Switching 중 원래 CPU를 할당받은 프로세스는 프로그램 카운터 값 등 프로세스의 문맥을 자신의 PCB에 저장하고, 새롭게 CPU를 할당받을 프로세스는 예전에 저장했던 자신의 문맥을 PCB로부터 실제 하드웨어로 복원시키는 과정을 거친다. Context Switching이 발생하는 경우는 타이머 인터럽트가 발생하는 경우, 실행 상태에 있는 프로세스가 입출력 요청 등으로 봉쇄 상태로 변하는 경우 등이 있다. 

 

PCB(Process Control Block)란?

운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보들을 담는 커널 내의 자료구조를 뜻한다.

 

PCB의 요소 

  • 프로세스의 상태 - CPU를 할당해도 되는지 여부를 결정하기 위해 사용
  • 프로그램 카운터 - 다음  수행할 명령의 위치를 가리키기 위해 사용
  • CPU 레지스터 - CPU 연산을 위해 현시점에 레지스터에 어떤 값을 저장하는지 알리기 위해 사용
  • CPU 스케줄링 정보 - 프로세스의 CPU 스케줄링 할당을 위해 필요한 정보 제공
  • 메모리 관리 정보 - 프로세스의 메모리 할당을 위해 필요한 정보 제공
  • 자원 사용 정보 - 사용자에게 자원 사용 요금을 계산해 청구하기 위해 사용
  • 입출력 상태 정보 - 프로세스가 오픈한 파일 정보 등 프로세스의 입출력 관련 상태 정보를 제공

 

프로세스 스케줄링

중앙처리장치(CPU)는 프로그램의 기계어 명령을 실제로 수행하는 컴퓨터 내의 중앙 처리장치이다. 한 번에 여러 개의 프로세스를 실행하여 중앙처리장치의 이용률을 최대화하는 개념을 다중 프로그래밍이라고 한다. 다중 프로그래밍 환경에서는 실행 상태에 있던 프로세스가 종료되거나 다른 이벤트가 발생하기를 기다리기 위해 대기 상태가 될 경우, 다음에 실행할 새로운 프로세스를 선정해 실행 상태로 바꾼다. 다중 프로그래밍 환경에서 다음에 어떤 프로세스를 실행할지 결정하는 것을 프로세스 스케줄링이라고 한다. 프로세스 스케줄링은 운영체제가 사용하는 기법에 따라 달라진다.

 

 프로세스 스케줄링 목적

  • CPU의 사용량을 최대한 높이기 위해서 사용한다. (낭비 방지)
  • 처리 시간, 대기 시간 및 응답 시간을 최소화하기 위해 사용한다.

 

FCFS(first-come-first-served) 스케줄링

먼저 도착한 프로세스를 가장 먼저 서비스한다. 프로세스 A, B, C가 순차적으로 들어왔을 때 가장 먼저 들어온 순서대로 A -> B -> C 순으로 중앙처리장에 할당하여 실행한다. 들어온 순서대로 실행하기 때문에 실행 순서를 바꿔주는 것만으로도 평균 대기 시간의 차이가 크다.

프로세스 실행 시간
프로세스 A 20ms
프로세스 B 5ms
프로세스 C 2ms

방법 1. 프로세스 A ->  프로세스 B -> 프로세스 C

평균 대기 시간 : ( 0 + 20 +25 ) / 3 = 15ms

 

방법 2. 프로세스 C -> 프로세스 B -> 프로세스 A

평균 대기 시간 : ( 0 + 2 + 7 ) / 3 = 3ms

 

전자의 경우처럼 실행시간이 짧은 프로세스가 실행시간이 긴 프로세스보다 나중에 도착해 오랜 시간을 기다려야 하는 현상을 콘보이 현상(Convoy effect)이라고 하고, 이는 FCFS 스케줄링의 대표적인 단점이다.

 

최단 작업 우선 스케줄링(SJF - Shortest Job First)

실행시간이 가장 짧은 프로세스에게 제일 먼저 CPU를 할당하는 방식이다. 평균 대기시간을 가장 짧게 하는 최적 알고리즘으로 알려져 있고 비선점형 방식과 선점형 방식 두 가지로 구현될 수 있다. 

프로세스 도착 시간 실행 시간
프로세스 A 0 14ms
프로세스 B 4 8ms
프로세스 C 8 2ms
프로세스 D 10 8ms

SJF 비선점형 스케줄링

프로세스 A -> 프로세스 C -> 프로세스 B -> 프로세스 D

0 - A - 14 - C - 16 - B - 24 - D - 32 

평균 대기 시간 : ( 0 + 12 + 6 + 14 ) / 4 = 8ms 

 

SJF 선점형 스케줄링

프로세스 A -> 프로세스 B -> 프로세스 C -> 프로세스 B ->프로세스 D -> 프로세스 A

0 - A - 4 - B - 8 - C - 10 - B - 14 - D - 22 - A - 32

평균 대기 시간 : ( 18 + 2 + 0 + 4 ) / 4 = 6ms 

 

SFJ 알고리즘이 평균 대기시간을 최소화하는 알고리즘이기는 하지만 시스템 평균을 줄이는 것이 항상 좋은 방식이라고는 말할 수 없다. 계속 실행시간이 짧은 프로세스에게만 CPU를 할당할 경우 실행시간이 긴 프로세스는 준비 큐에 무한히 기다려야 하는 문제가 발생할 수 있기 때문이다. (기아 현상)

 

우선순위 스케줄링

가장 높은 우선순위의 프로세스에 먼저 CPU를 할당하는 방식으로 프로세스 간의 우선순위가 같은 경우 FCFS 스케줄링 기법을 적용한다. 우선순위 스케줄링도 비선점형과 선점형 방식으로 각각 구현할 수 있다. 현재 CPU에서 수행 중인 프로세스보다 우선순위가 높은 프로세스가 도착하여 CPU를 선점해서 새롭게 도착한 프로세스에게 할당할 경우 선점형 방식, CPU를 얻었으면 비록 우선순위가 더 높은 프로세스가 도착하더라도 CPU를 자진 반납하기 전까지 선점하지 않는 비선점형 방식이 있다. 우선순위 스케줄링은 프로세스의 우선순위가 낮으면 매우 오랜 시간 동안 실행되지 않을 수 있다는 문제점이 있다. 이런 경우 에이징이라는 해결책이 있는데, 이는 일정 시간 동안 실행되지 않으면 우선순위를 한 단계씩 높이는 방법이다. 에이징을 사용하면 아무리 낮은 우선순위의 프로세스라도 어느 정도 시간이 지나면 적절한 우선순위를 갖게 되어 실행된다.

 

라운드 로빈 스케줄링

임의의 프로세스가 종료될 때까지 CPU를 차지하는 것이 아니라, 여러 프로세스들이 CPU를 조금씩 돌아가며 차지하는 방식이다. (리눅스를 포함한 대부분의 시스템이 이 방식을 사용) 라운드 로빈에서 프로세스들은 시간 할당량 동안 CPU를 할당받아 실행한다. 만약 실행 기간 동안 실행을 종료하지 못하면 운영체제에 의해 준비상태로 쫓겨나고, 준비 큐의 다음 프로세스가 CPU를 할당받아 실행된다. 라운드 로빈 기법에서 시간 할당량의 크기는 성능에 큰 영향을 미친다. 만약 각 프로세스들의 실행이 종료될 만큼 시간 할당량이 크면 FCFS 스케줄링과 같게 되고, 시간 할당량이 너무 적으면 Context Switching이 자주 발생하여 Context Switching을 하는데 많은 시간을 소모한다. (일반적으로 10 ~ 100ms 할당) 라운드 로빈 스케줄링은 여로 종류의 이질적인  프로세스가 같이 실행되는 환경에서 효과적이다.

프로세스 실행 시간
프로세스 A 20ms
프로세스 B 5ms
프로세스 C 2ms

프로세스 A ->  프로세스 B -> 프로세스 C (시간 할당량 4ms)

0 - A - 4 - B - 8 - C - 10 - A - 14 - B - 15 - A - 19 - A - 23 - A - 27

평균 대기 시간 : ( 7 + 10 + 8) / 3 = 8.3ms

 

라운드 로빈 스케줄링은 일반적으로 SJF 방식보다 평균 대기 시간은 길지만 응답 시간은 더 짧다. 대화형 프로세스의 빠른 응답 시간을 보장할 수 있다.

 

실시간 스케줄링

실시간 시스템은 경성 실시간 시스템과 연성 실시간 시스템으로 나누어볼 수 있다. 경성 실시간 시스템은 미사일 발사, 원자로 제어 등 시간을 정확히 지켜야 하는 시스템을 말하며 이런  시스템에서 정해진 시간 안에 반드시 작업이 완료되도록 스케줄링해야 한다. 바면 연성 실시간 시스템은 데드라인이 존재하기는 하지만 데드라인을 지키지 못했다고 해서 위험한 상황까지는 발생하지 않는다. 멀티미디어 스트리밍 시스템을 예로 들 수 있다. 실시간 환경에서는 먼저 온 요청을 먼저 처리하기보다는 데드라인이 얼마 남지 않은 요청을 먼저 처리하는 EDF (Earlist Deadline First) 스케줄링을 널리 사용하고 있다.

 

 

참고

https://medium.com/@sheenam.mca17.du/process-scheduling-b86975413079

 

Process Scheduling

Understanding the CPU schedulers…

medium.com

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9791158903589 

 

운영체제와 정보기술의 원리 - 교보문고

이 책은 총 10장으로 구성되어 있다.1장 ‘컴퓨터 및 정보기술의 역사’에서는 운영체제를 설명하기에 앞서 정보기술의 원리와 철학에 대해 정의하고, 컴퓨터와 정보기술 분야의 역사를 간략히

www.kyobobook.co.kr

 

반응형