Gidhub BE Developer

운영 체제 개요

2018-05-22
goodGid
OS

1. 운영 체제의 정의

  • OS는 컴퓨터 HW 바로 윗단에 설치되는 SW

  • OS는 사용자 및 다른 모든 SW와 HW를 연결하는 SW 계층으로 그 위상은 위와 같다.

  • 각종 SW들은 위 그림과 같이 HW와 OS가 한 몸으로 존재하는 컴퓨터 시스템 위에서 수행된다.

  • 컴퓨터 전원을 On 했을 시 OS가 없으면 컴퓨터는 고철 덩어리에 불과하다.


  • SW가 컴퓨터 시스템에서 수행되기 위해서는 메모리에 적재 되어야 한다.

  • OS도 하나의 SW로서 전원이 켜짐과 동시에 메모리에 적재된다.

  • 하지만 OS처럼 큰 큐모가 모두 메모리에 적재되면 한정된 메모리 공간의 낭비가 심하다.

  • 따라서 OS 중 항상 필요한 부분만 메모리에 적재
    그렇지 않은 부분은 필요할 때 메모리에 적재 후 사용

  • 이 때 메모리에 상주하는 OS의 부분을 커널(Kernel)이라 부르며 이를 좁은 의미의 OS라고도 한다.
    즉 커널은 OS 코드 중에서도 핵심적인 부분을 뜻한다.


2. 운영 체제의 기능

  • 위 그림과 같이 OS가 컴퓨터 HW와 사용자 사이에 존재하기 때문에
    OS의 역할HW에 대한 역할사용자에 대한 역할로 크게 나눌 수 있다.

  • HW쪽에서는 사용자가 알기 힘든 각종 HW를 OS가 직접관리 –> 사용자에게는 편리한 인터페이스를 제공

  • 보다 자세히 살펴보면 OS의 두 가지 주요 기능

  • [1] 편리한 환경 제공

    • 편리한 환경 제공이란?
      OS가 동시 사용자 및 프로그램들에게 각각 독자적으로 컴퓨터를 사용하는 것과 같은 환상을 제공
  • [2] 시스템 내 자원을 효율적으로 관리

    • 효율적 자원 관리란 ?
  • OS를 자원 관리자라 부르기도 한다.
    이 때 자원이란 CPU, 메모리, 하드 디스크 등 HW + SW자원을 통칭

  • OS는 자원들을 효율적으로 관리해 가장 좋은 성능을 내는 역할을 담당

  • 하지만 전체적인 성능을 향상시키려다 일부 프로그램 또는 사용자가 불이익을 당할 수 있다.
    따라서 형평성 있게 분배되도록 균형자 역할도 함께 수행

  • 즉, 효율성이 가장 큰 목표이지만 이로 인해 일부가 지나치게 희생되지 않게 형평서 역시 OS가 고려해야할 목표이다.

  • 추가적으로 OS는 사용자와 OS 자신을 보호하는 역할을 담당


3. 운영 체제의 분류

  1. 동시 작업 지원

  2. 다중 사용자의 동시 지원 여부

  3. 작업을 처리하는 방식


  • 동시 작업 지원 x –> 단일 작업용 OS
    동시 작업 지원 o –> 다중 작업용 OS

  • 단일 작업용 OS는 한 번에 하나의 프로그램만 수행 가능

  • OS 다중 작업을 처리할 때 여러 프로그램이 CPU와 메모리를 공유한다.
    하지만 일반적으로 컴퓨터에는 CPU가 1개
    따라서 다중 작업용 OS라 하더라도 CPU에서는 매 순간 하나의 프로그램만 수행
    CPU에서 번갈아 수행되지만 CPU 처리 속도가 워낙 빨라 여러 프로그램들이 동시에 수행되는 것처럼 보이는 것이다.
    이와 같이 CPU의 작업 시간을 여러 프로그램들이 조금씨 나누어 쓰는 시스템을 시분할 시스템이라 한다.

  • CPU와 달리 메모리의 경우 여러 프로그램들이 조금씩 메모리 공간을 보유하며 동시에 메모리에 올라갈 수 있다.
    이처럼 메모리 공간을 분할해 여러 프로그램들을 동시에 메모리에 올려놓고 처리하는 시스템을 다중 프로그래밍 시스템이라 한다.

  • 다중 작업용 OS경우 여러 프로그램을 같이 수행시키지만
    사용자 입장에서는 각 프로그램에 대한 키보드 입력의 결과를 곧바로 화면에 보여 주기 때문에
    이러한 시스템을 대화형 시스템이라 한다.

  • 여러 사용자가 동시에 접속해서 쓰는 서버 경우에도 대화형 시스템에 해당된다.


  • 다중처리기 시스템이란 하나의 컴퓨터에 여러 개 CPU가 설치된 경우를 뜻한다.

  • CPU가 여럿 있는 컴퓨터는 서로 다른 CPU에서 여러 프로그램이 동시에 수행될 수 있어 처리가 빠르지만
    OS입장에서는 여러 CPU를 관리하기 위해 더욱 복잡한 메커니즘을 필요로 한다.


  • OS를 분류하는 또 다른 기준은 다중 사용자의 동시 지원 여부이다.

  • 한 번에 한 명의 사용자만이 사용 –> 단일 사용자용 OS
    여러 사용자가 동시에 접속 사용 –> 다중 사용자용 OS

  • 흔히 서버라고 부르는 컴퓨터는 다중 사용자용 OS


  • OS를 분류하는 또 다른 기준은 작업을 처리하는 방식이다.

  • [1] 일괄 처리(Batch Processing)

    • 작업 요청의 일정량을 모아서 한꺼번에 처리하는 방식
  • [2] 시분할 방식(Time Sharing)

    • 여러 작업을 수행할 때 컴퓨터의 처리 능력을 일정한 시간 단위로 분할해 사용

    • 사용자의 요청에 대한 결과를 즉각적으로 얻을 수 있는 시스템을 대화형 시스템이라 함

  • [3] 실시간(Real Time)

    • 실시간 OS는 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야하는 시스템

    • 다시 말해, 일정 시간안에 작업이 완료되지 못할 경우에는
      시스템 자체가 동작하지 않거나 큰 위험을 초래할 가능성이 있는 시스템에서 사용

    • 실시간 시스템은 시간 제약의 중욕성에 따라 2가지로 세분화 가능

      • [A] 경성 실시간 시스템(Hard Realtime System)

        • 주어진 시간을 지키지 못할 경우 매우 위험한 결과를 초래할 가능성이 있는 시스템
          ex) 로켓, 원자로 제어 시스템 등
      • [B] 연성 실시간 시스템(Soft Realtime System)

        • 멀티미디어 스트리밍 시스템과 같이 데이터가 시간을 맞추어 전달되어야 올바른 기능을 수행할 수 있는 시스템
          ex) 동영상 재생이 끊기거나 정확히 전달되지 않을 경우

        • 경성 실시간 시스템처럼 위험한 결과를 초래하지는 않는다.


4. 운영 체제의 자원 관리 기능

  • OS의 가장 핵심적인 기능은 자원효율적으로 관리하는 것
    자원 = HW 자원 + SW 자원

  • HW 자원 = CPU와 메모리를 비롯해 주변 장치 및 입출력 장치 등

  • 여러 프로세스들이 CPU를 효율적으로 나누어 사용할 수 있도록 관리되어야 함

  • 메모리 역시 시스템 내에 한정된 공간이 존재하기 때문에
    서로 다른 다수의 프로세스들이 나누어 쓸 수 있도록 해야 한다.

  • 또한 주변 장치도 OS의 관리가 필요하다.

  • CPU와 메모리는 전원 Off 시 데이터가 모두 지워지기 때문에
    저장되어야할 데이터는 보조 기억 장치파일 형태로 저장된다.
    이러한 파일들이 저장되는 방식 및 접근 권한 등에 대해서도 OS가 관리

  • CPU를 관리하는 방법

    • 일반적인 컴퓨터에는 CPU가 하나밖에 없지만 프로세스는 여러 개가 동시에 실행된다.

    • 그러므로 매 시점 어떠한 프로세스에게 CPU를 할당해 작업을 처리할 것인지를 결정하는 일이 필요하다.
      이러한 일을 CPU 스케줄링이라 한다.


  • 메모리를 관리하는 방법

    • 메모리는 CPU가 직접 접근할 수 있는 컴퓨터 내부의 기억 장치이다.

    • 프로그램이 CPU에서 수행되려면 해당 부분이 메모리에 적재되어야 한다.

    • 한정된 메모리 공간에 여러 프로그램을 수용하려면
      메모리에 대한 효율적인 관리 메커니즘이 필요하다.

    • 메모리를 관리하기 위해 OS는 메모리의 어느 부분이 어떤 프로그램에 의해 사용되고 있는지를 유지하는데
      이러한 정보는 주소(Address)를 통해 관리된다.

    • OS는 프로그램에게 메모리가 필요할 때 할당, 더 이상 필요하지 않게 될 경우 회수한다.


  • 물리적 메모리를 관리하는 방식

  • [1] 고정 분할 방식 : 물리적 메모리를 몇 개의 영구적인 분할로 나눔

    • 내부 단편화 발생

    • 물리적 메모리보다 큰 프로그램 실행 X

  • [2] 가변 분할 방식 : 매 시점 프로그램의 크기에 맞게 메모리를 분할해서 사용하는 방식

    • 외부 단편화 발생

    • 물리적 메모리보다 큰 프로그램 실행 X

  • [3] 가상 메모리 방식 : 최근 거의 모든 컴퓨터 시스템에서 사용하는 메모리 관리 기법

    • 물리적 메모리보다 큰 프로그램 실행 O

    • 모든 프로그램은 물리적 메모리와는 독립적으로 주소가 0부터 시작하는 자신만의 가상 메모리를 갖게 된다.

    • OS는 가상 메모리의 주소를 물리적 메모리 주소로 매핑하는 기술을 이용해
      주소를 변환시킨 후 프로그램을 물리적 메모리에 적재

    • 가상 메모리 기법에서는 물리적 메모리의 크기와 상관 없이
      사용할 수 있는 메모리의 크기를 충분히 크다고 가정하고 프로그래밍 가능

    • 가능하게 하는 원리는 다음과 같다.

      프로그램의 전체가 항상 동시에 사용되는 것은 아니다.
    
      그러므로 현재 사용되고 있는 부분만 메모리에 적재 후 
      나머지는 하드디스크와 같은 보조 기억 장치에 저장해 두었다가
      필요할 때 적재하는 방식을 취한다.
    
      이 때 사용되는 보조 기억 장치의 영역을 우리는 스왑 영역(Swap Area)이라 부른다.
    
      프로그램을 구성하는 주소 공간은 
      페이지라는 동일한 크기의 작은 단위로 나뉘어
      물리적 메모리와 스왑 영역에 일부분씩 저장된다.
    
      이렇게 동일한 단위로 메모리를 나누는 기법을 페이징(Paging) 기법이라 한다.
    

  • 주변 장치 및 입출력 장치는 CPU나 메모리와 달리 인터럽트(Interrupt)라는 매커니즘을 통해 관리

  • 주변 장치들은 CPU의 서비스가 필요한 경우에 신호를 발생시켜 서비스를 요청
    이 때 발생시키는 신호를 인터럽트라 한다.

  • CPU는 평소에 CPU 스케줄링에 따라 자신에게 주어진 작업을 수행하고 있다가
    인터럽트가 발생하면 하던 일을 잠시 멈추고 인터럽트에 의한 요청 서비스를 수행한다.

  • 인터럽트는 요청하는 장치와 발생 상황에 따라 다양한 종류가 있기 때문에
    OS는 인터럽트 종류마다 서로 다른 인터럽트 처리 루틴을 갖는다.
    인터럽트 처리 루틴이란 인터럽트가 발생했을 때 해주어야 할 작업을 정의한 프로그램 코드를 말한다.
    이것은 OS 커널 내에 존재하는 코드로
    CPU 스케줄링, 메모리 관리 루틴 등 다양한 기능을 위한 커널 코드 중 일부분이라 할 수 있다.

  • 인터럽트 발생시키는 예는 책을 참고하자. (p63 ~ p64)


Index