▶ 운영체제의 정의

운영체제란 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어로써, 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층이다.

 

컴퓨터의 전원을 켜면 운영체제는 이와 동시에 수행이 된다. 어플리케이션이 컴퓨터 시스템에서 수행되기 위해서는 메모리에 이 어플리케이션이 올라가 있어야 한다. 운영체제 자체도 하나의 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라간다. 하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 한정된 메모리 공간의 낭비가 심할 것이다. 따라서, 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때 메모리로 올려서 사용하게 된다. 이 때, 메모리에 상주하는 운영체제의 부분을 커널(kernel)이라고 부르며 이를 좁은 의미의 운영체제라고도 부른다. 즉, 커널은 운영체제 코드 중에서도 핵심적인 부분을 뜻한다.

 

=> 핵심 부분인 커널(kernel)은 메모리에 상주하고, 나머지 부분은 필요할 때 메모리에 올려서 사용!

 

▶ 운영체제의 기능

1. 컴퓨터 시스템 내의 자원을 효율적으로 관리

2. 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공

 

▶ 운영체제의 자원관리 기능

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

 

=> 프로세스들이 자원(CPU, 메모리 등)을 효율적으로 나누어 쓸 수 있도록 관리하는 것!

 

▶ 운영체제의 자원관리 기능 : CPU

일반적인 컴퓨터에는 CPU가 하나밖에 없지만 프로세스는 여러 개가 동시에 실행이 된다. 그러므로 매 시점 어떠한 프로세스에게 CPU를 할당해 작업을 처리할 것인지를 결정하는 일이 필요하다. 이러한 일을 CPU 스케줄링이라고 한다. CPU 스케줄링의 목표는 CPU를 가장 효율적으로 사용하면서도, 특정 프로세스가 불이익을 당하지 않도록 하는 것이다.

대표적인 CPU 스케줄링 기법으로 선입선출(FCFS : First Come First Served), 라운드 로빈(Round Robin), 우선순위(priority) 기법이 있다.

CPU 스케줄링 : 선입선출 기법

선입 선출 기법은 먼저 CPU를 사용하기 위해 도착한 프로세스를 먼저 처리해 주는 방식을 말한다. 우리의 일상 생활에서 줄서기를 하는 것과 유사하다. 이 방식에서는 CPU를 필요로 하는 프로세스가 여럿 있을 때 먼저 CPU를 요청한 프로세스가 원하는 작업을 완료할 때까지 다른 프로세스들이 CPU를 사용하지 못하게 된다. 이러한 선입선출 기법의 단점을 보완하고자 고안된 기법이 라운드 로빈 기법이다.

CPU 스케줄링 : 라운드 로빈

라운드 로빈 기법에서는 CPU를 한 번 할당받아 사용할 수 있는 시간을 일정한 고정된 시간으로 제한한다. 그래서 긴 작업을 요하는 프로세스가 CPU를 할당받더라도 정해진 시간이 지나면 CPU를 내어놓고 CPU의 서비스를 기다리는 줄의 제일 뒤에 가서 기다려야 한다.

CPU 스케줄링 : priority

우선순위(priority) 스케줄링에서는 수행 대기중인 프로세스들에게 우선순위를 부여하고 우선순위가 높은 프로세스에게 CPU를 먼저 할당하게 된다. 시스템 내의 프로세스 중에는 상대적으로 더 중요한 프로세스가 있을 수 있으므로 그런 프로세스에게 우선순위를 높게 하여 CPU를 먼저 획득할 수 있도록 한다.

▶ 운영체제의 자원관리 기능 : 메모리

운영체제의 또 다른 관리 대상으로 메모리를 들 수 있다. 메모리는 CPU가 직접 접근할 수 있는 컴퓨터 내부의 기억 장치이다. 프로그램이 CPU에서 수행되려면 해당 부분이 메모리에 올라가 있어야 한다. 한정된 메모리 공간에 여러 프로그램을 수용하려면 메모리에 대한 효율적인 관리 메커니즘이 필요하다. 운영체제는 프로그램에게 메모리가 필요할 때 할당하고, 더 이상 필요하지 않게 될 때 회수한다.

또한 다수의 사용자 프로그램이 동시에 메모리에 올라간 경우 서로 다른 프로세스의 영역을 침범하지 않도록 보안을 유지하는 역할도 운영체제의 몫이다. 즉, 운영체제는 각 프로세스가 자신의 메모리 영역만을 접근할 수 있도록 관리해야 한다.

물리적 메모리를 관리하는 방식에는 고정 분할 방식, 가변 분할 방식, 가상 메모리 방식이 있다. 이 중 가상메모리 기법은 최근 거의 모든 컴퓨터 시스템에서 사용하는 메모리 관리 기법이다.

가상 메모리 기법

모든 프로그램은 물리적 메모리와는 독립적으로 주소가 0부터 시작하는 자신만의 가상 메모리를 갖게 된다. 운영체제는 가상 메모리의 주소를 물리적 메모리 주소로 매핑하는 기술을 이용해 주소를 변환시킨 후 프로그램을 물리적 메모리에 올리게 된다. 가상 메모리 기법에서는 물리적 메모리의 크기와 상관 없이 사용할 수 있는 메모리의 크기를 충분히 크다고 가정하고 프로그래밍을 할 수 있다. 이것을 가능하게 하는 원리는 다음과 같다. 프로그램의 전체 크기가 만약 20MB라고 하면 그렇다 할지라도 전체가 항상 동시에 사용되는 것은 아니다. 그러므로 현재 사용되고 있는 부분만 메모리에 올리고, 나머지는 하드 디스크와 같은 보조 기억 장치에 저장해 두었다가 필요할 때 적재하는 방식을 취한다. 이 때 사용하는 보조 기억 장치의 영역을 스왑 영역(swap area)이라고 부른다. 프로그램을 구성하는 주소 공간은 페이지라는 동일한 크기의 작은 단위로 나뉘어 물리적 메모리와 스왑 영역에 일부분씩 저장된다. 이렇게 동일한 단위로 메모리를 나누는 기법을 페이징 기법이라고 한다.

 

▶ 운영체제의 자원관리 기능 : 주변장치

주변장치 및 입출력 장치는 CPU나 메모리와 달리 인터럽트라는 매커니즘을 통해 관리하게 된다. 주변 장치들은 CPU의 서비스가 필요한 경우에 신호를 발생시켜 서비스를 요청하게 되는데, 이때 발생시키는 신호를 인터럽트라고 한다. CPU는 평소에 CPU 스케줄링에 따라 자신에게 주어진 작업을 수행하고 있다가 인터럽트가 발생하면 하던 일을 멈추고 인터럽트에 의한 요청 서비스를 수행하게 된다. 운영체제는 인터럽트를 처리한 후에 원래 수행하던 작업으로 돌아오기 위해 인터럽트 처리 직전에 수행중이던 작업의 상태를 저장해 둔다.

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

한편, 주변 장치들은 각 장치마다 그 장치에서 일어나는 업무에 대한 관리를 위한 일종의 작은 CPU를 가지고 있다. 이를 우리는 컨트롤러라고 부른다. 컨트롤러는 해당 장치에 대한 업무를 처리하고 이를 메인 CPU에 인터럽트를 발생시켜 보고하는 역할을 한다.

+ Recent posts