컴퓨터의 기원
- Compute + er
- 2차 세계대전
암호 해석
미사일 탄도 분석
물리 계산
Hand-operated System
1950년대 초반
-
당시 컴퓨터는 현재의 컴퓨터에 비해 매우 원시적임
-
프로그램인 기계적인 스위치를 이용하여, 1bit 단위로 컴퓨터에 입력되어 실행
진공관 기반-> 집채만 한 크기, 많은 열 방출
1950년대 중반
1960년대 초반
Batch System
- Mainframe - 일괄처리(Batch) : 펀치카드를 기반으로 한 대표적인 컴퓨터 시스템
=> 이 시기부터 OS의 시작이라고 봐도 됨
상용 시스템(Business Machinery)로써 쓰이면서 가치가 발생
-
계산을 하는데 주로 사용되기 시작함
-
교량(Bridge) 설계 등.
일괄 처리 - 아주 단순한 OS 개념
-
일단 시작한 "Job"은 끝나야 다음 Job이 수행됨
-
Punch card를 제출하면, 메모리에 적재, 수행의 순서로 진행
-
결과를 받기까지 중간에 User Interaction이 불가능함
-
사람이 Job Scheduling 함
=> 현대 OS에서 가장 중요하다 여기는...(Scheduling)
CPU는 빈번히 Idle 상태로 전환됨
- 기계적인 I/O 장치와 전기 장치인 CPU사이에 현격한 속도 차이 존재
Automatic Job Sequencing
- 사람의 관여 없이, 여러 개의 프로그램을 순차적으로 실행
- 이전 작업이 종료되자마자 다음 작업을 실행하기에, 일괄 처리(Batch)보다 성능이 향상됨
일괄 처리 : 사람이 직접 스케줄링
Automatic Job Sequencing : 스케줄링을 담당하는 소프트웨어가 프로그램 실행
- I/O에 의해 CPU가 Idle 상태로 전환되는 문제는 해결 X
현대 OS에서도 해결 못함... But, 멀티프로세싱을 이용함

프린터로 요청을 보내면 프린터가 작업을 완료할 때 까지 Blocked
Spooling Batch System
Spooling - 초기 해결책
CPU Idle 해결을 위한 해결책
-
Simultaneous Peripheral Operation On-Line
-
I/O와 Computation을 동시에 진행할 수 있음
ex) 프린터 Spooling
- 인쇄할 문서를 디스크나 메모리의 버퍼에 로드
- 프린터는 버퍼에서 자신의 처리 속도로 인쇄할 데이터를 가져옴
- 프린터가 인쇄하는 동안 컴퓨터는 다른 작업을 수행할 수 있음
-
Spooling을 통해 사용자는 여러 개의 인쇄 작업을 프린터에 순차적으로 요청할 수 있음
이전 작업의 종료를 기다리지 않고, 버퍼에 인쇄 작업을 로드하여 자신의 인쇄 작업을 요청함

Multiprogramming
2개 이상의 작업을 동시에 실행
- 운영체제는 여러 개의 작업을 메모리에 동시에 유지
- 현재 실행중인 작업이 I/O를 할 경우, 다음 작업을 순차적으로 실행
- 스케줄링 고려사항 - First Come First Served

왼쪽이 Batch 시스템 (Job1이 끝나야, Job2가 실행됨)
오른쪽이 Multiprogramming 시스템
Multiprogramming의 목적
- CPU 활용도(Utilization)증가 == CPU Idle Time 감소
CPU는 빠르고 비싸니깐, 최대한 놀게 하지 말자(최대한 활용하자)
단점
- 사용자는 여전히 실행중인 작업에 대해서는 관여할 수 없음

Issues with Multiprogramming
-
다른 작업으로 넘어가려면 중간에 I/O를 해야만 함.(Voluntary Yield에 의존)
=> 의도적으로 I/O를 안 함
-
공평성을 유지할 필요 발생
누구나 컴퓨터를 오래 많이 쓰고 싶어한다.
(S/W 개발자 입장에서는 의도적으로 I/O를 피해서 계속 CPU를 점유하고 싶음)
-
High Priority로 수행할 필요도 생김
-
Job Scheduling으로는 해결 안됨
Timesharing
CPU의 실행 시간을 타임 슬라이스(Time Slice)로 나누어 실행
모든 프로그램은 타임 슬라이스 동안 CPU를 점유하고, 그 시간이 끝나면 CPU를 양보
여러 개의 작업들이 CPU 스위칭을 통해 동시에 실행됨
CPU 스위칭이 매우 빈번하게 일어남
- 사용자는 실행중인 프로그램에 관여가 가능

Multitasking
여러 개의 Task들이 CPU와 같은 자원을 공유하도록 하는 방법
하나의 작업(Job)은 동시에 실행할 수 있는 Task로 나눠질 수 있음
- ex) Unix의 프로세스는 fork() 시스템 콜을 이용해서 여러 개의 자식 프로세스를 생성할 수 있음
- ex) 안드로이드 애플리케이션은 UI처리 프로세스, 입출력 처리 프로세스, 계산 처리 프로세스 등 다수의 프로세스를 생성할 수 있음
Multitasking은 사용자가 여러 개의 프로그램을 실행할 수 있도록 하며, CPU가 Idle 상태일 때는 Background 작업을 실행 가능하도록 함
Example of DBMS Multitasking
Fork를 이용한 Child Process 생성
- 멀티태스킹 : 여러 프로그램이 동시에 수행 (Concurrent Execution)
- 하나의 태스크가 다른 태스크(Child Process)를 만들 수 있는 기능을 의미함
- 자신이 필요한 기능을 Child Process 형태로 만들어 서로 협력을 통한 작업 수행
Issues with Multitasking System
복잡한 메모리 관리 시스템
- 동시에 여러 개의 프로그램이 메모리에 상주
- 메모리 관리 및 보호 시스템 필요
적절한 응답 시간을 제공
- Job들은 메모리와 디스크로 Swap In/Out될 수 있음
Concurrent Execution 제공
필요에 따라서 Job들 간의 Orderly Execution이 필요
- 동기화, Deadlock

Lineage of Well-known Operating Systems

그 외 시스템
Multiprocessor Systems
- Symmetric VS. Asymmetric Multiprocessors
(Asymmetric => ARM big.Little CPU Architecture)
분산시스템
- LAN/WAN으로 연결
- Client-Server Model, Peer-to-Peer Model
- Bus와의 차이는?
Clustered Systems
- 공동의 목적을 위해 여러 개의 시스템 네트워크를 통해 작업을 수행
Embedded Systems
- 특정 목적을 위한 운영체제 및 소프트웨어가 탑재된 형태의 시스템
- MP3 Player, Smartphone, etc.
Real-Time Systems
- 시스템에서 수행하는 작업의 완료시간(Deadline)이 정해짐
- Soft Real-Time, Hard Real-Time
정리 및 요약
- 컴퓨터는 본래 계산을 위해 개발되었다.
프로그래밍 언어 및 OS라는 개념이 없었던 시절(1950~)에는 매번 프로그램을 재작성하여 사용했었음.
이후, 펀치카드가 발명되고 Batch 시스템이 상용화 되었지만
그럼에도 불구하고
1. 사람이 Job Scheduling을 진행함
2. 이전의 Job이 끝나야지만 다른 Job을 수행할 수 있다는 문제(CPU가 빈번히 Idle됨)가 있다.
1번을 해결하기 위해 사람의 관여 없이, 여러 개의 프로그램을 순차적으로 실행하는 Automatic Job Sequencing을 도입하여 Batch 시스템보다 성능이 향상되었다.
하지만, 여전히 CPU의 Idle문제를 해결하지 못했는데 CPU의 Utilization을 높이기
위해서 Spooling을 도입하였다.
Multiprogramming이란, 2개 이상의 작업을 동시에 실행하는 것을 의미한다.
OS는 여러 개의 작업을 메모리에 동시에 유지하고, 현재 실행중인 작업이 I/O를 할 경우에 다음 작업을 순차적으로 실행한다.
이 역시, CPU Utilization을 높이기 위해서 사용했지만, 여전히 사용자는 실행중인 작업에 대해서는 관여할 수 없었다.
- High Priority로 수행할 필요도 생김
- 다른 Job이 수행되려면 I/O가 필요함.
=> Time sharing 도입.
Multitasking이란, 여러 개의 Task들이 CPU와 같은 자원을 공유하도록 하는 방법.
하나의 Job은 동시에 실행할 수 있는 Task로 나눠질 수 있다.
Multitasking은 사용자가 여러 개의 프로그램을 실행할 수 있도록 하며, CPU가 Idle 상태일 경우에 Background 작업을 실행 가능하도록 한다.