[CS] Chapter 01 운영체제의 개요

Ringo·2024년 3월 7일

Computer Science

목록 보기
1/16
post-thumbnail

📌 운영체제의 소개

1. 생활속 운영체제

컴퓨터는 원래 미사일 탄도를 계산하기 위해 개발되었습니다. 그런데 계산기라 부르지 않고 컴퓨터라고 부르는 이유는 프로그래밍이 가능한 기계이기 때문입니다.

2. 운영체제의 정의

컴퓨터는 크게 하드웨어(hardware)소프트웨어(software)로 구성됩니다.

소프트웨어 :
하드웨어를 제어하여 작업을 수행시키는 명령의 모음입니다. 즉 프로그램(program)을 나타냅니다.

소프트웨어는 크게 응용프로그램시스템 소프트웨어로 나눌 수 있습니다.

응용프로그램 (application program) : 특정 작업을 위해 사용하는 프로그램입니다.

시스템 소프트웨어 (system sofware) : 컴퓨터 하드웨어와 응용 프로그램을 관리하기 위한 소프트웨어입니다. 대표적으로 운영체제와 유틸리티가 있습니다.

유틸리티 : 운영체제의 작업을 보조하는 소프트웨어

응용 프로그램의 잘못된 동작으로 컴퓨터가 망가지는 것을 막기 위해 컴퓨터 전체를 관리하고 운영하는 소프트웨어가 OS라 부르는 운영체제(Operating System)입니다.

응용 프로그램은 운영체제의 허락을 받은 후에야 하드웨어를 사용할 수 있습니다.
악의적인 사용자가 하드디스크의 아무 곳에나 데이터를 저장해 다른 사람의 데이터를 지우거나 덮어쓰는 일이 발생하지 않게 운영체제는 응용프로그램과 사용자에게서 모든 컴퓨터 자원을 숨깁니다.

인터페이스(interface) :
사용자가 컴퓨터를 사용할 수 있도록 해주고 그 결과를 알려주는 장치

운영체제를 한마디로 정의하면 컴퓨터 자원을 효율적으로 관리하는 소프트웨어입니다.
운영체제는 하드웨어의 도움 없이는 작동하기 어려우므로 소프트웨어와 하드웨어의 특성을 모두 갖춘 형태로 운영되며 이를 펌웨어(firmware)라 부릅니다.

3. 컴퓨터 구조와 운영체제

운영체제는 커널(kernel)과 인터페이스(interface)로 나뉩니다.
커널은 운영체제의 핵심 기능을 모아놓은 것입니다. 커널은 모든 컴퓨터 자원을 관리하기 때문에 사용자나 응용 프로그램은 커널을 통해서만 컴퓨터 자원에 접근할 수 있습니다. 어떤 사용자나 응용 프로그램도 컴퓨터 자원에 직접 접근할 수 없습니다.

과거에는 사용자가 명령어를 직접 입력하여 작업하는 문자 기반 인터페이스를 사용했지만, 지금은 그래픽 사용자 인터페이스(Graphical User Interface)를 제공하는데 약자로 GUI라고 합니다.

4. 운영체제의 역할

컴퓨터 자원을 관리하는 운영체제의 역할은 다음과 같습니다.

  1. 자원관리
  2. 자원 보호
  3. 하드웨어 인터페이스 제공
  4. 사용자 인터페이스 제공

5. 운영체제의 목표

운영체제는 역할을 제대로 수행하여 효율성, 안정성, 확장성, 편리성을 강화할 수 있는 형태로 발전해 왔습니다.

  1. 효율성
  2. 안정성
  3. 확장성
  4. 편리성

📌 운영체제의 발전

1. 초창기 컴퓨터

초기의 컴퓨터에는 키보드, 마우스, 모니터와 같은 주변장치가 없었습니다. 18,000개의 진공관을 전선으로 연결한 것이 오늘날의 프로그램을 대신했는데, 이렇게 전선을 연결하여 논리회로를 구성하는 것을 하드와이어링(hard wiring) 방식이라고 합니다. 물론 초창기의 컴퓨터에는 운영체제가 없었습니다.

2. 일괄 작업 시스템

모든 작업을 한꺼번에 처리하는 시스템을 일괄 작업 시스템(batch job system) 이라고 합니다.

천공카드 리더 : 카드에 구멍을 뚫어 문자를 입력하는 장치

라인 프린터 : 문자만 출력하는 프린터로 한번에 한 줄씩 출력

3. 대화형 시스템

컴퓨터와 사용자의 대화를 통해 작업이 이루어지는 시스템을 대화형 시스템(interactive system) 이라고 합니다.

4. 시분할 시스템

허가받은 몇몇 사용자만 사용할 수 있었고 값비싼 컴퓨터로 한 번에 한 가지 작업만 수행할 수 있어, 컴퓨터를 효율적으로 사용하기 위해 멀티프로그래밍(multiprogramming) 기술이 개발되었습니다.

여러 작업이 하나의 CPU를 공동으로 사용하면 작업이 끊겨 보일 텐데 멀티프로그래밍 시스템에서는 여러 작업이 동시에 실행되는 것처럼 보입니다. 이는 시간 분할 방법을 사용하기 때문입니다.

멀티프로그래밍 시스템에서는 CPU 사용 시간을 아주 잘게 쪼개어 여러 작업에 나누어 줍니다. 이때 잘게 나뉜 시간 한 조각타임 슬라이스(time slice) 또는 타임 퀀텀(time quantum)이라고 합니다.

시분할 시스템 (time sharing system) :
여러 작업을 조금씩 처리하여 작업이 동시에 이루어지는 것처럼 보이게 하는 것

오늘날의 컴퓨터에서는 대부분 시분할 시스템이 사용됩니다.

실시간 시스템 (real-time system) :
시분할 시스템을 사용하지 않고, 특정 시스템에서 일정 시간 안에 작업이 처리되도록 보장하는 시스템

5. 분산 시스템

값이 싸고 크기가 작은 컴퓨터를 하나로 묶어 대형 컴퓨터에 버금가는 시스템을 만들게 되었는데 이를 분산 시스템(distributed system) 이라고 합니다.

분산 시스템은 네트워크상에 분산된 여러 컴퓨터로 작업을 처리하고 그 결과를 상호 교환하도록 구성한 시스템입니다.

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

분산 시스템에서는 시스템에 참가하는 모든 컴퓨터의 지위가 동일하기 때문에 컴퓨터가 고장나거나 추가되면 작업을 분배하고 결과를 모으기가 쉽지 않습니다. 클라이언트/서버 시스템(client/server system)은 이러한 문제를 해결하는 기술로, 모든 컴퓨터의 지위가 동일한 분산 시스템과 달리 작업을 요청하는 클라이언트와 거기에 응답하여 요쳥받은 작업을 처리하는 서버의 이중 구조로 나뉩니다.

7. P2P 시스템

서버는 중재만 하고, 파일을 얻고자 하는 말단 사용자(peer)가 파일을 가진 말단 사용자로부터 직접 다운로드 하는 시스템을 Peer-to-Peer 시스템이라 하며 간단히 P2P 시스템이라 부릅니다.

메신저와 같이 서버가 존재하는 P2P 시스템도 있지만, 서버가 없는 완전한 P2P 시스템도 있습니다. 완전한 P2P 시스템의 대표적인 예는 블록체인(block chain) 입니다.

디지털 자산의 유일성을 증명하는 곳에 블록체인이 사용되는데 이를 대체 불가 토큰 또는 NTF(Non-Fungible Token)라 부릅니다.

8. 클라우드 컴퓨팅

그리드 컴퓨팅(grid computing)은 여러 곳에 떨어진 컴퓨팅 파워나 소프트웨어를 하나로 묶어 하나의 컴퓨터처럼 사용하는 기술입니다.

하드웨어와 소프트웨어를 클라우드라고 불리는 중앙 시스템에 숨기고 사용자는 필요한 서비스만 그때그때 이용하는 방식의 컴퓨팅 환경을 클라우드 컴퓨팅(cloud computing) 이라고 합니다.

클라우드 환경으로 옮겨 오면서 더 이상 저장장치에 데이터를 저장해서 들고 다닐 필요가 없어졌습니다. 사용자는 저장장치가 어떻게 구성되는지, 컴퓨팅 파워는 얼마나 되는지, 네트워크 용량은 충분한지를 고민하지 않아도 됩니다. 이처럼 하드웨어와 소프트웨어 서비스가 구름(클라우드) 속에 숨겨진 컴퓨팅 환경이 클라우드 컴퓨팅입니다.

9. 사물 인터넷

사물(thing)이 인터넷에 연결된 시스템을 사물 인터넷(Internet of Things)이라 하고 간단히 IoT라 부릅니다.

OTA (Over-The_Air) :
차에 무선 인터넷이 연결되면서 차량의 소프트웨어 업그레이드나 설정 변경 등을 무선으로 배포하는 기술


📌 운영체제의 구성

1. 커널과 인터페이스

운영체제는 커널인터페이스로 구성되어 있습니다. 커널(kernel)은 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심 기능을 구현한 프로그램입니다.

운영체제의 성능은 커널이 좌우합니다.

인터페이스(interface)는 사용자와 응용 프로그램에 인접하여 커널에 명령을 전달하고 실행 결과를 사용자와 응용 프로그램에 돌려줍니다.

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

커널 내부에 시스템 호출드라이버가 있습니다. 시스템 호출(system call)은 커널이 자신을 보호하기 위해 만든 인터페이스 입니다. 커널은 컴퓨터 자원을 보호하기 위해 사용자나 응용 프로그램이 자원에 직접 접근하는 것을 차단합니다. 따라서 자원을 이용하려면 시스템 호출이라는 인터페이스를 이용하여 접근해야 합니다.

  1. 직접 접근
    직접 데이터에 접근

  2. 시스템 호출을 통한 접근
    read(), write() 메서드로 시스템 호출을 통한 접근

시스템 호출과 유사한 용어로 응용 프로그램 인터페이스(API Application Programming Interface)와 시스템 개발자용 키트(SDK System Developer's Kit)가 있습니다.

디바이스 드라이버 (device driver) :
커널과 하드웨어의 인터페이스, 드라이버라고도 부릅니다.

시스템 호출 부분을 보면 커널 앞부분 전체를 감싸고 있어, 시스템 호출을 거치지 않으면 커널에 진입할 수 없다는 의미입니다. 반면에 드라이버는 커널 전체를 감싸고 있지 않고 있는데, 이는 커널이 제공하는 드라이버도 있고 하드웨어 제작자가 제공하는 드라이버도 있기 때문입니다.

현대의 운영체제에서는 커널은 주변장치와 데이터를 주고받는 표준 방식을 정하고 있습니다.

3. 커널의 역할과 종류

커널의 가장 중요한 작업은 여러 응용 프로그램을 실행하는 것입니다. 따라서 다양한 종류의 프로세스에 CPU를 배분하고 작업할 수 있는 환경을 만들어 주는 것이 커닐의 주요 역할입니다. 이를 프로세스 관리라 합니다.

커널은 여러 개의 프로세스를 메모리에 배치하는 일을 합니다. 그리고 저장장치에 필요한 파일 시스템을 만들고 관리하는 일을 합니다.

커널의 역할을 정리하면 다음과 같습니다.

  1. 프로세스 관리
  2. 메모리 관리
  3. 파일 시스템 관리
  4. 입출력 관리
  5. 프로세스 간 통신 관리

커널의 기능을 어떻게 구현하는가에 따라

  1. 단일형 구조 커널 :
    핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성된 커널입니다.

  2. 계층형 구조 커널 :
    비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만들고, 계층 간의 통신을 통해 운영체제를 구현하는 방식의 커널입니다.

  3. 마이크로 구조 커널 :
    프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등 가장 기본 기능만 제공하는 커널입니다.

로 구분됩니다.

4. 가상머신

자바가 작동하는 원리는 매우 간단합니다. 운영체제 위에 가상머신(virtual machine)을 만들고 그 위에서 응용 프로그램이 작동하게 하는 것입니다.


profile
끄적끄적…

0개의 댓글