운영체제 01 운영체제와 컴퓨터
1. 운영체제 소개
1.1. 일상생활 속의 운영체제
1.2. 운영체제의 필요성
1.3. 운영체제의 정의
1.4. 운영체제의 역할
1.5. 운영체제의 목표
2. 운영체제의 역사
2.1. 개요
2.2. 초창기 컴퓨터(1940년대)
2.3. 일괄 작업 시스템(1950년대)
2.4. 대화형 시스템(1960년대 초반)
2.5. 시분할 시스템(1960년대 후반)
2.6. 분산 시스템(1970년대 후반)
2.7. 클라이언트/서버 시스템(1990년대~현재)
2.8. P2P 시스템(2000년대 초반~현재)
2.9. 키타 컴퓨팅 환경(2000년대 초반~현재)
3. 운영체제의 구조
3.1. 커널과 인터페이스
3.2. 시스템 호출과 디바이스 드라이버
3.3. 커널의 구성
3.4. 가상머신
4. [심화학습] 운영체제의 종류와 역사
4.1. 유닉스와 리눅스
4.2. 매킨토시와 스티브 잡스
4.3. 윈도우 운영체제
4.4. 모바일 운영체제
1. 운영체제 소개
1.1. 일상생활 속의 운영체제
운영 체제(OS; Operating System) : 일반 컴퓨터나 노트북의 전원을 켜면 가장 먼저 만나게 되는 소프트웨어
운영 체제의 예시 : 윈도우즈, Mac, 유닉스(Unix), 리눅스(Linux), iOS, 안드로이드(Android)
임베디드 운영체제(Embedded OS 또는 Embedded System)
MP3, 내비게이션, 전자사전처럼 CPU의 성능이 낮고 메모리 크기도 작은 시스템에 내장하도록 만든 OS
1.2. 운영체제의 필요성
1.3. 운영체제의 정의
운영체제(OS : Operating System)
ㆍ 응용 프로그램이나 사용자에게 컴퓨터 자원을 쓸 수 있는 인터페이스를 제공하고 결과를 돌려주는 시스템 소프트웨어
ㆍ 응용 프로그램이나 사용자에게 모든 컴퓨터 자원을 숨기고 정해진 방법으로만 자원을 사용하게 제한하는 역할
1.4. 운영체제의 역할
자원 관리
컴퓨터 시스템의 자원을 응용 프로그램에 나누어 사용자가 원활하게 작업할 수 있게 함
자원을 요청한 프로그램이 많다면, 우선순위를 정하고 적절한 시점에 자원을 회수하여 다른 응용 프로그램에 나누어 줌
자원 보호
비정상적인 작업으로부터 컴퓨터 자원을 보호
하드웨어 인터페이스 제공
사용자가 복잡한 과정 없이 다양한 장치를 사용할 수 있게 해주는 기능
CPU, 메모리, 키보드와 같은 다양한 하드웨어를 일관되게 사용할 수 있게 지원
사용자 인터페이스 제공
사용자가 OS를 편리하게 사용하도록 지원하는 제공(GUI; Graphic User Interface, 그래픽 사용자 인터페이스)
1.5. 운영체제의 목표
효율성
자원을 효율적으로 관리하는 것
같은 자원을 사용하는데 더 많은 작업을 처리하거나, 같은 작업을 처리하는데 더 적은 자원을 사용하는 것
안정성
작업을 안정적으로 처리하는 것
사용자와 응용 프로그램의 안전 문제와 하드웨어적인 보안 문제 처리
시스템에 문제가 발생했을 때 이전으로 복구하는 결함 포용 기능 수행
확장성
다양한 시스템 자원을 컴퓨터에 추가하거나 제거하기 편리한 것
편리성
사용자가 편리하게 작업할 수 있는 환경을 제공하는 것
2. 운영체제의 역사
2.1. 개요
2.2. 초창기 컴퓨터(1940년대)
최초의 컴퓨터는 에니악(ENIAC)이다. 존 모클리(John Mauchly)와 존 에커트(John Eckert)가 만들었다.
백열전구 모양의 진공관을 사용해 켜지면 1 꺼지면 0이라고 판단했는데, 오늘날 컴퓨터가 2진법을 쓰는 계기이다.
이때는 주변 장치가 없어 18,000개의 진공관을 전선으로 연결하는 방식을 사용했는데, 오늘날의 프로그램이다.
└ 하드 와이어링(Hard Wiring) 방식 : 전선을 연결하여 논리 회로를 구성하는 것
2.3. 일괄 작업 시스템(1950년대)
진공관을 전선으로 연결했던 기술을 발전시켜 IC(Integrated Circuit) 칩을 만들었다.
이때 미약하게나마 CPU와 메인 메모리가 있었지만, 입출력장치가 없어 천공카드 리더와 라인 프린터를 사용했다.
천공카드 리더(Punch Card Reader)
이 당시에 입력장치의 역할을 하던 기기이다. 종이에 구멍을 뚫어 문자를 입력하고 저장했다.
라인 프린터(Line Printer)
이 당시에 출력장치의 역할을 하던 기기이다. 한 번에 한 줄씩 문자만 출력하는 프린터이다.
한 번에 한 작업만 가능하고, 작업에 필요한 프로그램과 데이터를 동시에 입력해야만 작업이 가능하다.
또한, 프로그램의 실행 중에 데이터를 수정하는 것이 불가능하다.
이런 시스템을 '일괄 작업 시스템(Batch Job System)' 또는 '일괄 처리 시스템(Batch Processing System)'이라고 한다.
2.4. 대화형 시스템(1960년대 초반)
키보드와 모니터가 등장했다. 이로써 작업 중간에 값을 수정하거나 확인하는 것이 가능해졌다.
중간값을 확인함으로써 오류가 있는지 있다면 어느 위치에 있는지 확인할 수 있게 되었다.
이런 시스템을 '대화형 시스템(Interactive System)'이라고 한다.
CPU 집중 작업(CPU Bound Job)
일괄 작업 시스템에서 프로그램이 실행되는 중에는 입출력이 불가능하고 오롯이 CPU만 작업을 한다.(Ex. 수학 계산)
이를 CPU 집중 작업 또는 CPU 편향 작업 또는 컴퓨터 집중 작업이라고 한다.
입출력 집중 작업(I/O Bound Job)
대화형 시스템에서는 프로그램이 실행되는 중에 입출력이 가능하다.(Ex. 동영상 플레이어, 데이터베이스)
이를 입출력 집중 작업 또는 입출력 편향작업이라고 한다.
2.5. 시분할 시스템(1960년대 후반)
다중 프로그래밍(Multiprogramming)
하나의 CPU로 여러 작업을 동시에 실행하는 기술
시분할 시스템(Tims Sharing System)
다중 프로그래밍의 핵심 기술로 여러 작업을 조금씩 처리하여 마치 동시에 작업하는 것처럼 보이게 하는 기술
└ 이런 짧은 시간을 '타임 슬라이스(Time Slice)' 또는 '타임 퀀텀(Time Quantum)'이라고 한다.
└ 동시에 실행되는 작업의 개수를 '멀티프로그래밍 수준(정도)(Level(Degree) of Multiprogramming)'라고 한다.
실시간 시스템(Real-Time System)
특정 시스템에서 일정 시간 안에 작업이 처리되도록 보장하는 시스템
경성 실시간 시스템(Hard Real-Time System)과 연성 실시간 시스템(Soft Real-Time System)으로 나뉜다.
└ 경성 실시간 시스템 : 지정한 응답 시간을 정확히 지키는 시스템(Ex. 원자로 온도제어, 미사일 요격)
└ 연성 실시간 시스템 : 지정한 응답 시간을 최대한 지키지만 허용(융통성)이 있는 시스템(Ex. 동영상 재생기)
다중 사용자 시스템(Multi-User System)
하나의 컴퓨터에서 여러 사용자가 작업할 수 있도록 하는 시스템
2.6. 분산 시스템(1970년대 후반)
1977년 스티브 잡스(Steve Jobs)가 최초의 개인용 컴퓨터인 애플 II
를 발표함으로써 컴퓨터와 인터넷이 보급되었다.컴퓨터가 많아지자, 네트워크 상에 분산되어 있는 여러 컴퓨터를 하나로 묶어 작업을 처리하고 결과를 상호 교환한다.
이러한 시스템을 '분산 시스템(Distributed System)'이라고 한다.
2.7. 클라이언트/서버 시스템(1990년대~현재)
분산 시스템에서는 모든 컴퓨터가 동등한 지위를 가진다. 그렇기에 고장이나 기기가 추가됨에 따라 어려움이 많다.
이에 작업을 요청하여 따로 처리해주는 서버라는 개념을 세웠다.
서버도 하나의 컴퓨터이기에 많은 요청이 동시에 들어오면 과부하가 걸려 심하면 다운이 되기도 한다.
이를 방지하기 위해 멈추지 않고 계속 작동하는 프로그램을 '데몬(Daemon)'이라고 한다.
보통 데몬을 가진 컴퓨터를 서버라고 부른다.
2.8. P2P 시스템(2000년대 초반~현재)
클라이언트/서버 구조의 과부하를 해결하기 위해 고안한 개념이다.
서버를 거치지 않고 사용자와 사용자를 직접 연결하는 P2P(Peer-to-Peer System)이다.
이때 Peer는 말단 노드로서, 사용자의 컴퓨터를 의미한다.
2.9. 기타 컴퓨팅 환경(2000년대 초반~현재)
그리드 컴퓨팅(Grid Computing)
분산 시스템의 한 분야로, 서로 다른 기종의 컴퓨터를 묶어 대용량의 컴퓨터 풀(Computer Pool)을 구성한다.
이를 원격지와 연결하여 대용량 연산을 수행하는 컴퓨팅 환경이다.
// 그리드가 하드웨어적 성격이라면, Saas(Software as a Service)는 소프트웨어 기능이다.
// SaaS는 인터넷을 통해 필요한 서비스만 제공받으며 서비스를 이용한만큼 값을 지불한다.
클라우드 컴퓨팅(Cloud Computing)
언제 어디서나 응용 프로그램과 데이터를 자유롭게 사용할 수 있는 컴퓨팅 환경
그리드 컴퓨팅과 SaaS를 합쳐놓은 컴퓨팅 환경이다.
사물 인터넷(IoT; Internet of Thing)
사물에 센서와 통신 기능을 내장하여 인터넷에 연결하는 기술
(Ex. 빅데이터, 머신러닝, 클라우딩 등의 다양한 분야에서 활용과 바탕)
3. 운영체제의 구조
3.1. 커널과 인터페이스
커널(Kernel)
프로세스 관리, 메모리 관리와 같은 OS의 핵심적인 기능을 모아놓은 공간
인터페이스(Interface)
커널에 사용자의 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할
// 그래픽을 사용한 UI는 GUI(Graphic User Interface)라고 한다.
3.2. 시스템 호출과 디바이스 드라이버
시스템 호출(System Call)
인터페이스의 한 종류, 커널의 사용자 접근이나 시스템 자원을 보호하기 위해 만든 인터페이스
시스템 자원에 직접 접근을 할 수도 있지만, 시스템 호출이라는 인터페이스를 사용하는 것에 차이가 존재한다.
직접 접근은 말 그대로 사용자가 직접 컴퓨터 자원에 접근한다.
빠른 작업이 가능할지 몰라도 여러 사용자가 동시에 접근하거나 오류가 발생하면 치명적인 문제가 발생한다.
시스템 호출을 통한 접근은 인터페이스를 통해 접근을 하니 접근성이 떨어질지 몰라도 자원 관리면에서는 수월하다.
오류 발생 측면과 자원 관리 측면에서 시스템 호출이라는 인터페이스를 사용해야만 한다.
드라이버(Driver)
응용 프로그램과 커널의 인터페이스가 시스템 호출이라면, 커널과 하드웨어의 인터페이스가 드라이버다.
디바이스 드라이버라고도 하며, 커널의 명령을 하드웨어에게 주기 위해 변환하는 장치이다.
3.3. 커널의 구성
위의 표는 커널이 하는 역할이다. 이런 역할을 어떻게 구현하는 가에 따라서 커널의 종류가 나뉜다.
단일형 구조(Monolithic Architecture)
커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성된다. main() 함수 하나만 있는 코드같은 느낌
장점 : 모듈 간 통신 비용이 줄어든다.
단점 : 버그를 처리하기 힘들다, 상호 의존성이 높아 결함이 시스템 전체로 확산될 수 있다, 다양한 환경에 적용하기 어렵다.
계층형 구조(Layered Architecture)
비슷한 기능을 가진 모듈을 묶어서 하나의 계층을 만들고 계층 간 통신을 통해 OS를 구현하는 방식, 오늘날의 방식이다.
장점 : 단일형 구조보다 오류를 해결하기 쉽다(오류가 난 계층만 해결하면 된다).
단점 : 상하관계가 생겨 한 계층이 문제가 생기면 상위ㆍ하위 계층도 문제가 생긴다.
마이크로 구조(Micro Architecture)
커널에서 프로세스, 메모리, 통신 관리와 같은 최소한의 기능만 제공하고 나머지는 전부 사용자 영역에 구현하는 구조
장점 : 세세하게 모듈의 역할을 나눠 이식성이 높다, 각 모듈이 독립적으로 작동해 에러 대처에 유연해진다.
단점 : 잦은 통신(모듈 간 정보 교환)이 발생한다.
3.4. 가상 머신(Virtual Machine)
운영 체제와 응용 프로그램 사이에서 작동하는 프로그램
운영 체제 위에 가상 머신을 만들고, 그 위에서 응용 프로그램이 동작하게 만든다.
가상 머신을 활용함으로써 응용 프로그램을 동일한 환경에서 작동하는 것처럼 만들 수 있다.