OS의 역사

June Lee·2021년 1월 6일
0

운영체제

목록 보기
2/25

< 오프라인 프로세싱 >

No OS

  • 프로그래머에 의한 수동 프로세싱
  • 메모리 스위치로 input
  • 컴파일러 & 유틸리티는 이후에 추가됨

Batch Processing System

  • One by One 시스템

  • Card Reader: 카드에 구멍을 내는 형식으로 프로그램을 짜고, 이걸 Card Reader에 올림
  • Job: 프로그램의 실행을 담당(CPU와 유사한 역할)
  • Line Printer: 프로그램을 돌린 결과를 프린터로 출력

이때 Card Reader와 Line Printer는 기계적 시스템이고 Job은 전자적 시스템인데,
CPU나 메모리와 같은 전자적 요소가 아무리 빨리도 기계가 이 속도를 따라 잡는 것이 쉽지 않다.
따라서 현재까지도 시스템의 수행속도는 I/O Device의 속도에 따라 결정된다.

Multi-Programming

  • 여러 개의 Job을 이용하여 I/O Device를 써야할 때는 하나의 Job에 이를 배치하고, 다른 Job은 CPU를 쓰는 방식 (CPU / IO Overlap)
  • IC칩(집적 회로, Integrated Circuits)의 사용으로 디바이스의 크기가 매우 작아짐
  • 프로그램을 한 번에 여러 개 돌리기 위한 Memory Segmentation
cf. 스풀링(SPOOLing)과 버퍼링(Buffering)

- 목적
두 방법 모두 CPU의 처리속도와 입출력 장치의 속도 차이를 보완하기 위한 방법이다. 즉, I/O time를 줄이기 위한 방법이다.

- 스풀링
스풀링은 디스크의 일부를 스풀공간이라는 큰 버퍼로 사용하는 것이다.
입력 장치가 수정한 파일을 출력장치가 그것을 받을 수 있을 때까지 일시적으로 저장함으로써,
프린터를 통해서 출력하는 동안에 다른 입력을 읽어들일 수 있으며, 이 시간 동안에도 또 다른 작업이 수행될수 있다. 
즉, 많은 작업의 계산과 입출력을 중복할 수 있다.

- 버퍼링
한 레코드가 읽혀 CPU가 그것에 대해 연산을 시작함과 동시에 입출력 장치는 곧 다음에 필요한 레코드를 미리 읽어서 주기억장치에
저장함으로써 CPU가 필요로하는 레코드를 기다림 없이 전달해 줄 수 있다.
버퍼링은 한 작업의 계산과 입출력만을 중복할 수 있다.

< 온라인 프로세싱 >

Time Sharing System (현재의 Multi-tasking)

PC가 등장하기 이전에는 서버와 온라인 프로세싱으로 상호작용을 했다.
그런데 이때 서버를 많은 사람들이 함께 사용했기 때문에 서버 컴퓨터의 CPU 시간을 나눠서 사용하기 시작했다. 예를 들어, 10초가 걸리는 작업이 있다면 한 컴퓨터에서 작업을 끝낸 후 다음 컴퓨터의 작업이 시작 되는 것이 아니라, 한 대 당 1초씩 CPU를 번갈아가며 사용하여 대기 시간을 줄여준다.

* Time slice : 한 번 CPU를 받아서 쓸 수 있는 시간
* Round Robin Scheduling: 각 태스크에 균등하게 실행권을 부여. '공평성'에 초점을 맞춘 스케쥴링 기법

< PC의 등장 >

멀티 프로세서 시스템 (대칭적 다중처리 시스템, Symmetric Multiprocessor System, SMP)

  • 개별적인 CPU가 빨라지는 것을 넘어서, 여러 개의 CPU를 한 번에 가지는 것
  • 한 컴퓨터 속에 CPU가 16개까지 들어가고, 이들이 밀결합을 하는 것 (메모리를 CPU 16개가 공유)
  • 가장 만들기 쉽고 범용적으로 쓰이는 아키텍쳐
  • 메모리는 하나인데 CPU가 여러 개라 Memory Access 시 충돌이 발생 => 메모리 보틀넥(Memory Bottleneck)
  • 퍼포먼스와 신뢰성이 높다 (CPU가 몇 개 고장나더라도 시스템이 돌아갈 수 있다)
< 메모리 보틀넥(Memory Bottleneck)의 해결 >

메모리 보틀넥을 해결하기 위한 것이 바로 '캐시 메모리'
미리 예측하여 캐시 메모리에 가져다놓고, 이를 가져와서 작업한다.
캐시는 메모리 크기가 작고 SRAM으로 만들어져 속도가 빠르므로 CPU마다 캐시를 주면 충돌이 줄어든다.

< 캐시 메모리에서 주의할 점>

CPU1과 CPU2가 메모리의 같은 내용을 가져와서 캐시에 담아두고, 
CPU1에서 이 캐시에 어떤 내용을 작성한다면 CPU2도 그것을 감지하고 캐시를 수정할 수 있어야 한다.
-> 이때 필요한 것이 'Cache Consistency Protocol'이다.

멀티 프로세서 시스템의 메모리 구조

  1. NUMA(Non-Uniform Memory Access)
    : 메모리를 공유하되, CPU 별로 자기 메모리와 남의 메모리가 나누어져 있다. 어떤 CPU에서 메모리를 쓰든 접근 시간이 동일하다.

  2. UMA(Uniform Memory Access)
    : 하나의 메모리를 모든 CPU가 공유한다. 어떤 CPU에서 메모리를 쓰든 접근 시간이 동일하다.

cf. 분산 시스템
:각각의 CPU가 자신만의 메모리를 갖는다. 다른 CPU가 지닌 메모리에 access하려면 그만큼 시간이 더 소요된다.

분산 시스템(Distributed System)

  • 하나의 컴퓨터가 여러 CPU를 갖는 SMP가 여러 개 모여서 하나의 시스템을 구축하는 것
  • 실제로는 여러 개의 독립적인 컴퓨터의 집합이지만, 사용자가 보기에는 하나의 시스템으로 보인다.

미들웨어

: 서로 물리적으로 떨어져있는 컴퓨터들이 하나의 컴퓨터처럼 동작할 수 있도록 클라이언트/서버 사이에서 교량적인 역할을 하는 소프트웨어 서비스

특징

  1. 리소스 쉐어링
    : 한 컴퓨터의 우수한 기능을 다른 컴퓨터에서 활용 가능하다.
  2. 병렬 컴퓨팅
    : 많은 컴퓨팅 파워를 요구하는 작업을 동시에, 나눠서 수행한다.
  3. 높은 신뢰성
    : 하나의 컴퓨터가 기능을 잘 못해도 작업이 수행될 수 있다.

분산 시스템의 활용

  • 클라우드 시스템
  • 분산 파일 시스템 (Distributd File System)

클라우드

: 클라우드 서비스에서 사용자들에게 제공하는 OS는 Virtual Machine, 즉 CPU를 소프트웨어로 만든 것이지, 실제 CPU는 아니다. 클라우드 서비스에서 이렇게 VM을 만들어서 사용자에게 제공하는 OS를 게스트 OS라고 한다.

그런데, 사용자가 임대한 서버 컴퓨터에 어떤 내용을 저장하려고 한다면, 이때 디스크는 실제 디스크여야 한다. 이를 위해 사용자에게 디스크 일부를 떼어서 주고, 호스트 컴퓨터에서 다수의 OS를 실행하기 위한 논리적 플랫폼 역할을 하는 것이 Hypervisor(혹은 Virtual Machine Manager)이다.

ex.
SaaS(Software as a Service), IaaS(Infrastructure as a Service), 
PaaS(Platform as a Service), DaaS(Desktop as a Service)

도커(Docker)

  • 컨테이너 기반의 오픈소스 가상화 플랫폼
컨테이너(Container)
- 경량급 가상화
- 격리된 공간에서 프로세스가 동작하는 기술
- 프로세스 그룹
  • 다양한 프로그램, 실행환경을 컨테이너로 추상화
  • Host와 Kernel(OS)을 공유
  • 기존의 전가상화(VM)든 반가상화든 추가적인 OS를 설치하여 가상화하는 방법은 성능문제가 있었기 때문에 이를 개선하기 위해 프로세스를 격리 하는 방식으로 동작

임베디드 시스템(Embeded System)

특징

  1. 이동 가능성(Mobility)
  2. 효율적 배터리 관리가 중요
  3. 실시간 시스템(Real-Time Operating System) 사용
    => Safety Critical & Mission Critical (어떤 잘못된 input이 있어도 3초 안에 일을 끝낸다고 정했으면 그 안에는 무조건 끝내도록 해야함)
  4. 비용에 민감
  5. 열악한 환경
  6. NVRAM(Nand Flash Memory) 기반
  7. 빠른 부팅 (즉, 커널이 디스크에서 메모리로 빨리 올라옴)
profile
📝 dev wiki

0개의 댓글