운영체제 수업을 수강하며 정리한 내용을 작성하려고 합니다.
컴퓨터(OS)의 역사
1. Mainframe

Mainframe - 일괄처리(batch)
- 특징
- 펀치 카드 제출 → 메모리 적재 → 수행
- 일단 시작한 Job이 끝나야 다음 Job이 수행됨
- Job의 중간에 유저와 상호작용이 불가능
- 문제점
- CPU는 빈번히 idle 상태로 전환
- I/O 장치가 끝날 때까지 CPU는 계속해서 대기해야 함
Batch의 해결책 - Spooling
- 특징
- Simultaneous Peripheral Operation On-Line
- I/O와 computation을 동시에 진행할 수 있음
- I/O 요청시 버퍼에 로드, I/O 장치는 버퍼에서 데이터를 가져옴
- 컴퓨터는 여러 I/O 작업을 순차적으로 요청해둘 수 있음
- I/O 작업이 진행되는 동안 컴퓨터는 다른 작업을 수행할 수 있음
- 문제점
- Asynchronous IO(비동기적 IO) 작업에는 적합하나, IO 처리 결과를 필요로 하는 Synchronous IO 작업의 경우 여전히 CPU는 대기해야함
Spooling의 해결책 - Automatic job sequencing
- 특징
- 사람의 관여 없이 여러 개의 job을 컴퓨터에서 순차적으로 실행
- 한 프로그램이 IO 수행 시, 다른 프로그램이 CPU 점유 → Spooling의 문제점 해결
- 사람이 일일이 다음 작업을 시작해야하는 Batch와 달리, 이전 작업의 종료와 동시에 다음 작업을 실행하기 때문에 성능이 좋음
- Batch와의 차이점
- Batching : 사람이 직접 스케줄링
- Automatic job sequencing: 스케줄링을 담당하는 SW에서 프로그램 실행
멀티 프로그래밍 (multiprogramming)
- Automatic job sequencing에 필요한 기술
- 2개 이상의 작업을 동시에 실행
- 운영체제는 여러 개의 작업을 메모리에 동시에 유지
- 현재 실행중인 작업이 I/O를 할 경우 다음 작업을 순차적 실행
- 장점
- CPU가 쉬지 않기 때문에 CPU 활용률이 극대화됨
- 문제점
- 현재 Job이 I/O를 해야 다른 Job으로 순서가 넘어감, 즉 voluntary yield에 의존함
- 사용자 또는 운영체제는 여전히 실행중인 작업에 대해서는 관여할 수 없음
- High priority로 수행할 필요도 생김
- 공평성을 유지할 필요 발생
Time Sharing(시분할 기법)
- CPU의 실행 시간을 타임 슬라이스(e.g. 10ms)로 나누어 실행
- 모든 프로그램은 타임 슬라이스 동안 CPU를 점유하고, 그 시간이 끝나면 CPU를 양보
- 여러 개의 작업들은 CPU 스위칭을 통해서 동시에 실행되는 것처럼 느껴짐
Concurrent execution
- 여러 프로그램들이 동시에 수행 상태에 있는 것처럼 느껴지게 하는 것
- 멀티프로그래밍 또는 time sharing을 할 때 가능
- 실제로 같은 시간에 한 코어에서 여러 프로그램이 실행되지는 않는다
Time sharing의 단점
- CPU 스위칭 시 프로그램의 state를 저장(context switching)해야 함
- state : 프로그램이 실행되고 있는 상태(context)
- 프로그램 구동 중 캐시 메모리, 레지스터 등을 flush, reload
- 이 때 오버헤드가 발생
- State의 저장이 없으면 일시정지된 프로그램을 다시 실행할 수 없음
Multitasking(멀티태스킹)
- 하나의 Job은 동시에 실행할 수 있는 task로 나눔
- 여러 개의 task들이 CPU와 같은 자원을 공유하도록 하는 방법
- Concurrent execution을 지원하고자 함
멀티태스킹 이슈
- 복잡한 메모리 관리 시스템
- 동시에 여러 개의 프로그램이 메모리에 상주됨
- 메모리 관리 및 보호 시스템 필요
- 적절한 응답 시간을 제공
- Job들은 메모리와 디스크로 swap in/out 될 수 있음
- Concurrent execution 제공
- 필요에 따라서 job들간의 orderly execution 이 필요
요약
- Batching(일괄처리)
- Multiprogramming: with voluntary yield
- 장점: CPU 활용률 극대화
- 단점: 작업들 간의 공평성 보장 불가
- Timesharing: with an interrupt of OS
- 장점: OS의 정책에 따른 정확한 스케줄링 가능
- 단점: 작업 간의 스위칭으로 인한 성능 오버헤드 발생
- Multitasking based on timesharing
- 하나의 job을 여러 task로 구성하는 개념을 제공
- 여러 task가 CPU를 번갈아가며 점유한다는 점에서, multiprogramming과 timesharing을 모두 multitasking의 한 형태로 보는 관점도 존재
- 장점: 복잡한 프로그램의 설계를 가능하게 함