[운영체제] 멀티 프로그래밍 & 시분할 시스템

Profile-exe·2021년 9월 11일
0

Operating-System

목록 보기
2/5
post-thumbnail

운영체제는 컴퓨터 시스템의 자원을 효율적으로 사용할 수 있도록 한다. 여러 프로그램들을 동시에 실행했을 때, CPU가 각 프로그램들을 옮겨다니며 효율적으로 실행하는 것도 이 중 하나다.

운영체제가 여러 프로그램을 실행시키는 경우 멀티 프로그래밍시분할 시스템 방식이 존재한다.

이번 포스트에서는 각 방식의 개념과 방식에 따라 CPU어떠한 상황에 다른 프로그램으로 넘기는지 알아보도록 하자.


📖 멀티 프로그래밍 - Multiprogramming System

Multiprogramming 또는 Multitasking

  • 여러 프로그램 동시에 실행

💡 CPU를 넘기는 경우

프로세스(메모리에 올라가 실행 중인 프로그램) A, B가 있다고 가정

  • 실행 중AI/O 함수(입출력 함수)를 호출했을때 I/O 장치데이터가 없는 경우
    • CPU 이동 : AB (B 프로그램 실행)
  • I/O 장치A가 기다리던 데이터가 들어온 경우

    • A준비상태 - CPU가 오면 바로 실행 가능한 상태
    • 우선순위에 따라 A의 실행여부 결정 - A최우선순위면 바로 실행
    • CPU 이동 : 원래 실행하던 프로그램 ➡ 우선순위가 가장 높은 프로그램
  • 현재 실행중인 프로그램 완료 또는 I/O로 인해 대기 중인 경우

  • 🚨 시분할 처리 기능은 없음

✍️ Multiprogramming 정리

  • 현재 실행 중인 프로그램 완료 / 종료
  • 현재 실행 중인 프로그램 I/O로 인해 대기
  • I/O 장치에 기다리던 데이터 도착

위 상황에서 CPU가 이동한다.


📖 시분할 시스템 - Time Sharing System

Time Sharing

  • 여러 대화형 프로그램 동시에 실행
  • CPU가 각 프로그램을 일정 시간(time quantum 또는 time slice)동안 번갈아 가면서 실행
    • Multiprogramming system 기능을 포함

💡 CPU를 넘기는 경우

time slice0.1초라고 가정

time slice 지나지 않은 경우 - Multiprogramming과 동일

  • 실행 중인 프로그램이 I/O 함수를 호출했을 때
  • I/O 장치에 기다리던 데이터가 들어온 경우
    • 우선순위 고려해서 실행 할 프로그램 결정

time slice 지난 경우

  • 실행 중인 프로그램이 0.1초동안 I/O 없이 계속 실행했을 때
    (CPU를 계속 사용했을 때)

✍️ Time Sharing 정리

  • 현재 실행 중인 프로그램 완료 / 종료
  • 현재 실행 중인 프로그램 I/O로 인해 대기
  • I/O 장치에 기다리던 데이터 도착
  • 📌time slice동안 I/O 없이 계속 실행된 경우📌

위 상황에서 CPU가 이동한다.


📖 Multiprogramming / Time Sharing 목적

CPU 스위칭은 오버헤드로 볼 수 있다.

🎯 Multiprogramming 목적 - CPU 이용률 최대화

  • time slice에 의한 CPU 스위칭 없음
  • I/O 스위칭만 발생

📝 CPU 이용률 최대화 과정

사용자 프로그램 계속 실행 ➡ 프로그램 실행 비율 ⬆️ ➡ CPU 이용률 ⬆️

🎯 Time Sharing 목적 - 응답 시간 최소화

  • time slice에 의한 CPU 스위칭 존재
  • I/O 없이 실행만 한다면 다른 프로그램 실행

📝 응답시간 최소화 과정

번갈아가면서 프로그램 계속 실행 ➡ 응답시간 ⬆️

💡 CPU 이용률 & 응답시간

CPU 이용률 (utilization) : CPU총 실행한 시간사용자 프로그램을 사용한 시간의 비율

  • 사용자 프로그램 실행(7초) + CPU 스위칭(0.6초) + I/O 스위칭(0.4초) + CPU 휴식상태(2초)
  • CPU 이용률 : 7초 / 10초 = 0.7

응답시간(response time) : 입력이 주어지고 나서 첫 출력이 나오는데 걸린 시간

  • 키보드에서 엔터 입력 후 처음 화면 출력이 나오는데 걸린 시간
  • URL 주소 입력처음으로 웹 페이지가 화면에 보여지는데 걸린 시간

💡 CPUidle 상태

for (;;);

의미없는 무한 루프


📖 CPU 이용률 & 응답시간 비교

💬 주어진 상황

10개의 프로그램이 돌고 있음

  • 각 프로그램의 실행시간 : 1초
  • 내 프로그램은 마지막 10번째에 실행
  • 앞의 9개 프로그램은 I/O 없이 계산만 수행하고 종료 시 결과를 화면에 출력
  • 내 프로그램은 실행 시 0.1초마다 결과를 화면에 출력(response)

📈 CPU 이용률 [Processor utilization] 비교

Multiprogramming

  • I/O 작업을 대기하는 상황이 아니면 계속 실행
  • 그 만큼 프로그램을 실행시키는데 CPU 시간을 더 할애
    • 0.1초마다 CPU다른 프로그램으로 넘기지 않아도 되므로
  • 따라서 CPU 이용률time sharing보다 더 높음
    • 대신 응답시간은 더 길어짐

사용자 프로그램 실행(10초) + I/O 스위칭(0.1초) = 10.1초

CPU 이용률 : 10초 / 10.1초 = 0.99

Time Sharing

  • 0.1초마다 CPU를 다른 프로그램에게 넘김
  • 넘기는 과정에서 timer interrupt handler, scheduler() 등의 코드 수행
  • 이는 Time Sharing을 위한 추가적인 CPU overhead

사용자 프로그램 실행(10초) + CPU 스위칭(0.4초) + I/O 스위칭(0.1초) = 10.5초

CPU 이용률 : 10초 / 10.5초 = 0.95

✍️ Multiprogramming CPU 이용률이 더 높음

🚨 주의

  • 사용자 프로그램 실행 시간은 동일
  • CPU의 총 사용 시간 차이

⏰ 응답시간 [Response Time] 비교

Multiprogramming

  • 앞의 9개 프로그램은 I/O 없음 따라서 실행 중인 프로그램은 종료될 때까지 계속 실행
  • 따라서 9개의 프로그램 실행이 종료되어야 내 프로그램 실행
  • 9초가 지나서야 내 프로그램의 결과 출력 시작

응답시간 : 내 프로그램 시작(9초) + 결과 출력(0.1초) = 최소 9.1초 이상

Time Sharing

  • 0.1초씩 번갈아가면서 모든 프로그램 실행
  • 1초마다(각 프로그램당 0.1초씩 10개) 내 프로그램 실행
  • 실행 결과가 조금씩 출력되는 것 확인 가능

응답시간 : 내 프로그램 시작(0.9초) + 결과 출력(0.1초) = 최소 1초 이상

✍️ Time Sharing 응답시간이 더 빠름

🚨 주의

  • 결과 출력 시간은 동일
profile
컴퓨터공학과 학부생

0개의 댓글