## 목차 ##



## 1. 운영체제 소개 ##



(1) 일상생활 속의 운영체제

흔히 OS(Operating System)이라고 일컫는 운영체제는 컴퓨터를 켜면 가장 먼저 실행되는 소프트웨어다. Windows, Mac, Android, Linux 등이 대표적이다. 일반 컴퓨터뿐만 아니라 스마트폰, IoT, 임베디드 시스템 등에도 OS가 들어간다.

운영체제가 없이 만들어졌던 초기 MP3나 유선전화기 등은 만들어진 목적 이외의 기능을 수행할 수 없었다.

그러나 요새 스마트폰을 보면 운영체제(안드로이드, iOS 등)이 들어가고 운영체제에서 실행할 수 있는 애플리케이션을 설치하면 여러가지 기능을 추가, 확장하여 하나의 컴퓨터와 같이 사용할 수 있다.



(2) 운영체제의 필요성

  • 운영체제가 없다면?

    • 작동은 한다.
    • 최초의 컴퓨터인 에니악 역시 운영체제가 없었다.
  • 운영체제가 있고 없고의 차이는?

    • OS가 없으면 초기 설계한 기능만 사용가능하다.
    • OS가 있으면 기능의 추가 및 확장, 성능의 향상이 가능하다.(프로그래밍 가능하다.)
    • ex) 유선전화기는 초기 설계된 전화기능만, 스마트폰은 OS에 설치할 수 있는 앱을 설치하여 기능을 확장 가능하다.
  • 자원관리(resource management)

    • 자원(컴퓨터에 부착된 장치 - CPU, 메모리, 모니터, 키보드, 마우스, 디스크, 네트워크 카드, 사운드 카드 등)은 돌아가는 응용 프로그램에 비해 그 수가 매우 제한적이다.
    • 어느 시점에 누가 특정 자원을 사용할지를 결정하고 중재해주는 역할을 하는것이 OS다.
  • OS는 어떻게 자원을 관리하는가?

    • 응용 프로그램 혹은 사용자가 직접 자원에 접근하는 것을 막음으로써 자원을 보호하고 관리한다.
    • ex) 메모리에 데이터를 저장하려는 경우 응용 프로그램이 OS에 요청하면 OS가 이를 받아들이고 저장한다.
    • 사용자에게 자원을 이용할 수 있는 여러 수단(인터페이스)을 제공하여 자원을 보호하고 사용자의 편의를 제공한다.



(3) 운영체제의 정의

OS는 컴퓨터 하드웨어를 직접적으로 제어하고 여러 응용프로그램이 이들을 사용하는 것을 중재하는 '통치자'이며 사용자가 운영체제를 쉽게 사용할 수 있는 인터페이스를 제공하는 소프트웨어(software)이다.

computer_system_architecture



(4) 운영체제의 역할

  • 자원관리

    • OS 위에서 실행되는 여러 응용프로그램들이 자원(CPU, 메모리등의 장치)을 사용하려 할 때 사용순서에 따라 자원을 배분하고 사용이 끝나면 다시 이를 회수한다.
  • 자원 보호

    • 응용프로그램의 자원 직접 접근을 막음으로써 자원을 보호한다.
    • OS가 없고 프로그램이 자원에 직접 접근할 수 있다면 해커가 메모리의 데이터를 날리거나 악성코드를 심는것이 가능해진다.
  • 하드웨어(hardware) 인터페이스 제공

    • 하드웨어의 제조사, 종류에 관계없이 일관된 사용이 가능하도록 해주는 인터페이스를 제공한다.
    • ex) 키보드가 다르다고 조작방법이 달라지지 않는다.
  • 드라이버(Driver)란?

    • 컴퓨터에 연결된 장치를 제어하는 프로그램 혹은 소프트웨어
    • ex) 디지털 카메라를 컴퓨터에 연결하면 컴퓨터가 디지털 카메라에 접근하기 위한 드라이버가 필요하다.
    • 드라이버는 장치 제조사에서 운영체제별로 만든다.

hardware_driver

  • 사용자 인터페이스 제공
    • 사용자가 쉽게 컴퓨터를 활용할 수 있게 해주는 유틸리티
    • 그래픽 사용자 인터페이스(GUI)가 대표적이다. Windows가 제공하는 GUI 덕분에 마우스 클릭등의 직관적인 방법으로 사용자가 쉽게 컴퓨터를 사용할 수 있다.



(5) 운영체제의 목표

운영체제의 역할별로 지향하는 목표가 있다.

  • 효율성

    • 자원을 효율적으로 관리함으로써 이를 달성한다.
    • 적절한 자원분배 및 모니터링을 통하여 더 빨리 더 많은 작업을 처리할 수 있도록 지원한다.
  • 안정성

    • 자원을 보호하는 역할과 관계있다.
    • OS의 불안정은 그 위에서 실행되는 모든 프로그램의 불안정을 야기한다.
    • 응용프로그램, 사용자의 자원에 대한 직접 접근을 막음으로써 정보 보안의 역할도 수행한다.
    • 시스템에 문제가 발생하면 이전의 상태로 복구하는 기능(fault-tolerance)도 포함되어야한다.
  • 확장성

    • 하드웨어 인터페이스 제공이라는 역할이 확장성과 관련된다.
    • 새로운 모델의 키보드, 모니터, 그래픽카드 등이 나오더라도 드라이버만 설치하면 운영체제에서 사용할 수 있는 편리성을 제공해야한다.
  • 편리성

    • 사용자 인터페이스를 제공함으로써 편리한 사용을 제공한다.
    • 만약 효율성만 고려했다면 GUI를 지원하지 않고 검은 화면에서 키보드로만 작업하도록 했을 것이다.



## 2. 컴퓨터의 역사 ##

(1) 진공 컴퓨터

18,000개의 진공관을 전선으로 연결한 하드 와이어링 방식을 사용한 컴퓨터이다. 미사일의 탄도를 계산하기 위해 개발되었다.

  • 특징
    • 다른 계산을 위해서는 전선을 다시 연결해야 한다.
    • 메모리, 운영체제가 없다.



(2) 일괄작업 시스템(batch system)

천공카드리더에 구멍을 뚫은 천공카드를 입력으로 넣어주면 라인 프린터(Line Printer)가 이를 출력했다.

punched_card

위 그림은 한 번에 8bit를 처리하는 천공카드이다. 이 카드를 리더기에 넣어주면 한 라인씩 읽어들여 구멍이 뚫린 위치를 감지하고 이를 데이터로 받아들인다.

현재의 프로그래밍 방식과 유사하게 다양한 소프트웨어를 개발할 수 있게 되었다.

실행하고 싶은 프로그램을 천공카드에 구멍을 뚫어 만들고 넣어주면 되었다.

  • 특징
    • 모든 작업을 한꺼번에 일괄적으로 처리하는 배치 시스템(batch system)이다.
    • 프로그램 실행 중간에 데이터 입력이나 수정이 불가능하다.
    • 메모리와 운영체제가 사용되었다.



(3) 대화형 시스템

QWERTY자판 키보드와 브라운관 모니터를 사용한 컴퓨터이다.

  • 특징
    • 실행 중간에 데이터 입력과 중간결과 출력이 가능하여 정상적인 진행 확인이 가능해졌다.



(4) 시분할 시스템

멀티 프로그래밍 기술이 개발되어 하나의 CPU로 여러 작업을 동시에 실행하는 것이 가능해졌다.

time_sharing_system

프로그램 A,B,C가 아주 작은 시간단위로 돌아가면서 처리되면 모든 프로그램이 연속적으로 보일 것이다.

시분할 시스템에서 동시에 실행할 수 있는 프로그램의 수를 멀티프로그래밍 수준(level of multiprogramming)이라 한다. 배치 시스템은 멀티프로그래밍 수준이 1이다.

시분할 시스템이 가능하다는 것은 여러 사용자가 한 컴퓨터를 사용 가능하다는 의미이기도 하다. 이 시기에 UNIX가 개발되었다. UNIX는 멀티프로그래밍을 통해 다중 사용자를 지원하는 운영체제이며 현대 운영체제의 기본 개념을 수립했다.



(5) 분산 시스템

1970년대 후반 최초의 개인용 컴퓨터인 애플2가 발표되고 운영체제 시장이 급속히 성장했다.

이 시기에 개발된 운영체제가 애플의 매킨토시와 마이크로소프트의 MS-DOS이다. 이 시기에 인터넷이 등장하고 이후 TCP/IP 프로토콜이 만들어졌다.

개인용 컴퓨터와 인터넷 덕분에 분산 시스템이라는 컴퓨팅 개념이 등장했다.

복잡한 계산을 위해 메인프레임 고가 컴퓨터를 사용하는 대신 값이 싸고 작은 컴퓨터 여러대를 인터넷으로 묶어 하나의 컴퓨터처럼 동작시키는 방법이 가능해졌고 이것이 분산 시스템(Distributed System)이다.



(6) 클라이언트/서버 시스템

일반 사용자가 사용하는 클라이언트(Client) 컴퓨터와 클라이언트의 요청을 처리하는 서버(Server) 컴퓨터가 나뉘어져 사용되었다.

클라이언트/서버 개념이 적용된 대표적인 사례가 웹(Web)이다. 서버는 컴퓨터가 24시간 가동되어 언제든지 클라이언트의 요청을 처리하고 응답한다. 이를 위해 서버에서는 24시간 작동하는 프로그램이 실행되는데 이를 데몬(daemon)이라고 한다.

데몬을 가진 컴퓨터를 서버라고 하기도 한다. 예를들면 웹 서버에는 웹 데몬이 돌아간다.



(7) P2P 시스템

P2P(Peer To Peer)는 서버를 거치지 않고 사용자와 사용자를 직접 연결하는 시스템이다.

P2P시스템의 서버는 파일 검색만 맡고 파일 교환은 사용자간에 직접 이루어진다. 따라서 서버 부하를 줄일 수 있게 되었다.

P2P 시스템의 대표적인 예로는 2000년대 시행되던 '소리바다'와 같은 MP3 공유 시스템 혹은 메신저가 있다.

메신저에 접속하게 되면 서버에서는 사용자 인증 과정을 거친다. 이후에 채팅과 파일교환은 사용자간에 직접 이루어지게 된다.

서버가 없는 완전 P2P 시스템의 예로는 비트코인과 같은 블록체인 기술이 있다. 블록체인에서는 은행과 같은 중앙집중 서버가 존재하지 않고 모든 사용자 시스템에 거래 내역을 기록한다.



## 3. 운영체제의 구조 ##

(1) 커널과 인터페이스

커널(kernel)은 프로세스(프로그램), 메모리, 기타 I/O 장치들을 관리하는 운영체제의 핵심 기능을 모아놓은 것이다.

인터페이스는 사용자가 커널의 기능을 사용할 수 있도록 제공하는 수단이다.

kernel_interface

OS는 커널과 인터페이스를 분리하여 사용한다. 운영체제의 기능은 커널이 담당하지만 사용자에게 제공하는 방식인 인터페이스가 변경되면 다른 형태로 보이게된다.

예를들어 셸(Shell)을 인터페이스로 제공하면 명령어 기반으로 조작해야해서 어렵게 느껴진다. 그러나 UNIX 계열의 커널을 이용하지만 Mac OS X와 같이 그래픽 기반의 인터페이스를 제공하면 사용자 입장에서 사용하기 쉽다.



(2) 시스템 호출과 디바이스 드라이버

  • 시스템 호출(System Call)

    • 사용자가 커널의 기능을 사용할 수 있도록 운영체제가 제공하는 응용프로그램-커널 사이의 인터페이스
    • 함수 형태로 제공되어 사용자는 자원을 사용하기 위해 시스템이 제공하는 함수를 호출한다.
    • 운영체제가 제공하는 API라고 할 수 있다.
    • 사용자가 자원에 직접 접근하는 것을 막음으로써 자원을 보호한다.
    • 커널 내부의 모습을 감추고 호출을 통하여 사용자가 커널 기능을 쉽게 사용할 수 있도록한다.
    • ex) 메모리에서 데이터를 읽기 위해 read()같은 함수를 호출하면 나머지는 운영체제가 알아서 처리해주어 손쉽게 데이터를 읽을 수 있다.
  • 디바이스 드라이버(Device Driver)

    • 커널이 하드웨어를 인식하고 사용하기 위한 하드웨어-커널 사이의 인터페이스 프로그램
    • 하드웨어 제작자가 작성한다.
    • 키보드, 마우스 같은 단순한 디바이스의 드라이버는 커널이 기본적으로 제공한다.



(3) 커널의 구조

  • 단일형 커널(monolithic kernel)

    • 초창기의 운영체제 커널 구조
    • 커널의 모듈들이 구분없이 하나로 구성(main함수에 모든 기능을 때려박은 형태)
    • 분리가 되지않아 모듈간 통신 비용이 없어 효율적인 운영이 가능하다.
    • 모듈간의 의존성이 커 오류나 버그를 잡기 어렵다.
    • 코드 수정이 어려워 여러 종류의 컴퓨터에 이식하기 어렵다.
  • 계층형 커널(layered kernel)

    • 현대 운영체제 대부분이 사용하는 커널 구조
    • 비슷한 기능을 가진 모듈을 묶어 하나의 계층으로 만든다.
    • 계층간의 통신을 통해 운영체제를 구현한다.
    • 계층간 의존성 분리로 버그나 오류를 잡기 쉽다.
  • 마이크로 커널(micro kernel)

    • 프로세스 관리, 메모리 관리, 프로세스간 통신 관리의 기본적인 부분만 제공
    • 나머지는 사용자 영역에서 응용 프로그램으로 구현하여 처리한다.
    • iOS와 애플의 OS X가 이 커널을 사용한다.

micro_kernel

+ Recent posts