운영체제는 컴퓨터 시스템의 자원을 효율적으로 사용할 수 있도록 한다. 여러 프로그램들을 동시에 실행했을 때, CPU
가 각 프로그램들을 옮겨다니며 효율적으로 실행하는 것도 이 중 하나다.
운영체제가 여러 프로그램을 실행시키는 경우 멀티 프로그래밍과 시분할 시스템 방식이 존재한다.
이번 포스트에서는 각 방식의 개념과 방식에 따라 CPU
를 어떠한 상황에 다른 프로그램으로 넘기는지 알아보도록 하자.
Multiprogramming System
Multiprogramming
또는Multitasking
- 여러 프로그램 동시에 실행
프로세스(메모리에 올라가 실행 중인 프로그램) A
, B
가 있다고 가정
A
가 I/O 함수(입출력 함수)를 호출했을때 I/O 장치
에 데이터가 없는 경우A
➡ B
(B 프로그램 실행)I/O 장치
에 A
가 기다리던 데이터가 들어온 경우
A
는 준비상태 - CPU
가 오면 바로 실행 가능한 상태A
의 실행여부 결정 - A
가 최우선순위면 바로 실행현재 실행중인 프로그램 완료 또는 I/O로 인해 대기 중인 경우
🚨 시분할 처리 기능은 없음
✍️
Multiprogramming
정리
- 현재 실행 중인 프로그램 완료 / 종료
- 현재 실행 중인 프로그램 I/O로 인해 대기
- I/O 장치에 기다리던 데이터 도착
위 상황에서 CPU가 이동한다.
Time Sharing System
Time Sharing
- 여러 대화형 프로그램 동시에 실행
CPU
가 각 프로그램을 일정 시간(time quantum 또는 time slice)동안 번갈아 가면서 실행
- Multiprogramming system 기능을 포함
time slice
는 0.1초라고 가정
time slice
지나지 않은 경우 - Multiprogramming
과 동일time slice
지난 경우CPU
를 계속 사용했을 때)✍️
Time Sharing
정리
- 현재 실행 중인 프로그램 완료 / 종료
- 현재 실행 중인 프로그램 I/O로 인해 대기
- I/O 장치에 기다리던 데이터 도착
- 📌time slice동안 I/O 없이 계속 실행된 경우📌
위 상황에서 CPU가 이동한다.
Multiprogramming
/ Time Sharing
목적CPU
스위칭은 오버헤드로 볼 수 있다.
Multiprogramming
목적 - CPU
이용률 최대화time slice
에 의한 CPU
스위칭 없음📝 CPU 이용률 최대화 과정
사용자 프로그램 계속 실행 ➡ 프로그램 실행 비율 ⬆️ ➡
CPU
이용률 ⬆️
Time Sharing
목적 - 응답 시간 최소화time slice
에 의한 CPU
스위칭 존재📝 응답시간 최소화 과정
번갈아가면서 프로그램 계속 실행 ➡ 응답시간 ⬆️
CPU 이용률 (utilization) :
CPU
가 총 실행한 시간 중 사용자 프로그램을 사용한 시간의 비율
- 사용자 프로그램 실행(7초) + CPU 스위칭(0.6초) + I/O 스위칭(0.4초) + CPU 휴식상태(2초)
- CPU 이용률 : 7초 / 10초 = 0.7
응답시간(response time) : 입력이 주어지고 나서 첫 출력이 나오는데 걸린 시간
- 키보드에서 엔터 입력 후 처음 화면 출력이 나오는데 걸린 시간
- URL 주소 입력 후 처음으로 웹 페이지가 화면에 보여지는데 걸린 시간
CPU
의 idle
상태for (;;);
의미없는 무한 루프
10개의 프로그램이 돌고 있음
- 각 프로그램의 실행시간 : 1초
- 내 프로그램은 마지막 10번째에 실행
- 앞의 9개 프로그램은 I/O 없이 계산만 수행하고 종료 시 결과를 화면에 출력
- 내 프로그램은 실행 시 0.1초마다 결과를 화면에 출력(response)
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 이용률이 더 높음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
응답시간이 더 빠름