컴퓨터란?
: compute+er 즉, 계산하는 기계라는 뜻. 컴퓨터가 없던 시절에는 사람들을 모아놓고 계산을 시켰음.
- 1941년) Colossus. 2차 세계대전때 영국군이 독일의 암호문을 해독하기 위해 만듦. 전시 기밀이었기 때문에 늦게 공개되었고 이에 따라 ENIAC이 최초의 컴퓨터라는 오해가 생겼음. 사람이 직접 숫자를 이진수로 바꾸고 opcode도 눌러줘야했음.(현재는 컴파일러가 기계어로 바꿔줌) 즉, 사람이 operator였음.
- 1942년) ABC. 진공관을 이용해 간단한 이진법, Boolean 논리 연산을 함. 컴퓨터보다는 계산기에 가깝다는 견해가 있음.
- 1946년) ENIAC. 2차 세계대전때 미사일 탄도 분석을 계산하기 위해 만듦. 매우 무겁고 부피가 컸으나 500 Flop/s 밖에 되지 않았음.
더보기
(Flop/s: 초당 부동 소수점 연산. 높을 수록 과학계산 능력이 뛰어남. 현재 슈퍼컴퓨터는 143.5 PFlop/s)
시대에 따른 컴퓨터의 변화
- 1950년대 초반) 사람이 직접 기계적 스위치를 이용하여 1bit 단위로 컴퓨터에 입력해줘야함. 진공관을 기반으로 하였기 때문에 크기가 매우 컸고 열이 많이 방출되었음.
- 1950년대 중반) 플러그 보드에 와이어링을 통해 컴퓨터를 제어함.(ex) +를 입력하고 싶으면 +라고 쓰인 보드를 꽂음) 프로그램이 기계어로 쓰여짐. 프로그래밍 언어, 운영체제라는 개념이 없었기 때문에 영속적인 저장장치도 없어 매번 프로그램을 다시 입력해야했음.
- 1960년대 초반) 점점 프로그램의 크기가 커지고 복잡한 코드가 쓰이면서 펀치카드가 등장함.
Mainframe 이란?
가장 핵심적인걸 처리하는 중앙집중형 대형 컴퓨터(상업용). 펀치카드와 함께 많이 쓰이던 시스템.
- 전체적으로 네트워크를 설치하기 어려워서 터미널을 이용하여 접속.
- 배치 프로그래밍(batch, 일괄처리) 도입. 시분할(time sharing) 지원
- 1964년 IBM 시스템 360 도입. 선진국에 한대씩 있던 컴퓨터가 중요 기관에 한대씩 생긴것. 좀 더 보편화 되었음.
1. 일괄처리(Batch)
: 상업적으로 쓰이면서 가치있게 됨. 교량 설계 등 계산을 할때 사용됨.
- 펀치카드 제출->메모리에 적재->수행 순서
- 작업이 시작되면 끝날때까지 다른 작업을 할 수 없음. (I/O문제 발생)
- 사람이 직접 펀치카드를 제출함. (job switching 문제 발생)
- I/O 문제)
기계 장치인 I/O는 느리고 전기 장치인 CPU는 빨라서 속도 차이로 인해 CPU가 자주 idle상태가 됨.
[입력---(느림)---> CPU---(느림)---> 출력]
당시 프린터는 메모리가 없어서 한줄씩밖에 출력을 못했음. 따라서 한줄 출력이 완료될때까지 CPU는 데이터를 보내지 않고 쉬고 있는것.
→Spooling으로 해결. 이전 작업의 종료를 기다리지않고 디스크 또는 메모리 버퍼에 작업을 로드함.
앞의 작업이 뒤의 작업에 영향을 끼치지 않는 printf, write등의 Asynchronous 작업에는 적합함.
BUT read, fgetc 등 Synchronous 작업에는 적합하지 않음. - Job switching)
사람이 펀치카드를 넣는 동안 컴퓨터는 놀고 있음.
→Automatic job sequencing으로 해결. 사람이 직접 스케줄링하는 일괄처리와는 다르게 스케줄링을 담당하는 SW 에서 프로그램을 실행함. 작업이 종료되면 바로 다음 작업을 실행하므로 일괄처리보다 성능이 좋음.
BUT 멀티 프로그래밍이 등장하기 전까지는 메모리에 하나의 프로그램만 올 수 있었으므로 실현이 거의 불가능했 음.더보기Multiprogramming
: 예전에는 메모리가 작아서 못했음.
메모리에 여러개의 작업을 두고 실행중인 작업이 I/O를 하면 순차적으로 다음 작업 실행.
Batch는 작업이 끝나면 원상복귀시키고 다음 작업을 불러와야했으나 Multiprogramming은 다음 작업도 같은 메모리에 있으므로 바로 실행할 수 있음.(Spooling 필요X)
CPU 활용률이 극대화됨.
BUT 실행중인 작업이 I/O를 해야 다음 작업이 실행되므로 voluntary yield(자발적 양보)에 의존해야함.
예를 들어 4번 작업을 급하게 해야하는데 1번 작업이 양보해주지 않으면 4번 작업을 못함.
따라서 우선순위로 수행할 필요가 생김. OS가 어떤 작업에게 얼만큼 CPU를 줄지 고민해야함.(공평성 부족)
2. Timesharing
: 현재 사용되고 있는 OS의 기법. 자발적 양보에 의지하지 않기위해 CPU의 제어권을 OS에게 넘겨줌.
CPU의 실행 시간을 타임 슬라이스로 나누어 실행.
- ex) OS가 1초씩만 쓰도록 스케줄링하면 모든 프로그램들은 1초동안 CPU를 점유하고 1초가 끝나면 CPU를 양보함.
- 번갈아서 실행하고 있지만 매우 짧은 간격으로 프로그램이 바뀌므로 동시에 작업중인것처럼 보임.
- 기법의 핵심은 timer과 interrupt.
메인보드에 타이머를 달고 컴퓨터가 켜질때 10ms마다 CPU에게 신호를 보내라고 설정.(tic)
CPU 입장에서는 작업을 수행하지 못하도록 방해하는 것이므로 interrupt라고 함.(OS가 CPU의 제어권을 가져옴) - 장점) 사용자(OS)가 프로그램에 관여하므로 정확한 스케줄링 가능. / 작업을 공정하게 하므로 공평성이 높아짐 / 동시성이 높아짐
- 단점 1) (컴퓨터의 관점) 작업 도중 다음 작업을 시작하려면 레지스터와 캐시에서 이전 작업과 관련된 내용을 다 비우고 다음 작업을 로드해야하므로 성능이 저하됨. (context switching) context를 비우는데 발생하는 비용(오버헤드)이 꽤 큼.
- 단점 2) (프로그램의 관점) 먼저 실행된 프로그램이 사용자의 입력을 기다리느라 CPU를 못쓰는 상황이 되면 CPU는 다음 작업을 하러감. 그 사이에 사용자가 입력을 하여 CPU가 다시 이전의 작업을 해야하는 상황인데 돌아오지 않음. 먼저 실행된 프로그램은 기다리지 않아도 되는 시간을 기다린것이므로 성능 저하로 볼 수 있음.
3. Multitasking
: Timesharing + Multiprogramming. 여러 task들이 CPU와 같은 자원을 공유. Timesharing도 Multitasking의 한 형태.
복잡한 프로그램의 설계가 가능함.
- 아주 세밀한 단위의 CPU 스케줄링이 필요함.
- 직업들간의 질서있는 실행이 필요함. ex)동기화, deadlock
- 메모리에 여러개의 프로그램이 들어가있으므로 메모리 관리 및 보호 시스템이 필요함.
ex) 1번 작업이 2번 작업의 중요한 내용을 빼갈 수 있음. - 적절한 응답 시간을 제공해야함.
'나도 공부한다 > 운영체제' 카테고리의 다른 글
05. CPU scheduling (0) | 2021.05.31 |
---|---|
04. CPU (0) | 2021.05.31 |
03. 운영체제의 구조와 설계 (0) | 2021.03.29 |
02. 컴퓨터 시스템 (0) | 2021.03.18 |
01. 운영체제의 종류와 기능 (0) | 2021.03.04 |