운영 체제: 두 판 사이의 차이

(→‎사용자 인터페이스: 이젠 그 문서가 없습니다.)
124번째 줄: 124번째 줄:
=== 인터페이스 ===
=== 인터페이스 ===
==== 사용자 인터페이스 ====
==== 사용자 인터페이스 ====
{{본문|사용자 인터페이스}}
[[파일:Command line.png|thumb|225px|명령 줄의 한 예. 각 명령어는 프롬프트 뒤에서 입력하면 되며 이에 대한 출력은 아래에 나타난다. 현재의 명령 프롬프트가 아래에 있다.]]
[[파일:Command line.png|thumb|225px|명령 줄의 한 예. 각 명령어는 프롬프트 뒤에서 입력하면 되며 이에 대한 출력은 아래에 나타난다. 현재의 명령 프롬프트가 아래에 있다.]]
[[파일:KDE 4.png|thumb|225px|그래픽 사용자 인터페이스의 한 예. 프로그램들은 화면 위에 그림의 모습을 띠고 있으며 파일, 폴더, 응용 프로그램들은 아이콘과 기호의 모습을 띤다. 마우스는 컴퓨터를 탐색하는 데 쓰인다.]]
[[파일:KDE 4.png|thumb|225px|그래픽 사용자 인터페이스의 한 예. 프로그램들은 화면 위에 그림의 모습을 띠고 있으며 파일, 폴더, 응용 프로그램들은 아이콘과 기호의 모습을 띤다. 마우스는 컴퓨터를 탐색하는 데 쓰인다.]]

2018년 8월 12일 (일) 20:13 판

운영체제(運營體制, Operating System)는 하드웨어소프트웨어자원을 관리하고, 시스템에서 사용하는 공용 서비스를 제공하는 소프트웨어이다. 또한 시스템 소프트웨어의 일종이다. 약칭은 OS.

역할

주된 역할은 물리적 장치인 하드웨어와 논리적 개념인 소프트웨어를 이어주는 것이다.

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

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

클럽에 온 손님들이 자기 꼴리는대로 음악 바꿔틀면 헬게이트가 열리니 DJ가 알아서 선곡해서 틀어주는 거라고 생각하면 편하다.

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

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

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

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

목적

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

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

대표적인 운영체제

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

Microsoft Windows

더 이상의 자세한 설명은 생략한다

UNIX-like

보다 자세한 유닉스 / 리눅스의 계보는 이곳을 참조할 것.

Linux

기타

구성 요소

여기서부터 본격적으로 골때려지기 시작한다. 컴덕이 아닌 위키러들은 읽는 것을 그만두도록 하자 서두에서 언급한 대로, 운영 체제는 하드웨어와 소프트웨어의 자원을 관리함과 동시에 사용자나 응용 소프트웨어에 대해 공용 서비스 (Common Services)를 제공하는 것이 주된 기능이다. 초창기의 운영 체제는 컴퓨터 자체의 하드웨어 및 소프트웨어적 단순함으로 인해 비교적 단순한 구조를 가지고 있었으나, 현대의 운영 체제는 복수의 소프트웨어들로 이루어진 거대한 소프트웨어군(群) 이라 해도 과언이 아니다.

커널

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

커널이란 하드웨어소프트웨어 간을 이어주는 역할을 하는, 대다수의 운영 체제의 중핵을 이루는 부분이다.[1]

커널의 주된 임무는 위에서 언급한 대로 CPU, RAM, 입출력 (Input /Output, I/O) 등의 하드웨어 추상화로, 커널을 통함으로서 애플리케이션은 하드웨어의 종류나 구성에 구속되지 않고 다양한 시스템 상에서 가동할 수 있다. 또 다른 커널의 주된 임무로는 애플리케이션의 편의를 위해 프로세스의 추상화 및 프로세스 간의 통신, 시스템 콜 등의 기능을 제공하는 것을 들 수 있다.구글이나 네이버가 있기에 인터넷 상의 여기저기에 흩어진 정보를 손쉽게 찾아 사용할 수 있는 거랑 비슷하다고 생각하면 편하다.

커널의 주된 기능으로는 다음을 들 수 있다.

  • 프로세스 관리
프로세스는 응용 프로그램이 액세스 할 메모리 영역을 정의한다. 커널에 있어서 프로세스 관리란, 응용 프로그램이 사용할 어드레스 공간을 할당하고, 해당 응용 프로그램의 코드를 지정된 어드레스 공간에 로드하며, 로드된 코드에 대한 콜 스택을 설정한 다음 해당 프로그램의 적절한 위치에 제어를 넘겨주기까지의 처리 과정을 뜻한다.
멀티 태스킹이 가능한 커널의 경우, 위의 관리에 더해 각 프로세스가 처리될 순서를 결정하고 처리의 타이밍을 지정해, 마치 복수의 프로세스가 동시에 작동하는 것처럼 보이도록 관리한다. 이러한 관리를 스케줄링이라고 부른다.
또한 복수의 프로세스가 서로간에 데이터를 주고받을 수 있도록 프로세스 통신을 제어하는 것 역시 프로세스 관리의 영역에 속한다.
  • 메모리 관리
커널은 시스템의 모든 메모리[2]를 사용하는 것이 가능한 반면, 유저 프로그램은 보안상의 이유 등으로 인해 메모리 사용이 제한된다. 그런 탓에 커널은 한정된 메모리를 각 프로그램에 할당, 시스템의 안정성을 확보하는 동시에 응용 프로그램이 원활하게 작동하도록 한다.
CPU에 가까운 메모리 일수록[3] 연산 속도가 빨라지는 반면, 반대급부로 메모리 자체의 용량은 작아지게 된다. 그렇기에 어느 응용 프로그램의 어떤 처리에 어떤 메모리를 할당하느냐에 따라 응용 프로그램 및 시스템 전체의 성능이 좌우되게 되는데, 이러한 중요한 요소의 제어 역시 커널의 주된 임무 중 하나다.
  • 장치 관리
하드웨어 추상화의 일환으로, 커널은 장치 드라이버와 연동해 컴퓨터에 연결된 장치를 인식하고, 그 장치가 가진 리소스를 하위 소프트웨어에 할당하는 역할을 담당한다. 커널이 표준화된 입출력 포트나 메모리 공간을 확보하고 드라이버가 그 포트와 공간을 사용해 커널에 장치의 정보를 넘겨줌으로서 개개의 응용 프로그램은 하드웨어의 종류에 구애받지 않고 커널에 요구하는 것만으로도 필요한 자원을 사용할 수 있다.
  • 시스템 콜
위의 설명을 보고 어렴풋하게나마 이해했다면 알 수 있듯, 커널은 시스템 전체에서 중요한 역할을 담당하고 있다. 그렇기에 CPU의 설계에 좌우되는 부분은 있으나, 대부분의 경우 보안상의 이유로 커널 공간과 유저 공간이 분리되어 있어, 유저 프로세스는 함부로 커널에 액세스 할 수 없도록 되어 있다.[4] 그렇기에 커널은 유저 프로세스가 간접적으로 커널의 기능을 사용할 수 있도록 커널을 호출할 수 있는 기능을 내재하고 있다. 이것이 시스템 콜로, 각 커널의 설계에 따라 다양한 방식이 존재하나, 어느 방식이든 유저 프로세스가 미리 지정된 행동을 하는 것으로 커널어그로를 끌어서 열받은 을 호출할 수 있게 도와준다.

네트워킹

지금 이 항목을 보고 있는 위키러도 그렇겠지만, 현대의 컴퓨터에 있어서 네트워크란 뗄래야 떼어놓을 수 없는 기능이다. 그러나 커널 부분의 설명을 읽은 감이 좋은 위키러라면 눈치챘겠지만, 하드웨어적 구성이 다른 컴퓨터 간에는 기본적으로 물리층 단위에서의 호환성은 없는 것이나 마찬가지다. 이러한 장치 구성이 다른 컴퓨터들을 네트워크로 연결해 주는 것 역시 OS가 가지는 중요한 기능 중 하나이다.

보안

야동을 다양한 방식으로 숨겨본 위키러라면 굳이 설명할 필요도 없겠지만, 운영 체제는 시스템 보안을 위해 사용자 및 프로그램이 시스템에 액세스 할 수 있는 권한을 설정하고 관리하는 역할을 담당한다. 뻑 하면 떠서 사람 빡치게 하는 윈도우즈UAC가 그 대표적인 기능이라 할 수 있다.

인터페이스

사용자 인터페이스

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

사용자 인터페이스(User Interface), 약칭 UI너 나 우리가 지금 보고 있는 화면을 뜻한다.

당연하다면 당연한 이야기지만, 컴퓨터의 내부는 복잡한 실리콘 회로로 이루어져 있고, 그 회로 위를 지나는 전기적 신호를 통해 다양한 연산 과정이 이루어진다. 그러나 사이보그라도 되지 않는 이상 인간의 입장에서는 직접적으로 그러한 전기적 신호를 보낼 수도 없을 뿐더러, 그러한 신호가 어떤 결과를 가져오는지 인식할 수도 없다.

운영 체제는 이러한 키보드마우스 등의 입력 장치를 이용해 인간컴퓨터에게 전기적 신호를 보낼 수 있도록 함과 동시에, 모니터, 스피커 등의 출력 장치를 통해 그러한 전기적 신호가 어떤 결과를 가져오는지 시각, 청각 등의 감각으로 인식할 수 있도록 도와준다.마우스동영상을 더블클릭하면 여러 가지 의미로 눈과 귀를 흐뭇하게 해주는 걸 생각해보자.

이러한 사용자 인터페이스는 크게 문자 사용자 인터페이스(Character User Interface, CUI)[5]그래픽 사용자 인터페이스(Ghrapic User Interface, GUI)로 나뉜다. 보다 알기 쉽게 설명하면 윈도우즈를 부팅했을 때 나오는 화면이 GUI, CMD를 띄웠을 때 나오는 화면이 CUI이다.

응용 프로그램 프로그래밍 인터페이스

애플리케이션 프로그래밍 인터페이스(Application Programming Interface), 약칭 API.

위에서 거듭 설명했듯, 운영 체제는 사용자 뿐만 아니라 응용 프로그램에게도 하드웨어의 구성이나 시스템의 종류에 구애받지 않고 그 시스템이 가지는 다양한 자원 등을 이용할 수 있도록 배려한다. 인간에 대한 배려가 사용자 인터페이스라고 한다면, 애플리케이션(응용 소프트웨어)에 대한 배려가 바로 API이다.

알기 쉽게 설명하면, 이 문서를 보는 위키니트가 자신의 컴퓨터에서 온라인 게임을 실행하든, PC방에서 실행하든, 혹은 친구집 컴퓨터에서 실행하든, 같은 애플리케이션이라면 해당 애플리케이션이 지원하는 한도 내에서 운영체제의 종류나 버전에 상관없이 동일한 결과를 얻을 수 있을 것이다. 이것을 가능하게 하는 기능들의 모음이 바로 API이다.

API는 OS의 종류 등에 따라[6] 다양한 모델이 있으나, 대부분의 API는 함수, 프로시저(Procedure), 변수, 데이터 구조 등으로 구성되며, 거기에 더해 인터프리터 기능을 보유하고 있는 경우도 있다. 일반적으로 프로그래머 입장에서 사용하기 편한 API일수록 추상화가 잘 되어 있어 블랙박스화되어 있기 마련이다.

API의 종류

실시간 운영 체제

실시간 운영 체제 (Real Time Operating System, RTOS)란 한정된 자원 내에서 실행된 잡 (Job) 이 정해진 기간 내에 수행되어야 하는 특수한 시스템을 위해 만들어진 운영 체제이다.

RTOS를 사용하는 시스템의 예

RTOS을 사용하는 시스템은 다음과 같은 경우를 들 수 있다.

  • 사용할 수 있는 리소스가 제한되는 경우
  • 미션 크리티컬 시스템 (Mission Critical System)[7]

RTOS의 예[9]

같이 보기

바깥 고리

각주

  1. 다만 단순한 임베디드 시스템의 경우 커널이 필요 없기에 커널 없는 운영 체제를 탑재하고 있는 경우도 있다. 물론 Windows CE리눅스 커널을 탑재한 임베디드 시스템의 경우는 그런 거 없다
  2. RAM은 물론, L1, L2, L3 캐쉬 메모리가상 메모리를 모두 포함한다.
  3. 일반적으로는 L1 캐쉬 → L2 캐쉬 → L3 캐쉬 → RAM → 디스크 (가상 메모리)의 순이다. CPU의 구조를 이해는 위키러라면 굳이 설명할 필요도 없겠지만, 물리적으로 CPU에 가까운 순으로 처리 속도가 빨라진다.
  4. 굳이 언급할 필요도 없겠지만 반대로 커널은 모든 유저 프로세스에 액세스 할 수 있다.
  5. 명령 줄 인터페이스 (Command Line Interface, CLI)라고도 한다
  6. 물론 OS에 구애받지 않는 프리 API도 있다.
  7. 그 특성상 초장시간동안 오류 없이 사용할 수 있어야 하는 최중요 시스템
  8. 특히 증권 관련 시스템처럼 1분 1초가 수십 수백억의 손해로 직결되는 시스템
  9. 출처: 한국어 위키백과

틀:소프트웨어들

Wikipedia-ico-48px.png
이 문서는 한국어 위키백과운영 체제 문서 13874320판에서 분기하였습니다.