운영체제 개요

채재헌·2023년 6월 3일
0
post-thumbnail

🎆1. 운영체제의 정의


(1) 운영체제의 정의


운영체제(operatring system)란 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어를 말한다. 운영체제는 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층으로 그 위상은 아래의 그림과 같다.

운영체제의 영문 명칭은 'operating system'이다. '시스템'이란 용어는 기반이나 틀이 되는 하드웨어를 지칭할 때 사용되는데, 소프트웨어인 운영체제에 시스템이라는 용어가 사용된것은 하드웨어가 운영체제와 한 몸이 되어야만 사용자에게 쓰일 수 있는 진정한 컴퓨터 시스템이기 때문이다.

운영체제는 하나의 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라간다. 하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 한정된 메모리 공간의 낭비가 심해져서 운영체제 중 항상 필요한 부분만을 전원 켜짐과 동시에 메모리에 올려놓고 그렇지 않는 경우는 필요할 때 메모리로 올려서 사용하게 된다. 이때 메모리에 상주하는 운영체제의 부분을 커널(kernel)이라고 부르며 이를 좁은 의미의 운영체제라고 부른다. 즉 커널은 운영체제의 핵심적인 부분을 뜻하고 이에 반해서 넓은 의미의 운영체제는 커널뿐만 아니라 시스템을 위한 유틸리티들을 광범위하게 포함하는 개념이다.


🎇2. 운영체제의 기능


운영체제의 역할은 하드웨어를 위한 역할과 사용자를 위한 역할의 두 가지로 나누어 볼 수 있다. 하드웨어 쪽에서는 사용자가 다루기 힘든 각종 하드웨어를 운영체제가 관리하는 역할을 하며, 사용자에는 편리한 인터페이스를 제공하는 역할을 한다. 즉 더 자세히 설명하자면, 컴퓨터 시스템 내의 자원을 효율적으로 관리하는 것과, 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공하는 것이다.

  • (1) 편리한 인터페이스를 제공하는 역할
    ex) 파일 을 손쉽게 저장하거나 파일의 내용을 꺼내 볼 수 있도록 인터페이스를 제공해주는 일
  • (2) 컴퓨터 시스템 내의 자원( CPU,메모리,하드디스크,소프트웨어 자원,등)을 효율적으로 관리하는 자원관리자 역할
  • 이 밖에 여러 사용자의 프로그램이 하나이 컴퓨터에서 실행되면 이에 대한 보안이 필요하므로, 운영체제는 보안 및 보호 기능 을 수행하게 된다.

✨3. 운영체제의 분류

운영체제는 동시 작업을 지원하는지의 여부에 따라 단일작업(single tasking)용 운영체제와 다중작업(multi tasking)용 운영체제등, 여러 가지 기준으로 나누어 볼 수 있다.


(1) 단일 작업용 운영체제와 다중작업용 운영체제

  • 단일 작업용 운영체제 : 단 한번에 하나의 프로그램만 실행시킬 수 있는 운영체제로, 초창기 운영체제는 대개 단일작업용 운영체제에 해당되었다. ex) MS 윈도우가 나오기전인 도스(Disk Operatring System: DOS)환경
  • 다중 작업용 운영체제 : 대부분 현재는 2개 이상의 프로그램을 처리할 수 있는 운영체제

(2) 여러 프로그램을 처리하는 시스템 방식의 기준

  • 시분할 시스템(time sharing system) : CPU의 작업시간을 여러 프로그램들이 조금씩 나누어 쓰는 시스템

  • 다중 프로그램 시스템(multi-programming system) : 메모리 공간을 분할해 여러 프로그램들을 동시에 메모리에 올려놓고 처리하는 시스템.

  • 대화형 시스템(interactive system)) : 다중 작업용 운영체제의 경우 여러 프로그램에 대한 키보드 입력의 결과를 곧바로 화면에 보여주는 시스템

=> 공통점: 각 프로그램이 사용자의 입력에 대해 곧바로 응답한다는 측면에서 유사한 의미로 사용되며, 이에 따른 예로는 우리가 널리 사용하는 PC가 바로 이러한 조건을 만족하는 시스템을 가지고 있다.


(3) 다중 사용자에 대한 동시 지원여부의 기준

  • 단일 사용자용 운영체제 : 한 번에 한 명의 사용자만이 사용하도록 허용하는 운영체제를 단일 사용자용 운영체제라고 부른다.
    => ex) DOS 처럼 한 번에 하나의 작업만 수행 할 수 있는 경우
  • 다중 사용자용 운영체제 : 여러 사용자가 동시에 접속해 사용할 수 있게하는 운영체제를 다중 사용자용 운영체제라고 한다.

=> ex) 이메일 서버나 웹서버 등 우리가 흔히 서버라고 부르는 컴퓨터


(4) 작업을 처리하는 방식의 기준


  • 일괄처리 방식(batch processing) : 요청된 작업을 일정량씩 모아서 한꺼번에 처리하는 방식이다. 즉 이방식에서는 처리해야할 여러 작업들을 모아 일정량이 쌓이면 일괄적을 처리하고, 모든 작업이 완전히 종료된 후에 결과를 얻을 수 있다.

    => 사용자 입장에는 응답시간이 길다는 단점이 있음.
    =>ex) 펀치 카드


  • 시분할 방식: 여러 작업을 수행할 때 컴퓨터의 처리 능력을 일정한 시간 단위로 분할해 사용하는 방식이다.

=> 사용자들은 일괄처리 방식에 비해 짧은 응답시간을 갖게 된다.
=>ex) 유닉스 운영체제하의 서버 컴퓨터, 대화형 시스템


(5) 실시간 운영체제

실시간 운영체제 : 실시간 운영체제는 정해진 시간 안에 어더한 일이 반드시 처리됨을 보장해야 하는 시스템에서 사용된다.
다시 말해 일정 시간 안에 작업이 완료되지 못할 경우에는 동작 자체가 되지 않거나 큰 위험을 초래 할 수 있는 시스템에서 사용된다.
=> ex) 원자로,공장제어 시스템,미사일 제어 시스템,등


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


운영체제의 가장 핵심적인 기능은 자원을 효율적으로 관리하는것으로, 여기서 자원은 하드웨어 자원소프트워에 자원으로 나뉜다. 하드웨어 자원은 CPU와 메모리를 비롯해 주변장치 또는 입출력 장치라 불리는 장치들로 구성된다. CPU는 통상적으로 컴퓨터 한대에 하나가 장착 되기 때문에 여러 프로세스들이 CPU를 효율적으로 나누어 사용할 수 있도록 관리되어야 하고 메모리도 시스템내의 한정된 용량만 존재하기 때문에 서로 다른 다수의 프로세스들이 나누어 쓸 수 있도록 해야하며, 이외에 입출력 장치,등 여러 장치가 운영체제의 관리가 필요하다.


(1) 운영체제가 CPU를 관리하는 방법


운영체제가 CPU를 관리하는 방법을 앞서 운영체제가 CPU를 매 시점 어떠한 프로세스에 CPU를 할당해 작업을 처리할 것인지 결정하는 일이 필요하며, 이러한 일을 우리는 CPU 스케줄링(cpu scheduling)이라고 한다. 대표적인 스케줄링 기법으로 선입선출(FCFS), 라운드 로빈(Round Robin),우선순위(priority)기법이 있다.


  • 선입 선출 기법(FCFS)
    CPU를 사용하기 위해 도착한 프로세스들 중 먼저 온 것을 먼저 처리해주는 방식이다. 이 방식에서는 CPU를 필요로 하는 프로세스가 여럿 있을 때 CPU를 먼저 얻은 프로세스가 원하는 작업을 완료할 때까지 다른 프로세스들이 CPU를 사용하지 못한다.

    단점: 장시간 CPU를 사용해야한는 프로세스가 먼저 도착하고 짧은 시간만 CPU를 사용하면 되는 프로세스들은 선행 프로세스 작업을 마칠때까지 장시간 기다려야한다.


  • 라운드 로빈 기법(Round Robin)

CPU를 한번 할당받아 사용할 수 있는 시간을 일정하게 고정된 시간으로 제한하는 기법을 말한다. 이러므로 긴 작업을 요하는 프로세스가 CPU를 할당받더라도 정해진 시간이 지나면 CPU를 내어놓고 CPU 대기열의 제일 뒤에 가서 줄을 서야 한다. 그러므로 적어도 긴 작업을 수행하는 프로세스 때문에 짧은 작업을 가진 프로세스들이 무작정 오래 기다려야 하는 상황은 막을 수 있어서 선입 선출 기법의 단점을 보완 할 수 있는 기법이다.


  • 우선순위 스케줄링
    CPU 사용을 위해 대기 중인 프로세스들에 우선순위를 부여하고 우선순위가 높은 프로세스에 CPU를 먼저 할당한다. 시스템 내의 프로세스 중에는 상대적으로 더 더 중요한 프로세스가 있을 수 있으므로 그런 프로세스의 우선순위를 높게 하여 CPU를 먼저 흭득할 수 있게 한다는게 이 기법의 핵심이다. 또한 지나치게 오래 기다리는 프로세스가 발생하지 않도록 , 기다리는 시간이 늘어날수록 우선순위를 점차 높여주는 방안도 우선순위 스케줄링에 활용될 수 있다.

(2) 운영체제가 메모리를 관리하는 방법


메모리는 CPU가 직접 접근할 수 있는 컴퓨터 내부의 기억장치이다. 프로그램이 CPU에서 실행되려면 해당 부분이 메모리에 올라가 있어야 한다. 이때 한정된 매모리 공간에 여러 프로그램을 수용하려면 메모리에 대한 효율적인 관리 메커니즘이 필요하다. 따라서 메모리 관리를 위해 운영체제는 메모리의 어는 부분이 어떤 프로그램에 의해 사용되고 있는지를 파악하여 이를 유지하는데 이러한 정보는 주소(address)를 통해 관리되며, 운영체제는 메모리 공간이 효율적으로 사용될 수 있게 해야하고, 각 프로세스가 자신의 메모리 영역에만 접근할 수 있도록 관리 해야한다. 물리적 메모리를 관리하는 방식에는 고정분할(fixed partition)방식, 가변분할(variable partition)방식, 가상메모리(virtual memory)방식,등이 있다.


  • 고정분할 방식

고정분할 방식은 물리적 메모리를 몇개의 분할로 미리 나누어 관리하는 기법을 말한다. 나뉜 각각의 분할에는 하나의 프로그램이 적재될 수 있다.

단점: 이 방식은 융통성이 없다는 단점이 있으며, 이는 메모리에 적재되는 최대 프로그램의 수가 분할 개수로 한정되기 때문이다. 그뿐만 아니라 분할의 크기보다 큰 프로그램은 적재가 불가능하게 되며 메모리의 효율적인 사용 측면에서도 바람직하지 않다. 분할이 고정적이기 때문에 분할의 크기보다 작은 프로그램이 적재되는 경우 해당 분할 내에 남는 영역이 발생하며 이것을 내부조각(internal fragmentation)이라고 한다. 내부조각은 해당 분할에 올라온 프로그램에 의해서도 사용되지 않고, 다른 프로그램 에서도 할당 될 수 없으므로 비효율적으로 낭비하는 공간이라 할 수 있다.


  • 가변분할 방식

매 시점 프로그램의 크기에 맞게 메모리를 분할해서 사용하는 방식을 말한다. 다라서 분할의 크기 때문에 큰 프로그램의 실행이 제한되는 문제는 발생하지 않는다.

단점: 물리적 메모리의 크기보다 더 큰 프로그램의 실행은 여전히 불가능하다. 가변할 방식을 사용하게 되면 내부조각은 발생하지 않지만 외부조각(external fragmentation)이 발생할 수 있다. 외부조각이란 프로그램에 할당되지 않았지만 그 크기가 작아 프로그램을 올리지 못하는 메모리 영역을 말한다. 이 영역은 비어 있는 공간이지만, 그 크기가 작아 프로그램에 할당되지 못한 공간을 의미하며, 외부조각 역시 낭비된 메모리 자원이라고 할 수 있다.


  • 가상메모리 기법

현대 범용 컴퓨터 환경에서 가장 널리 사용되는 메모리 관리 기법이다. 이 기법은 물리적 메모리보다 더 큰 프로그램이 실해되는 것을 지원한다. 이때 실행될 수 있는 프로그램의 크기는 가상메모리의 크기에 의해 결정된다. 이때 실행될 수있는 프로그램의 크기는 가상메모리의 크기에 의해 결정된다. 좀 더 자세히 살펴보자면, 모든 프로그램은 물리적 메모리와는 독립적으로 0번지부터 시작하는 자신만의 가상메모리 주소로 매핑(mapping)하는 기술을 이용해 주소를 변환시킨 후 프로램을 물리적 메모리에 올리게 된다. 가상메모리 기법에서는 물리적 메모리의 크기와 상관없이, 사용할 수 있는메모리의 크기가 충분히 크다고 가정하고 프로그램을 개발 할 수 있다. 하지만 프로그램 크기가 크더라도 가상메모리에는 항상 동시에 사용되는것이 아니다. 나머지는 하드디스크와 같은 보조기억장치에 저장해두었다가 필요할 때 적재하는 방식을 취한다. 이때사용하는 보조기억장치의 영역을 스왑 영역(swap area)이라고 부르고 프로그램을 구성하는 가상메모리 주소 공간을 페이지(page)라는 동일한 크기의 작은 단위로 나뉘어 물리적 메모리와 스왑 영역에 일부분씩 저장된다. 이렇게 동일한 단위로 메모리를 나누는 기법을 페이징(paging)기법이라고 한다.(가상메모리 기법에 대한 자세한 내용은 나중에 후반부에서 더 자세히 정리하고 여기서는 소개로만 끝내겠다.)


  • 인터럽트(interrupt)

주변 및 입출력 장치는 CPU나 메모리와 달리 인터럽트(interrupt)라는 메커니즘을 통해 관리가 이루어진다. 주변장치들은 CPU의 서비스가 필요한 경우에 신호를 발생시켜 서비스를 요청하는데, 이때 발생시키는 신호를 인터럽트라고 한다. CPU는 평소에 CPU 스케줄링에 따라 자기에게 주어진 작업을 수행하다가 인터럽트가 발생하면 하던일을 잠시 멈추고 인터럽트에 의한 요청 서비스를 수행한다. 인터럽트를 발생시키는 경우의 대표적인 예로는 사용자가 키보드의 글자를 입력하면 키보드는 CPU에 인터럽트를 발생시켜 사용자로부터 입력이 들어왔음을 알리고 CPU가 하던일을 멈추고 인터럽트로 인해 처리해야 할 작업을 수행하는것이 대표적인 예이다. 키보드에 의해 인터럽트가 발생한 경우라면 사용자의 입력데이터를 해당 프로그램에 전달하는 절차를 수행하고 인터럽트 처리를 완료한 후에는 원래하던 일을 계속 수행한다. 여기서 인터럽트를 처리한 후 원래 수행하던 작업으로 돌아오기 위해 인터럽트 처리 직전에 수행중이던 작업의 상태를 저장해두는 특징이 있다. 또한 인터럽트는 요청하는 장치와 발생 상황에 따라 다양한 종류가 있는데 이러한 것을 인터럽트 처리루틴이라고 하고 인터럽트 처리루틴이란 인터럽트가 발생했을때 해주어야 할 작업을 정의한 프로그램 코드를 말한다. 이것은 운영체제 커널 내에 존재하는 코드로 CPU 스케줄링, 메모리 관리루틴 등 다양한 기능을 위한 커널 코드의 일부분이라고 할 수 있다. 인터럽트가 발생하면 운영체제는 해당하는 인터럽트 처리루틴을 찾아서 정의된 코드에 따라 일을 수행하게 된다.


  • 컨트롤러(controller)

주변장치들은 각 장치마다 그 장치에서 일어나는 업무를 관리하기 위한 일종의 작은 cpu를 가지고 있는것을 우리는 컨트롤러(controller)라고 부른다. 컨트롤러는 해당 장치에 대한 업무를 처리하고, 이를 메인 CPU에 인터럽트를 발생시켜 보고하는 역할을 한다. 예를 들어 사용자로부터 키보드에 입력이 들어오면 키보드 컨틀롤러가 인터럽트를 발생시켜 CPU에 그 사실을 알려주는 역할을 하는 것이다.


📖 참고 자료 : 운영체제와 정보기술의 원리 책

0개의 댓글