Burst(버스트)

버스트는 '한 작업을 연속적으로 처리하는 것'으로, 보통 작업 처리에 필요한 시간을 의미한다.

따라서 CPU(I/O) 버스트는 각각 CPU 명령 수행과 I/O(입출력 요청) 처리까지 걸리는 시간이라고 이해하면 된다.

프로그램은 CPU 버스트와 I/O 버스트가 번갈아가며 반복되는 방식으로 실행된다. 

CPU - I/O 버스트의 반복

 

I/O 버스트의 특징

I/O 버스트의 경우, 기본적으로 장치 속도가 느리고, 추가로 커널 요청 작업까지 필요하기 때문에, CPU 버스트에 비해 상대적으로 긴 시간이 소요 된다는 특징이 있다.

 

실제로 I/O는 아래와 같은 복잡한 Cycle로 처리된다.

I/O Cycle

CPU 버스트의 양상

CPU 버스트는 주로 CPU가 실행이 많이 필요한 작업을 수행할 때나, I/O 처리를 요청할 때 수행된다.

I/O 요청 과정에선 CPU 버스트가 작고, CPU 연산이 많이 요구되는 작업에선 CPU 크다. 전반적인 CPU 버스트의 양상을 확인해보면, 아래의 그래프처럼 대다수의 짧은 버스트와 소수의 긴 버스트로 구성된다.

Chapter 5 CPU Scheduling - ppt download (slideplayer.com)

 

 

Bound(바운드)

프로그램의 역할이 다른 만큼, CPU 버스트와 I/O 버스트의 실행 비율 또한 다르다.

상대적으로 CPU 버스트가 많은 프로그램을 CPU Bound(바운드)라고 하고, I/O 버스트가 많은 프로그램을 I/O Bound(바운드)라고 한다.

CPU Bound(a)와 IO Bound(b)의 양상

위 그림은 CPU Bound와 I/O Bound 프로그램의 대략적인 버스트 양상을 나타낸 것이다.

 

CPU Bound Job
  • 프로그램의 실행 속도가 CPU 속도에 의해 제한되는 경우를 의미한다.
  • CPU 버스트가 많은, 복잡한 수학적 연산이 필요할 경우 발생한다.
    • 아래의 코드처럼 반복적인 연산이 요구될 경우 CPU 바운드가 발생할 것이다.
# 연산량이 커지면, 프로그램 실행 속도가 영향
# CPU - 바운드
def cpu_bound_func(number: int):
    total = 1
    arange = range(1, number + 1)
    for i in arange:
        for j in arange:
            for k in arange:
                total += i * j * k

    return total

if __name__ == "__main__":
    result = cpu_bound_func(200)
    print(result)

 

I/O Bound Job
  • I(input), O(ouput)에 의해 프로그램 실행 속도가 제한되는 경우를 의미한다.
  • 일반적으로 사람에 의한 입, 출력에 의해서 발생한다.
    • 사용자의 입력 전까진 프로그램이 실행되지 않음
# i : input, o : ouput
# 입-출력에 의해 프로그램 실행 속도가 제한되는 경우
def io_bound_func():
    print("값을 입력해주세요.")
    input_value = input()
    return int(input_value) + 100


if __name__ == "__main__":
    result = io_bound_func()
    print(result)
  • 서버 사이 네트워크 통신에 의해서도 발생 가능
    • GET 요청이 실패할 경우 프로그램이 실행되지 않음
import requests

def io_bound_func():
    result = requests.get("<https://google.com>")
    return result

if __name__ == "__main__":
    # 네트워크에 의한 io-bound 발생
    for i in range(10):
        result = io_bound_func()
    print(result)

참고

 

Operating System Concepts - 10th edition

 

www.os-book.com

  • 기본 개념과 그림들을 참고했다.
 

파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI) - 인프런 | 강의

파이썬에서 동시성 / 병렬성 프로그래밍을 사용하여 데이터를 수집하여 MongoDB에 적재하고 분석하여 모던 웹 프레임워크인 FastAPI를 사용해 수집한 데이터를 시각화한 웹 앱을 개발합니다. 이 과

www.inflearn.com

  • 코드 예시를 참고했다.