역할

운영체제는 컴퓨터 하드웨어와 응용 프로그램 사이의 인터페이스 역할을 하며, CPU와 메모리 같은 컴퓨터 자원을 관리하고 사용자에게 편의를 제공한다. 컴퓨터 시스템은 일반적으로 사용자, 소프트웨어, 하드웨어라는 세 요소로 구분된다.

운영체제는 세 가지 역할을 동시에 수행한다. 조정자로서 하드웨어, 소프트웨어, 프로그램, 데이터 같은 여러 운영 요소를 적절히 사용할 수 있도록 시스템을 제어한다. 다만 다른 프로그램이 작업할 수 있는 환경만 제공할 뿐, 직접 일을 하지는 않는다. 자원 할당자·관리자로서 프로세서 시간, 메모리 공간, 파일 저장 공간, 입출력 장치 같은 자원을 시스템에 배분하며, 이를 공정하고 효율적으로 배분하는 방법을 결정하는 관리자 역할도 맡는다. 입출력 장치·사용자 프로그램 제어자로서 시스템의 부적절한 사용이나 오류를 막기 위해 사용자 프로그램의 실행을 통제하고, 입출력 장치를 동작시키고 관리한다.

기능

운영체제는 하드웨어와 사용자 사이의 인터페이스를 정의하고, 사용자들이 하드웨어를 공동으로 사용할 수 있게 하며, 사용자 간 자원 스케줄링과 할당을 담당하고, 입출력 보조와 오류 처리를 수행한다.

운영체제의 역할과 기능은 매우 다양해 한마디로 완벽히 정의하기는 어렵다.

일반적인 정의

컴퓨터 자원을 통제하고 할당하는 공통 기능을 하나의 소프트웨어로 통합한 것이 운영체제다.

구체적인 정의

컴퓨터 시스템에서 항상 실행되는, 응용 프로그램을 제외한 모든 프로그램을 커널이라 부른다. 커널은 운영체제의 핵심으로, 메모리에 상주하며 운영체제의 다른 부분이나 응용 프로그램이 실행되는 데 필요한 환경을 설정하는 소프트웨어다. 응용 프로그램 실행에 필요한 다양한 서비스를 제공하고, 실행된 프로세스를 스케줄링하는 역할도 맡는다.

목적

운영체제의 목적은 크게 두 가지다. 사용자에게 편리한 환경을 제공하는 것(편리성)과 시스템 성능을 향상시키는 것(효율성)이다. 후자는 구체적으로 처리 능력 향상, 신뢰도 향상, 응답 시간 단축, 사용 가능도 향상으로 나타난다.

기능의 발전

운영체제의 기능은 하드웨어의 발전과 맞물려 성장했다. 카드 판독기, 라인 프린터, 자기테이프가 보편화되면서 어셈블러, 로더, 링커가 개발되었고, 공통 기능을 매번 새로 작성하지 않고 프로그램에 삽입할 수 있는 라이브러리가 등장했다. 포트란, 코볼 같은 컴파일러도 개발되었는데, 프로그래밍 업무 자체는 쉬워졌지만 컴퓨터의 실제 동작은 오히려 복잡해졌다. 예를 들어 포트란 컴파일러는 8단계의 어셈블리 과정을 거쳐야 했고, 이 때문에 준비 시간이 길어져 시간 낭비가 심했다.

초기의 일괄 처리 시스템에서는 작업 중 문제가 생기면 오퍼레이터가 콘솔을 직접 조사해 사태를 파악하고 조치해야 했는데, 이 과정에서 프로세서가 유휴 상태로 남는 문제가 있었다. 이를 개선하기 위해 자동으로 작업에서 작업으로 진행을 제어하는 상주 모니터제어 카드가 도입되었고, 카드 판독기와 라인 프린터는 자기 테이프 장치로 대체되면서 오프라인 처리, 오프라인 연산장치, 버퍼링, 스풀링 같은 기법이 자리 잡았다. 초기 컴퓨터 시스템은 속도가 느려 온라인 판독기와 프린터에 크게 의존했고, 종이 테이프나 펀치 카드에서 메모리로 프로그램을 적재한 뒤 시작 주소를 설정해 실행했으며, 그 과정은 콘솔로 직접 확인해야 했다.

다중 프로그래밍

다중 프로그래밍은 작업 스케줄에서 가장 중요한 개념으로, 프로세서가 항상 수행할 작업을 갖도록 해 이용률을 끌어올린다. 운영체제는 메모리에 있는 작업 중 하나를 골라 실행을 시작하는데, 작업이 어떤 이벤트를 기다려야 할 때 비(非) 다중 프로그래밍 시스템이라면 프로세서가 유휴 상태에 빠지지만, 다중 프로그래밍 시스템에서는 운영체제가 곧바로 다른 작업으로 전환해 처리한다. 기다림이 끝나면 프로세서를 다시 넘겨받고, 수행할 작업이 이미 메모리에 적재되어 있다면 프로세서는 계속 바쁘게 돌아간다. 다중 프로그래밍 운영체제는 상당히 복잡한데, 여러 작업을 준비 상태로 유지하려면 이를 메모리에 보관해야 하므로 별도의 메모리 관리가 필요하고, 여러 작업이 동시에 준비되어 있을 때 그중 하나를 고르는 결정 방법도 마련해야 한다.

시분할 시스템

시분할 시스템은 다중 프로그래밍을 논리적으로 확장한 개념으로, 프로세서가 여러 작업을 교대로 수행한다. 사용자가 프로그램을 실행하는 동안 자신의 프로그램과 계속 상호작용할 수 있도록 이 교대가 매우 빈번하게 일어난다. 프로세서 스케줄링과 다중 프로그래밍을 함께 활용해 각 사용자에게 컴퓨터를 시간적으로 분할해 나눠주는 방식이다. 각 사용자는 메모리에 독립된 프로그램을 가지며, 프로그램은 입출력을 수행하는 아주 짧은 시간 동안만 실행되어 많은 사용자가 컴퓨터 하나를 공유할 수 있다. 트랜잭션 하나하나가 짧기 때문에 각 사용자는 짧은 시간만 프로세서를 사용한다. 1970년대 초까지는 일반화되지 못했지만, 오늘날의 시스템은 대부분 일괄 처리 방식과 시분할 방식을 함께 제공한다. 여러 작업이 메모리에 함께 저장되어 있으면 한 작업이 다른 작업의 데이터를 건드리는 문제를 막을 보호 장치가 필요하고, 여러 사용자가 접근하는 파일에는 권한을 두어 허가된 사용자만 접근하도록 보호해야 하며, 공유 자원의 접근 순서를 조정하는 기능도 갖춰야 한다.

일괄 처리 시스템

일괄 처리 시스템은 작업을 미리 정의된 제어카드와 함께 읽어들여 완료되면 결과를 출력하는 방식이다. 처리 과정에서 일어날 수 있는 모든 경우에 대비한 제어카드를 미리 마련해야 하므로, 작업을 제출하고 완료되기까지의 반환 시간이 길어질 수 있다. 오류가 나면 당시 상태를 그대로 출력해야 확인할 수 있고, 오류를 고친 뒤에는 처음부터 다시 수행해야 한다.

대화식 입출력

대화식 입출력에서는 출력이 사용자를 위해 화면에 표시되지만, 입력은 키보드로 읽어들이는 만큼 완전히 대화식이 되기는 어렵다. 사람이 입력하는 속도와 맞춰야 하므로 종료까지 시간이 오래 걸리며, 이 시간 동안 운영체제는 프로세서를 다른 사용자의 프로그램으로 돌려쓴다.

다중 처리 시스템

다중 처리 시스템은 마이크로프로세서 여러 개를 연결해 만든 시스템으로, 프로세서를 여러 개 사용해 신뢰성, 가용성, 처리 능력을 함께 끌어올린다. 하드웨어 비용이 낮아지면서 단위 시간당 처리량을 늘리기 위해 널리 쓰이게 되었고, 고가의 초고속 프로세서 없이도 대형 컴퓨터에 근접하는 계산 능력을 낼 수 있다. 다중 처리를 위한 운영체제 구성에는 비대칭적(주/종) 구성과 대칭적 구성이 있다. **주/종 다중 처리 시스템(Master/Slave Multi Process System)**은 비대칭적 구성의 하나로, 마스터 프로세서가 주(主)가 되어 부가적인 슬레이브 프로세서들을 관리하는 방식이다.