소개
운영체제 (OS, Operating System)
-
일반 컴퓨터, 스마트폰의 전원을 켜면 가장 먼저 만나게 되는 소프트웨어
ex) PC 운영체제 (Window, Mac OS, UNIX, LINUX 등), 모바일 운영체제 (iOS, Android 등)
-
임베디드 운영체제 : CPU의 성능이 낮고 메모리 크기도 작은 시스템에 내장하도록 만든 OS
ex) 스마트 시계, 스마트 TV
정의
- 응용 프로그램이나 사용자에게 컴퓨터 자원을 사용할 수 있는 인터페이스를 제공하고 그 결과를 돌려주는 시스템 소프트웨어
- 응용 프로그램이나 사용자에게 모든 컴퓨터 자원을 숨기고 정해진 방법으로만 컴퓨터 자원을 사용할 수 있도록 제한
역할
-
자원 관리
- 자원을 요청한 프로그램이 여러 개라면 적당한 순서로 자원을 배분
ex) 돌아가는 프로그램 메모리 적절히 분배, CPU가 쉬지 않도록 여러 프로그램 돌림
-
자원 보호
- 비정상적인 작업으로부터 컴퓨터 자원 보호
ex) 커널 같은 운영체제의 중요한 영역에 사용자가 함부로 접근하지 못하게 함
-
하드웨어 인터페이스 제공
- 사용자가 복잡한 과정 없이 다양한 장치를 사용할 수 있도록 함 (일관된 방법으로 사용할 수 있도록 지원)
-
사용자 인터페이스 제공
- 사용자가 운영체제를 편리하게 사용하도록 지원
ex) GUI
목표
-
효율성
- 자원 효율적 관리
- 같은 자원으로 더 많은 작업량 처리, 같은 작업량으로 적은 자원 사용
-
안정성
- 작업 안정적 처리
- 사용자와 응용 프로그램의 안전 문제, 하드웨어적인 보안 문제 처리
- 시스템에 문제가 발생시 이전으로 복구하는 fault-tolerance 기능
-
확장성
- 다양한 시스템 자원을 컴퓨터에 추가, 제거를 편리하게 하는 것
- 새로운 기능의 효과적인 개발을 허용
-
편리성
역사
발달 순서
일괄처리(batch processing) -> 다중 프로그래밍(multi programming) -> 온라인 (online processing) -> 시분할 처리(time-sharing processing) -> 실시간 처리 (real time processing) -> 다중 모드처리(multi mode processing) -> 분산 처리(distributed processing) -> 병렬 처리(parallel processing)
초창기 컴퓨터 (1940)
에니악
- 진공관 소자 사용, 켜지면 1, 꺼지면 0
- 전선 연결 '하드와이어링' 방식 -> 여러 프로그램 동시에 돌리기 힘듦
- 운영체제가 없음
일괄 작업(처리) 시스템 (1950)
천공카드 시스템
- 입력장치 : 천공카드, 출력장치 : 라인 프린터
- 프로그램 구성 후 카드에 구멍 뚫어 입력하면 프로그램 실행
- 프로그램이 10줄이면 천공카드 10장 필요. 이때, 10장 말고도 맨 앞에 제어카드가 한 장 더 붙음
제어카드 : 내가 뒤에 요청하는 일들이 무엇인지 알려주는 기능을 하는 control 카드
일괄 처리 시스템
-
작업 준비 시간을 줄이기 위해 요구 사항이 비슷한 여러 개의 작업을 모아 한꺼번에 처리
-
모든 작업을 한꺼번에 처리하고 프로그램 실행 중간에 사용자가 데이터를 입력하거나 수정하는 것 불가능한 시스템 (= 중간에 사용자 인터렉션 없이 컴퓨터가 한번에 실행)
-
상주 모니터 (Resident Monitor) : 자동 작업 순서에서 하나의 작업에서 다른 작업으로의 진행을 자동으로 제어하는 프로그램으로 운영체제의 시초
즉, 메모리 중 시작하는 부분 일부를 프로그램을 제어하는 용도로 프로그램을 짜놓음 (메모리 안에 계속 상주)
결과까지 며칠씩 기다려야 하고, 오류가 나면 결과도 주지 않는 천공카드의 불편함 존재
👇🏻 새로운 시스템 등장! 👇🏻
대화형 시스템 (1960)
- 모니터와 키보드 등장
- 온라인 시스템 (모니터, 키보드가 컴퓨터 메인프레임에 직접 연결)
- 다양한 종류의 응용 프로그램 만들 수 있게됨
- 60년대 초반에 소개되었으나 기술의 보편화가 더뎌 우리나라에서는 80년대에 보편화됨
다중 프로그래밍 시스템 (1960)
- CPU가 항상 수행할 작업을 가지도록 하여 프로세서 이용률을 극대화
- 여러 개의 프로그램을 동시에 기억 장치에 적재시켜 한 프로그램이 입출력 작업을 하는 동안, CPU가 다른 프로그램을 수행할 수 있게 함으로써 CPU의 유휴 시간(idle time) 최소화 하고 처리량을 극대화
- 기억 장치 관리 기법 (몇 개 프로그램까지 적재할 건지?) , CPU 스케줄링 기법 (CPU를 어떤 순서로 사용하게 할 건지?) 필요
- 어떤 하나의 프로그램의 실행 성능을 향상시키지는 못하나 전반적인 시스템 성능은 향상
EX) A라는 프로그램 실행
메인 메모리에 A라는 프로그램이 적재되어 있어야 함.
CPU가 한 줄씩 읽어다가 실행을 하는데, 프로그램을 하나만 적재해놓고 실행하다 보니 프로그램을 실행하다가 입출력이 있을 시,
IO가 끝나기를 기다리면서 CPU가 유휴 상태가 됨
👇 다른 프로그램들도 적재하자! 👇
A가 IO를 하는 동안 B는 CPU를 사용함으로써 CPU의 유휴 상태를 최소화!
시분할 시스템 (1960)
- CPU 사용 시간을 잘게 쪼개 작업들에 나누어줘 모든 작업이 동시에 처리 되는 것처럼 보임
- 타임 슬라이스 (타임 퀀텀) : 잘게 나뉜 시간 한 조각
- 목적 : 응답 시간 최소화, 각 사용자들이 자신이 컴퓨터 시스템을 독점한 것처럼 느끼게 만드는 것
- 오늘날의 컴퓨터에 대부분 사용됨
A 작업 완료 후 B작업, B작업 완료 후 C 작업을 진행할 경우, C는 자신이 응답 받는 시간이 굉장히 느리다고 생각할 것
BUT, 시분할 시스템은 A -> B -> C -> A -> B -> C -> ... 형태로 처리되므로
모든 사용자들이 반응시간이 빠르다고 느끼게 될 것
실시간 시스템 (1960)
-
처리를 요구하는 자료가 발생할 때마다 즉시 처리
-
특수 목적 (은행, 공장, 기차와 비행기의 좌석 예약 등), 멀티미디어 로봇 제어, 가상 현실 등의 제어 장치로 사용
-
특징
- 자료가 발생한 지점에서 바로 입출력
- 효율적인 자원 사용보다 신속한 응답이 중요
- 무작위 자료 도착으로 인해 자료의 일시 저장과 대기 필요
- 특정 상태의 재현 불가
- 재실행 불가
분산 시스템 (1970 후반)
- PC와 인터넷 보급
- 네트워크상에 분산되어 있는 여러 컴퓨터로 작업을 처리, 그 결과를 상호 교환하도록 구성
클라이언트/서버 시스템 (1990 ~ 현재)
- 이중구조 : 작업을 요청하는 클라이언트와 거기에 응답하여 요청 받은 작업을 처리하는 서버
P2P 시스템 (2000 초반 ~ 현재)
- 클라이언트/서버 구조의 단점인 서버 과부화 해결
- 서버를 거치지 않고 사용자와 사용자 직접 연결
- ex) 냅스터, 메신저, 토렌트 등
- 메신저 프로그램에 도입되면서 큰 발전
기타 컴퓨팅 환경 (2000 초반 ~ 현재)
그리드 컴퓨팅
- 필요한 기간만큼만 컴퓨터 사용 후 사용한 금액만큼만 돈 지불
- 클라우드의 하드웨어 버전이라고 생각하면 쉬움
클라우드 컴퓨팅
-
그리드 컴퓨팅과 SaaS를 합쳐 놓은 형태
-
언제 어디서나 응용 프로그램과 데이터를 자유롭게 사용할 수 있는 컴퓨팅 환경
-
IaaS (Infrastructure as a Service)
: 제일 많이 사용되고 있는 클라우드 컴퓨팅 형태, 개발사에 제공되는 물리적 자원을 가상화
-
PaaS (Platform as a Service)
: 개발사에 제공되는 플랫폼을 가상화
-
SaaS (Software as a Service)
: 고객에게 제공되는 소프트웨어를 가상화
사물 인터넷 (IOT)
- 사물에 센서와 통신 기능을 내장하여 인터넷에 연결하는 기술