본문 바로가기
우테코 자유테크 스터디/쉽게 배우는 운영체제

[OS] Ch.1 운영체제의 개요

by ♡˖GYURI˖♡ 2024. 2. 2.

1. 운영체제 소개

일상생활 속의 운영체제

OS(Operating System)

  • 일반 컴퓨터나 노트북의 전원을 켜면 가장 먼저 만나게 되는 소프트웨어
  • 개인용 컴퓨터 : 윈도우, Mac Os, 유닉스, 리눅스 등
  • 모바일 운영체제 : iOS, 안드로이드

 

임베디드 운영체제(Embeded Operating System)

  • 임베디드 시스템(Embeded System)이라고도 함
  • CPU의 성능이 낮고 메모리 크기도 작은 시스템에 내장하도록 만든 운영체제
  • 일반 운영체제에 비해 몇 가지 기능이 빠져 있음
  • Mp3 플레이어, 내비게이션, PMP, 전자사전, 스마트 시계, 스마트 TV 등

 

운영체제의 필요성

컴퓨터는 운영체제가 없어도 작동하는가?

  • 컴퓨터는 운영체제가 없어도 작동하지만 기능에 제약이 따름

운영체제가 있는 기계와 없는 기계는 어떤 차이가 있는가?

  • 운영체제가 없는 기계는 만들 당시에 구현한 기능 외에 다른 기능을 추가하거나 성능을 향상할 수 없기 때문에 처음 설계한 대로만 사용할 수 있음
  • 운영체제가 있는 기계는 새로운 기능의 추가나 성능의 변경이 가능하므로 성능 및 효율성의 향상을 꾀할 수 있음 ( = programmable 기계)

운영체제는 성능을 향상하는 데에만 필요한가?

  • 운영체제는 컴퓨터의 성능을 향상할 뿐 아니라 자원을 관리하고 사용자에게 편리한 인터페이스 환경을 제공함

운영체제는 자원을 어떻게 관리하는가?

  • 운영체제는 사용자가 직접 자원에 접근하는 것을 막음으로써 컴퓨터 자원을 보호함

사용자는 숨어 있는 자원을 어떻게 이용할 수 있는가?

  • 운영체제가 제공하는 사용자 인터페이스와 하드웨어 인터페이스를 이용하여 자원에 접근함

 

운영체제의 정의

 

운영체제의 역할과 목표

운영체제의 역할 운영체제의 목표
자원관리 효율성
자원보호 안정성
하드웨어 인터페이스 제공 확장성
사용자 인터페이스 제공 편리성

 

 

2. 운영체제의 역사

구분 시기 주요 기술 특징
0기 1940년대 없음 진공관(0과 1) 사용
1기 1950년대 카드 리더, 라인 프린터 일괄 작업 시스템
운영체제의 등장
2기 1960년대 초반 키보드, 모니터 대화형 시스템
3기 1960년대 후반 C언어 다중 프로그래밍 기술 개발
시분할 시스템
4기 1970년대 PC 개인용 컴퓨터의 등장
분산 시스템
5기 1990년대 클라이언트/서버 시스템
6기 2000년대 스마트폰 P2P 시스템(메신저, 파일 공유)
그리드 컴퓨팅
클라우드 컴퓨팅
사물 인터넷

 

초창기 컴퓨터(1940년대)

  • 전선을 잭에 꼽아 회로를 연결하여 구성한 에니악은 30톤 규모의 거대한 계산기로 미사일 탄도를 계산하기 위해 제작됨
    • 전선을 연결하여 논리회로를 구성하는 것 : 하드와이어링(hard wiring)
  • 백열 전구 같은 모양의 진공관이라는 소자를 사용하여 진공관이 켜지면 1, 꺼지면 0이라고 판단하였는데, 이는 컴퓨터가 2진법을 사용하는 계기가 되었음
  • 초창기의 컴퓨터에는 운영체제가 없음

 

일괄 작업 시스템(1950년대)

  • 진공관에서 IC(Integrated Circuit)라는 칩으로 만들어지게 됨
    • 진공관과 전선으로 만들어진 논리회로를 아주 작은 크기로 구현한 것으로, 이를 이용함으로써 현대적인 모습의 컴퓨터가 탄생함
  • 이 때의 컴퓨터에는 미약하지만 중앙처리장치인 CPU와 메인메모리가 있었으나, 입출력장치가 없어 천공카드 리더를 입력장치로, 라인 프린터를 출력장치로 사용함
    • 천공카드 리더 : OMR의 원조격으로 특수한 펜으로 표시하는 대신 구멍을 뚫어 문자나 숫자를 표현했음
    • 라인 프린터 : 문자만 출력하는 프린터로 한 번에 한 줄씩 출력하여 라인 프린터라는 이름이 붙었음
  • 해당 시기의 컴퓨터는 한번에 하나의 작업만이 가능하고 모든 작업을 한꺼번에 처리해야 했는데 이를 일괄 작업 시스템(batch job system) 또는 일괄 처리 시스템(batch processing system)이라고 부름

 

대화형 시스템(1960년대 초반)

  • 키보드와 모니터가 등장하였음. 입출력 장치는 일괄 작업 시스템에서 작업 중간에 사용자가 입력을 하거나 사용자에게 중간 결과값을 보여줄 수 있게 되었음
  • 프로그램이 진행되는 도중에 사용자로부터 입력을 받을 수 있어 입력값에 따라 작업의 흐름을 바꾸는 것도 가능해졌는데 컴퓨터와 사용자가 대화를 통해 작업이 이루어져 대화형 시스템(interactive system)이라고 일컫게 되었음
  • 대화형 시스템 등장으로 응용 프로그램을 만들 수 있게 되었으나 입력과 출력이 얼마 만에 완료될지 모르고 사용자가 언제 반응 할지 예상하지 못하는 문제가 생겼음

 

시분할 시스템(1960년대 후반)

  • 컴퓨터의 크기는 작아지고 계산 능력이 향상되면서 값비싼 기계로 한 번에 하나의 작업만 수행하는 것은 낭비라 생각되어 효율적으로 사용하기 위해 다중 프로그래밍(multiprogramming) 기술이 개발됨
    • 다중 프로그래밍 : 하나의 CPU로 여러 작업을 동시에 실행하는 기술
  • 다중 프로그래밍이 구현된 방법은 여러 작업이 하나의 CPU를 공동으로 사용할 때 작업이 끊겨 보일 테지만 다중 프로그래밍 시스템에는 시간을 잘게잘게 분할하는 시분할 시스템을 통해 동시에 실행되는 것처럼 보임
  • 이때 모든 작업이 잘게 나뉜 시간 한 조각을 타임 슬라이스 또는 타임 퀀텀이라고 하며 오늘날의 컴퓨터에는 대부분 시분할 시스템이 사용됨
  • 시분할 시스템의 단점은 여러 작업을 동시에 처리하기 위한 추가 작업이 필요하다는 것으로 많은 양의 작업이 공존할 경우 일정 시간안에 끝나는 것을 보장받지 못하였음

 

다중 사용자 시스템

  • 멀티프로그래밍 수준이란 시분할 시스템에서 동시에 실행되는 작업의 개수인데 여러 작업을 동시에 실행할 수 있다는 것을 의미
  • 또한 한 사람이 여러 프로그램을 동시에 실행할 수 있다는 의미이기도 하고 여러 사람이 동시에 작업할 수 있다는 의미이기도 한데 시분할 시스템은 이러한 다중 사용자 시스템을 가능하게 만들어주었음
  • 해당 환경을 바탕으로 C언어로 유닉스를 개발하게 되었음

 

분산 시스템(1970년대 후반)

  • 스티브 잡스가 최초로 개인용 컴퓨터를 발표하고 소프트웨어가 급속도로 발전하며 인터넷이 등장한 시기이기도 함
  • 서로 호환되지 않는 LAN(Local Area Network)들을 하나로 묶기 위해 아르파넷이 만들어졌고 이후 대중에게 개발되고 컴퓨터 간의 네트워킹을 위한 TCP/IP 프로토콜을 정의하였음
  • 개인용 컴퓨터가 보급되면서 값이 싸고 작은 컴퓨터들을 하나로 묶어 대형 컴퓨터에 버금가는 분산 시스템(distributed system)이라는 새로운 컴퓨팅 환경이 조성됨

 

클라이언트/서버 시스템 (1990년대 ~ 현재)

  • 분산 시스템은 모든 컴퓨터가 동일한 지위로 컴퓨터가 고장나면 작업을 분배하고 결과를 모으기 어려움
  • 작업을 요청하는 클라이언트와 거기에 응답하여 요청받은 작업을 처리하는 서버의 이중 구조로 나뉨
  • 모든 요청이 서버로 집중되어 서버 과부하가 문제가 됨
  • 웹 시스템의 보급 이후 클라이언트/서버 구조가 알려지게 됨

 

P2P 시스템(2000년대 초반 ~ 현재)

  • 클라이언트/서버 시스템의 서버과부하로 서버 부하를 줄일 수 있는 새로운 시스템인 P2P 시스템(Peer-to-Peer system) 등장
  • peer는 말단 노드로 사용자의 컴퓨터를 가리키며 서버를 거치지 않고 사용자와 사용자를 직접 연결한다는 의미로 서버가 파일 탐색만 맡고 사용자 간에 파일 전송이 이루어지는 것이 장점
  • 서버가 있는 P2P 시스템과 서버가 없는 P2P 시스템이 있는데 서버가 있는 경우는 사용자 인증과 출석 정보, 과거 데이터 보관 등의 기능을 가지고 서버가 없는 P2P 시스템의 경우 비트코인이나 블록체인을 꼽을 수 있음
    • 블록체인용형 네트워크는 거래 장부도 중앙에 집중 되는 것이 아니라 P2P 시스템 전체에 분산하여 하나의 장부가 조작되거나 유실되더라도 거래에 영향을 미치지 않음

 

기타 컴퓨팅 환경(2000년대 초반 ~ 현재)

그리드 컴퓨팅

  • 필요한 기간동안 특정 기능을 구현하기 위해 한 기간만 컴퓨터를 사용하고 비용을 지불할 수 있는 그리드 컴퓨팅
  • 서로 다른 기종의 컴퓨터들을 묶어 대용량의 컴퓨터 풀을 구성하고 이를 원격지와 연결하여 대용량 연산을 수행하는 컴퓨팅 환경
  • 대용량의 데이터 연산은 소규모 연산으로 나누어 분산시킨다는 점에서 분산 시스템이라고 볼 수 있음
  • 그리드 컴퓨팅이 하드웨어적인 컴퓨팅 환경의 통합이고 반면 필요한 기능을 모아 서비스를 제공하는 SaaS(Software as a Service)는 사용자가 필요할 때 소프트웨어 기능을 이용하고 그만큼의 비용을 지불하는 개념

 

클라우드 컴퓨팅

  • 언제 어디서나 응용 프로그램과 데이터를 자유롭게 사용할 수 있는 컴퓨터 환경
  • 그리드 컴퓨팅과 SaaS를 합쳐놓은 형태로 하드웨어를 포함한 시스템이 구름에 가려진것 처럼 사용자에게 보이지 않아 클라우드 컴퓨팅이라는 명칭이 붙음
  • 클라우드 컴퓨팅 환경에서는 클라우드 서버에 회사 홈페이지를 올려놓고 사용한 만큼 비용을 지불하면 되어 서버 관리와 네트워크 관리를 클라우드 서버 제공자가 알아서 해주기 때문에 편리

 

사물 인터넷

  • 사물 인터넷(IoT : Internet of Things)은 사물에 센서와 통신 기능을 내장하여 인터넷에 연결하는 기술
  • 인터넷에 연결된 사물들이 데이터를 주고 받아 스스로 분석하고 학습한 정보를 사용자에게 제공하거나 새로운 서비스를 창출함

 

3. 운영체제의 구조

커널과 인터페이스

  • 운영체제는 크게 인터페이스와 커널로 분리
  • 인터페이스는 커널에 명령을 전달하고 실행 결과를 사용자와 응용 프로그램에 돌려주는 것
  • 커널(Kernel)은 프로세스 관리, 메모리 관리, 저장장치 관리 등의 운영체제의 핵심적인 기능을 모아둔 것
    • 프로세스 관리 : 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경을 제공
    • 메모리 관리 : 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간을 제공한다
    • 파일 시스템 관리 : 데이터를 저장하고 접근할 수 있는 인터페이스를 제공
    • 입출력 관리 : 필요한 입력과 출력 서비스를 제공
    • 프로세스간 통신 관리 : 공동 작업을 위한 각 프로세스 간 통신 환경을 지원

 

 

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

  • 커널은 시스템 호출과 드라이버가 포함함
    • 시스템 호출 : 시스템 호출(system call)은 커널이 자신을 보호하기 위해 만든 인터페이스로 응용 프로그램이나 사용자로부터 컴퓨터 자원에 직접 접근하는 것을 차단
    • 드라이버 : 하드웨어의 인터페이스는 드라이버가 담당. 컴퓨터 하드웨어는 종류가 많은데 운영체제가 많은 하드웨어를 다 사용할 수 있는 환경을 제공하려면 각 하드웨어에 맞는 프로그램을 직접 개발해야함. 커널이 실행될때 같이 실행되는 하드웨어 제작자가 만든 소프트웨어를 디바이스 드라이버라고 부름

 

단일형 구조 커널

  • 단일형 구조 커널은 초창기의 운영체제 구조로 커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성되어 있음
  • 단일형 구조를 프로그램에 비유하면 함수를 거의 사용하지 않고 main()에 모든 기능을 구현한 형태와 같음
  • 장점
    • 모듈 간의 통신 비용이 줄어들어 효율적인 운영 가능
  • 단점
    • 버그나 오류 처리가 어려움
    • 상호 의존성이 높아 기능상의 작은 결함이 시스템 전체로 확산될 수 있음
    • 다양한 환경의 시스템에 적용하기 어려움(이식성이 낮음)
    • 현대의 운영체제는 매우 크고 복잡하기 때문에 완전 단일형 구조의 운영체제를 구현하기가 어려움
  • 대표적인 운영체제는 MS-DOS, 초기의 유닉스

 

계층형 구조 커널

  • 계층형 구조 커널은 비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만들고 계층 간의 통신을 통해 운영체제를 구현하는 방식
  • 비슷한 기능을 모듈화하여 버그나 오류를 쉽게 처리할 수 있고 디버깅하기도 쉬워 윈도우를 비롯해 오늘날의 운영체제는 대부분 해당 구조로 이루어져 있음

 

마이크로 구조 커널

  • 계층과 기능이 계속 추가되면서 커널의 크기가 커지고 필요한 하드웨어의 용량이 늘어나면서 오류를 잡기 어려워졌는데 이러한 계층형 구조의 접근 방식과 반대로 개발된 커널이 마이크로 구조 커널
  • 해당 커널의 운영체제는 프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등 가장 기본적인 기능만 제공하고 다른 커널에 비해 운영체제의 많은 부분을 사용자 영역에 구현되어 있음
  • 커널은 메모리 관리와 프로세스 간 동기화 서비스를 제공하며 프로세스 간 통신으로 연결되어 있어 각 모듈은 세분화되어 존재하고 모듈 간의 정보 교환은 프로세스 간 통신을 이용하여 이루어짐
  • 마이크로 구조에서 각 모듈은 독립적으로 작동하기 때문에 하나의 모듈이 실패하더라도 전체 운영체제가 멈추지 않음
  • 또한 많은 컴퓨터에 이식하기 쉽고 커널이 가벼워 CPU 용량이 작은 시스템에도 적용이 가능함

 

가상머신

  • 각각의 언어로 만든 커널은 다른 운영체제에서 작동하지 않는 호환성 문제를 Java가 해결하였는데 Java는 운영체제 위에 가상 머신(virtual machine)을 만들고 그 위에서 응용 프로그램이 작동하게 하였음
  • 가상머신을 설치하면 응용 프로그램이 모두 동일한 환경에서 작동하는 것처럼 보임
  • 가상머신은 다양한 곳에서 사용되며 가상머신을 사용하면 호환성이 높아지지만 응용 프로그램이 가상머신을 통해서만 작동하기 때문에 느려진다는 단점이 존재

 

 

 

 

펌웨어(Firmware)
소프트웨어와 하드웨어의 결합 형태
유틸리티(Utility)
운영체제의 작업을 보조하는 소프트웨어
CPU 집중 작업과 입출력 집중 작업
CPU 집중 작업
- 일괄 작업 시스템에서는 프로그램이 실행되는 동안에 입출력이 불가능하기 때문에 대부분의 작업이 CPU만 사용하는 계산 작업이었음
- 이를 CPU 집중 작업, CPU 편향 작업 또는 컴퓨터 집중 작업이라고 부름
- ex) 수학 계산

입출력 집중 작업
- 대화형 시스템에서는 프로그램이 실행되는 동안에 입출력이 가능하기 때문에 입출력 집중 작업이 생겨남
- 입출력 집중 작업 또는 입출력 편향 작업은 대부분의 작업 시간을 주변장치의 입력과 출력에 사용함
- ex) 동영상 플레이어, 데이터베이스
경성 실시간 시스템과 연성 실시간 시스템
경성 실시간 시스템(hard real-time system)
- 지정한 응답 시간을 정확히 지키는 시스템
- ex) 원자력 발전소, 미사일 요걱

연성 실시간 시스템(soft real-time system)
- 지정한 응답 시간을 최대한 지키지만 융통성이 어느 정도 허용된 시스템
- ex) 동영상 재생기
데몬(Daemon)
멈추지 않고 계속 작동하는 프로그램
서버가 없는 P2P 시스템과 서버가 있는 P2P 시스템
완전 P2P 시스템

- ex) 비트코인의 블록체인

서버가 있는 P2P 시스템
- ex) 메신저
API와 SDK
API

- 응용 프로그램이 자신과 연관된 프로그램을 만들 수 있도록 제공하는 인터페이스
- 시스템 호출보다 광범위한 개념

SDK
- 프로그램 개발자를 위해 API 및 API 사용 매뉴얼뿐만 아니라 프로그램 개발에 필요한 코드 편집기와 에뮬레이터 같은 각종 개발용 응용 프로그램까지 하나로 묶어서 배포하는 개발 툴