운영 체제

Emitbreaker (토론 | 기여)님의 2015년 4월 28일 (화) 20:43 판 (→‎목적)

틀:사이드바 Operating System / 운영 체제 / 運營體制 / オペレーティングシステム


운영 체제란 하드웨어소프트웨어자원을 관리하며 시스템에서 사용하는 공용 서비스를 제공하는 소프트웨어로, 시스템 소프트웨어의 일종이다. 아까 컴퓨터 키면서 본 그 로고 말한다.

주된 역할은 블루 스크린을 띄운다 커널 패닉을 일으킨다 얼어붙는다 물리적 장치인 하드웨어와 논리적 개념인 소프트웨어를 이어주는 것이다. 중매쟁이

가상화 기술이 발달한 요즘에는 소프트웨어서 운영체제가 돌아가는 경우도 있다.

기본적으로 시스템 소프트웨어를 포함한 모든 소프트웨어의 코드는 하드웨어 위에서 실행된다. 그러나 소프트웨어 측에서 야동을 재생한다던가, 위키질을 한다던가 하는 특정한 목적으로 입출력이나 메모리 할당과 같은 하드웨어의 기능을 사용하기 위해서는 앞뒤 꽉 막힌 하드웨어가 알아듣도록 특정한 전기적 신호를 보낼 필요가 있다. 물론 개개의 소프트웨어가 직접 전기적 신호를 보낼 수 도 있으나, 복수의 소프트웨어가 동시다발적으로 동작할 경우 상호 간섭으로 인해 예기치 못한 결과를 내거나, 서로간의 효율을 저하시키는 결과를 낳을 수 있다. 이런 비효율을 제거하고, 하드웨어와 소프트웨어의 커뮤니케이션을 원활히 하는 역할을 담당하는 것이 운영 체제인 것이다. 클럽에 온 손님들이 자기 꼴리는대로 음악 바꿔틀면 헬게이트가 열리니 DJ가 알아서 선곡해서 틀어주는 거라고 생각하면 편하다.


개요

초기의 화석 고대 유물컴퓨터들은 계산기처럼 단순 계산 등 특정한 목적을 위해 만들어졌다. 어느 정도이고 하니, 소프트웨어를 설치하기 위해서는 사용자가 직접 케이블을 옮겨 꽃고 스위치의 전원을 바꿔주어 하드웨어가 목적에 맞게 움직이도록 해주어야 하는 지경이었다. 커피 마시자고 농장부터 짓는다고 생각하면 편하다.

그러던 것이 폰 노이만내장 프로그램이라는 개념을 발명하면서 운영 체제 역시 본격적으로 발달하기 시작한다. 즉, 최초의 운영 체제란 사람이 수작업으로 케이블을 갈아 끼워 전자적 신호의 방향을 바꿔주던 것을 컴퓨터 내부에서 자체적으로 처리하기 위해 개발된 것이다. 커피 농사 짓다가 빡쳐서 자판기를 들여다 놓았다 (...)

이후 하드웨어와 소프트웨어가 발달함에 따라 운영 체제 역시 점점 더 많은 기능을 필요로 하게 되었고, 이에 따라 런타임 라이브러리, 인터럽트, 병렬 처리와 같은 기능들이 차례로 추가되었다. 또한 운영 체제를 이용하는 측의 편의를 위해 사용자 인터페이스 (User Interface, UI) 및 API (Application Programming Interface) 등도 차례로 추가, 발전하였다. 심심해서 위키위키를 접한 사람이 위키니트가 되고 위키페어리로 진화하는 과정을 생각하면 편하다.

현대 사회에서 운영 체제의 역할은 매우 커, 컴퓨터서버 같은 당연한 예외는 생략하더라도 스마트폰이나 게임기는 물론, 자동차엔진이나 TV에 이르기까지 전자 기기를 사용하는 거의 모든 제품에 탑재되어 있다고 해도 과언이 아니다.

목적

운영 체제의 중요한 목적으로는 다음을 들 수 있다.

  • 하드웨어 추상화
각 컴퓨터마다 사용하는 하드웨어에는 크고 작은 차이가 있다. 이러한 차이를 응용 프로그램이 직접 대응하려고 하면 극단적인 경우 세상에 존재하는 컴퓨터 댓수만큼의 변수를 처리할 필요가 있다. 그러한 비효율을 막기 위해 운영 체제가 하드웨어와 응용 프로그램 사이에 끼어 중재해 줌으로서 응용 프로그램 개발의 편의성을 증진시켜 준다.
위키니트들이 효율적으로 위키분을 섭취하기 위해 위키위키가 존재한다고 생각하면 편하다.
  • 자원 관리
개개의 컴퓨터에서 사용할 수 있는 자원은 제한되기 마련이다. 그런 제한된 자원 속에서 운영 체제가 자원을 적절히 할당하고 관리, 보호해 줌으로서 인해 다수의 응용 프로그램을 효율적으로 사용할 수 있다.
위키페어리들이 적절히 항목을 작성하고 반달을 막아줌으로서 위키니트들이 위키분 부족에 시달리지 않는다고 생각하면 편하다.
  • 컴퓨터의 효율적 이용
운영 체제는 제어 프로그램으로서 사용자 프로그램이 사용하는 자원의 이용 순서나 이용 시간을 제어한다. 이를 통해 시스템 전체의 처리율을 향상시켜 컴퓨터를 보다 효율적으로 사용할 수 있게 한다.
위키페어리들이 적절한 넘겨주기 문서나 항목 내 링크를 작성해 줌으로서 위키니트들이 보다 효율적으로 위키질을 할 수 있다고 생각하면 편하다.

대표적인 운영체제

실질적으로는 무척 다양한 수의 운영 체제가 존재하나, 크게 분류하면 다음의 세 종류로 나뉘어진다고 볼 수 있다.

비교적 일반적인 유저들도 접하기 쉬운 어디가? 상기 운영 체제들 이외에도 다음과 같은 OS도 존재한다.


구성 요소

운영 체제를 이루는 요소는 컴퓨터의 다른 부분들과 함께 동작하게 만들기 위하여 존재한다. 금융 데이터베이스부터 영화 편집 프로그램에 이르기까지 소프트웨어는 모두 소프트웨어에 쓰이는 하드웨어가 단순히 마우스나 키보드만 이용하든지 아니면 인터넷 연결같이 복잡한 방식을 이용하든지 상관 없이 하드웨어를 이용하기 위하여 운영 체제로 말미암아 실행해야 한다.

커널

커널이 응용 소프트웨어를 컴퓨터 하드웨어에 연결하고 있다.

펌웨어장치 드라이버의 도움을 받아 운영 체제는 모든 컴퓨터 하드웨어 장치에 대한 가장 기초 수준의 제어권을 제공한다. 커널은 을 통해 프로그램을 위한 메모리 접근을 관리하며 어느 프로그램이 어느 하드웨어 자원에 접근할지를 결정하며 CPU의 동작 상태를 늘 최적으로 설정 및 초기화하고 디스크, 테이프, 플래시 메모리와 같은 매체의 파일 시스템을 갖춘 장시간 비휘발성 기억 장치를 위한 데이터를 정리한다. 운영 체제 내에서의 커널의 영역과 그 구성에 따라 모노리딕 커널(monolithic kernel), 마이크로 커널(micro kernel)등으로 분류한다.

프로그램 실행

운영 체제는 응용 프로그램과 하드웨어 사이의 인터페이스 역할을 한다. 운영 체제는 응용 프로그램 개발을 단순하게 하는 서비스의 집합이다. 프로그램을 실행하면 운영 체제가 프로세스를 만든다. 커널은 메모리와 다른 자원을 할당하여 프로세스를 만들며, 이로써 멀티태스킹 환경에서 프로세스에 대한 우선 순위를 확립하고, 메모리에 프로그램 코드를 적재하며 프로그램을 실행한다. 그 뒤 프로그램은 사용자 및 장치와 상호작용한 다음 원하는 명령을 수행하게 된다.

운영 체제는 프로세스[3]들을 생성하거나 삭제하고, 중단시키거나 재개시킨다. 프로세스 간의 동기화와 통신, 교착상태 처리에 관한 메커니즘을 제공한다.

  1. 사용자 및 시스템 프로세스의 생성과 종료 관리
  2. 프로세스의 일시 중지와 속개
  3. 프로세스 동기화를 위한 수단의 제공
  4. 프로세스간 통신을 위한 수단의 제공
  5. 교착 상태 처리를 위한 수단의 제공

인터럽트

인터럽트는 주변 환경에 반응하고 상호작용하는 데에 효율적인 방법을 운영 체제에 제공하므로 운영 체제에 핵심적인 역할을 한다고 할 수 있다.

모드

보호 모드에서 사용할 수 있는 x86용 권한 링. 운영 체제는 어느 프로세스가 개별 모드에서 실행할 것인지 결정한다.

현대의 CPU는 여러 모드의 명령을 지원한다. 이러한 기능을 지원하는 CPU에는 두 가지 모드가 있다: 보호 모드, 수퍼바이저 모드. 수퍼바이저 모드는 메모리의 기록 및 삭제 방식을 제어하는 것과 그래픽 카드와 같은 장치와 통신하는 것과 같이 운영 체제의 커널이 하드웨어에 제한 없이 액세스해야 하는 낮은 수준의 태스크를 위해 사용한다. 반대로 보호 모드는 그 밖의 거의 모든 용도로 사용된다. 응용 프로그램들은 보호 모드 안에서 동작하며, 수퍼바이저 모드의 모든 것을 제어하는 커널과 통신해야만 하드웨어를 이용할 수 있다. CPU는 오래된 프로세서를 가상으로 구현하기 위한 가상 모드와 같이 보호 모드와 비슷한 다른 모드들을 지니고 있을 수도 있다. (이를테면 32비트에서 16비트 프로세서를, 아니면 64비트에서 32비트 프로세서를 가상으로 구현할 때)

컴퓨터가 처음 시동할 때 자동으로 수퍼바이저 모드에서 실행된다. 컴퓨터를 켜자마다 먼저 실행되는 몇 안 되는 프로그램들이 바이오스부트로더이며 운영 체제는 하드웨어에 제한 없이 접근한다. 그리고 운영 체제가 다른 프로그램에 대한 제어권을 보낼 때 CPU를 보호 모드에 놓을 수 있다.

메모리 관리

멀티프로그래밍 운영 체제 커널은 현재 프로그램이 이용하는 모든 시스템 메모리를 관리해야 한다. 이로써 어느 특정한 프로그램이 다른 프로그램이 이미 사용하고 있는 메모리와 상호 작용하지 않게 한다. 프로그램이 시분할하므로 각 프로그램은 메모리에 독립적으로 접근해야 한다.

가상 메모리

수많은 운영 체제는 하드 디스크와 램에 분산된 메모리를 이용하여 마치 가상 메모리로 불리는 메모리 덩어리가 연속적인 것처럼 프로그램을 속일 수 있다.

페이징이나 세그먼테이션과 같은 가상 메모리 어드레싱을 이용하면 커널은 어느 메모리를 각 프로그램이 주어진 시간에 사용할 수 있게 할지 설정할 수 있다. 그러므로 운영 체제가 여러 개의 태스크에 같은 메모리 위치를 사용할 수 있게 한다.

프로그램이 접근할 수 있는 메모리 범위에 없는 메모리에 접근하려고 하지만 그곳에 할당되면 커널은 프로그램이 마치 할당된 메모리를 초과 사용한 것과 같은 방식으로 인터럽트 처리한다. 유닉스에서 이러한 종류의 인터럽트를 페이지 실패라고 부른다. 커널이 페이지 실패를 감지하면 이러한 문제를 일으킨 프로그램의 가상 메모리 영역을 수정하는 것이 일반적이다. 이로써 요청된 메모리에 프로그램이 접근할 수 있게 한다.

현대의 운영 체제에서 자주 접근하지 않는 메모리는 일시적으로 디스크나 다른 매체에 저장하여 다른 프로그램에게 사용할 수 있는 공간을 제공해 준다. 이를 스왑 처리(swapping)라고 하며 이를 통해 여러 개의 프로그램이 특정한 메모리 영역을 차지할 수 있다.

멀티태스킹

멀티태스킹은 여러 개의 독립적인 컴퓨터 프로그램을 하나의 컴퓨터에 실행시키는 것을 가리킨다. 마치 태스크들이 동시에 수행하는 것처럼 보여 준다. 대부분의 컴퓨터가 한 번에 최대 한 두개를 수행할 수 있고 이는 일반적으로 시분할을 통해 수행된다. 다시 말해 각 프로그램은 컴퓨터의 실행 시간의 일부를 사용한다.

운영 체제 커널스케줄러라는 프로그램이 포함되어 있는데 이 프로그램은 얼마나 많은 시간을 각 프로그램이 실행에 소비하게 할 것인지를 결정하며 여기서 실행 제어권이 프로그램에 넘어갈 수 있게 한다. 제어권은 프로그램이 CPU와 메모리에 접근할 수 있게 하는 커널로 말미암아 프로세스로 넘어간다. 나중에 다른 프로그램이 CPU를 사용할 수 있게 하기 위해 제어권은 같은 메커니즘을 통하여 커널로 반환된다. 커널과 응용 프로그램 간의 제어권 이동을 이른바 문맥 교환이라고 부른다.

디스크 접근 및 파일 시스템

파일 시스템은 디렉터리(폴더)를 이용하면서 사용자와 프로그램이 컴퓨터 파일을 정리하고 정렬할 수 있게 해 준다.

디스크에 저장된 데이터로 접근하는 것은 모든 운영 체제의 기본 기능이다. 컴퓨터는 더 빠른 접근, 더 높은 신뢰성을 위해, 또 드라이브의 남은 공간을 더 잘 이용하기 위한 특정한 방식으로 구조화된 파일을 이용하여 디스크에 데이터를 저장한다. 파일을 디스크에 저장하는 이러한 방식을 파일 시스템이라고 부르며 파일이 이름과 특성을 가질 수 있게 한다. 또, 이러한 파일들을 디렉터리 트리로 정렬되는 특정 계급의 디렉터리와 폴더에 저장하게 한다.

초기의 운영 체제는 일반적으로 한 종류의 디스크 드라이브와 한 종류의 파일 시스템을 지원하였다. 초기의 파일 시스템들은 용량, 속도, 또 파일 이름과 디렉터리 구조의 종류에 제한이 있었다. 이러한 제한은 설계된 운영 체제의 제한에 반영되므로 특정한 운영 체제가 하나 이상의 파일 시스템을 지원하는 것을 매우 어렵게 만들었다.

더 단순한 수많은 운영 체제들은 기억 장치의 시스템에 접근하기 위한 제한된 옵션들을 지원하였는데, 유닉스GNU/리눅스와 같은 운영 체제들은 가상 파일 시스템(VFS)이라는 기술을 지원한다. 유닉스와 같은 운영 체제는 공통 API를 통해 접근하는 파일 시스템이나 디자인에 관계 없이 다양한 기억 장치를 지원한다. 그러므로 프로그램을 개발할 때 장치 접근에 대한 정보를 공부하지 않아도 되게 한다. VFS는 다양한 파일 시스템에, 특정한 장치 드라이버와 파일 시스템 드라이버를 사용하여 프로그램들이 무제한의 장치에 접근할 수 있는 기능을 운영 체제에 제공한다.

연결된 하드 드라이브와 같은 기억 장치들은 장치 드라이버를 통해 접근한다. 장치 드라이버는 드라이브의 특정한 언어를 이해하고 이 언어를 운영 체제가 모든 디스크 드라이브에 접근할 때 사용하는 표준 언어로 번역할 수 있다. 유닉스에서 이를 블록 장치의 언어라고 한다.

장치 드라이버

장치 드라이버는 하드웨어 장치들과 상호 작용할 수 있도록 개발된 특정한 종류의 컴퓨터 소프트웨어이다.

네트워킹

현재 대부분의 운영 체제는 다양한 통신 프로토콜, 하드웨어, 응용 프로그램을 지원한다. 다시 말해, 서로 비슷하지 않은 운영 체제를 실행하는 컴퓨터가 자원(유무선 연결을 이용한 연산, 파일, 프린터, 스캐너)을 공유하기 위해 같은 에 참여할 수 있다. 네트워크는 컴퓨터의 운영 체제가 원격 컴퓨터의 자원에 접근하는 데 필수적이다. 마치 리소스가 로컬 컴퓨터에 바로 연결되어 있는 것처럼 보이게 만들어 준다. 여기에는 컴퓨터의 그래픽, 사운드 하드웨어를 공유하거나 네트워킹 파일 시스템을 이용하는 등 단순한 통신에서 나오는 모든 것을 포함한다. 일부 네트워크 서비스는 컴퓨터의 자원을 투명하게 접근할 수 있게 한다. 이를테면 SSH는 네트워크로 이어진 사용자들이 컴퓨터의 명령 줄 인터페이스에 직접 접근할 수 있게 한다.

보안

컴퓨터의 보안은 수많은 기술이 올바르게 동작하고 있는 지에 달려 있다. 또, 운영 체제는 보안을 위하여 특정 환경에 대한 권한을 사용자나 프로그램에 개별적으로 설정하고 인증 프로세스를 제공한다. 인터넷 보안은 특히 여러 사용자가 사용하는 시스템에 적절하다. 시스템을 사용하는 각 사용자는 개인 파일을 다른 사용자가 읽을 수 없게 할 수 있다.

사용자 인터페이스

명령 줄의 한 예. 각 명령어는 프롬프트 뒤에서 입력하면 되며 이에 대한 출력은 아래에 나타난다. 현재의 명령 프롬프트가 아래에 있다.
그래픽 사용자 인터페이스의 한 예. 프로그램들은 화면 위에 그림의 모습을 띠고 있으며 파일, 폴더, 응용 프로그램들은 아이콘과 기호의 모습을 띤다. 마우스는 컴퓨터를 탐색하는 데 쓰인다.

어떠한 종류의 입력을 받는 모든 컴퓨터는 사람이 컴퓨터와 소통할 수 있게 하는 사용자 인터페이스가 필요하다. 키보드, 마우스와 같은 장치들이 이러한 역할을 하지만 사용자 인터페이스는 이를 위한 소프트웨어로 이루어진다. 사용자 인터페이스는 역사적으로 컴퓨터 명령어를 한 줄씩 입력해 나가는 명령 줄 인터페이스와 일반적으로 창, 단추, 아이콘을 이루는 시각 환경이 존재하는 그래픽 사용자 인터페이스로 나뉜다.

그래픽 사용자 인터페이스

현대의 대부분의 컴퓨터 운영 체제는 그래픽 사용자 인터페이스(GUI)를 지원한다. 마이크로소프트 윈도맥 OS와 같은 일부 컴퓨터 시스템에서 GUI는 커널에 통합되어 있다.

기술적으로 그래픽 사용자 인터페이스는 운영 체제의 서비스가 아니지만 운영 체제 커널에 통합하면 GUI가 출력 명령을 수행하는 데 필요한 수많은 문맥 교환을 없앰으로써 GUI를 더 반응적으로 만들 수 있다. 다른 운영 체제로는 그래픽 하부 시스템을 커널과 운영 체제로부터 분리시키는 모듈성이 있다. 1980년대 유닉스에서 VMS 등은 이러한 방식으로 만들어진 운영 체제였다. GNU/리눅스 및 맥 OS X 또한 이러한 방식을 취한다. 윈도 비스타와 같은 현대의 마이크로소프트 윈도는 거의 사용자 공간에 위치한 그래픽 하부 시스템을 포함하고 있지만 윈도 NT 4.0윈도 서버 2003 버전 사이의 그래픽 구현 루틴은 거의 커널 공간에 존재한다. 윈도 9x는 인터페이스와 커널 사이의 구별이 거의 없다.

수많은 컴퓨터 운영 체제는 사용자가 원하는 인터페이스를 만들어 설치할 수 있게 하고 있다. X 윈도 시스템GNOME이나 KDE와 함께 쓰면 유닉스 및 유닉스 계열 시스템에서 이러한 설정을 할 수 있다. 수많은 윈도 셸 치환을 통해 마이크로소프트 윈도에서도 이러한 작업을 수행할 수 있는데, 윈도 셸을 교체하는 방식을 쓰지만 윈도로부터 셸 자체를 분리할 수는 없다.

실시간 운영 체제

실시간 운영 체제 (RTOS)는 정해진 기간 안에 수행이 끝나야 하는 응용 프로그램을 위하여 만들어진 멀티태스킹 운영 체제이다. (실시간 연산) 이러한 응용 프로그램들에는 조그마한 임베디드 시스템, 자동차 엔진 제어 장치, 산업 로봇, 우주선, 산업 제어 장치, 일부 대형 컴퓨터 시스템 등이 있다.

초기의 대형 실시간 운영 체제는 이를테면 아메리칸 항공IBM사브레 항공 예약 시스템을 위하여 개발한 트랜젝션 프로세싱 퍼실리티(TPF)가 있다.

일부 임베디드 시스템은 실시간 연산을 지원하지 않더라도 심비안 OS, 팜 OS, BSD, GNU/리눅스와 같은 운영 체제를 이용한다.

취미 활동을 통한 운영 체제 개발

운영 체제 개발은 컴퓨팅에 취미를 둔 사람들이 관여하는 가장 복잡한 활동들 가운데 하나이다. 취미로 만드는 운영 체제는 기존의 운영 체제로부터 직접적으로 코드를 가져오지 않은 것으로 분류될 수 있으므로, 사용자들과 활동 개발자들의 수는 적은 편이다.[4]

취미 활동으로 개발된 운영 체제의 예로는 ReactOSSyllable 등이 있다.

범위 및 논란

운영 체제는 잘 정의된 인터페이스를 가지므로 운영 체제와 응용 프로그램 간의 구분은 명확하지만, 어느 정도의 서비스를 운영 체제 안에 포함시켜야 하는가에 대한 문제는 기술적인 문제일뿐만 아니라 사업적인 문제이기도 하다. 이 문제는 다음의 경우에 분명히 드러난다. 1998년 미국 법무부마이크로소프트에 대해 소송을 제기하였는데, 요점은 마이크로소프트가 운영 체제에 너무 많은 기능을 포함시켜 응용 프로그램 제작업체들에게 피해를 주었다는 것이다.

같이 보기

바깥 고리

틀:Commons category

각주

  1. 사실 넓게 보면 이쪽도 UNIX / Linux 계열에 속한다.
  2. 보다 자세한 유닉스 / 리눅스의 계보는 이곳]을 참조할 것.
  3. 어떠한 프로그램 파일들이 준비 상태나 대기 상태로 실행되기 전에 적재되는 것
  4. My OS is less hobby than yours. 《Osnews》, (2009년 12월 21일). 2009년 12월 21일에 확인.