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

편집 요약 없음
 
(사용자 21명의 중간 판 68개는 보이지 않습니다)
1번째 줄: 1번째 줄:
{{사이드바
'''운영 체제'''(運營 體制, Operating System)는 [[하드웨어]]와 [[소프트웨어]]의 [[자원]]을 관리하고, [[시스템]]에서 사용하는 공용 서비스를 제공하는 [[소프트웨어]]이다. 또한 [[시스템 소프트웨어]]의 일종이다. 약칭은 '''OS'''이다.
|이름 = 운영 체제
|큰제목 = 운영 체제
|윗그림 = [[File:Operating system placement.svg]]
|앞제목 =
|제목 =
|그림 =
|묶음모양 =
|내용모양 =


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


|묶음2 =
가상화 기술이 발달한 요즘에는 [[가상 장치|소프트웨어 위에서 운영체제가 돌아가는 경우]]도 있다.
|내용2 =


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


<!--중략-->
초기의 컴퓨터들은 [계산기처럼 단순 계산 등 특정한 목적을 위해 만들어졌다. 어느 정도이고 하니, 소프트웨어를 설치하기 위해서는 사용자가 '''직접 [[케이블]]을 옮겨 꽃고 스위치의 전원을 바꿔주어''' 하드웨어가 목적에 맞게 움직이도록 해주어야 하는 지경이었다.


|묶음35 =
그러던 것이 [[폰 노이만]]이 [[내장 프로그램]]이라는 개념을 발명하면서 [[운영 체제]] 역시 본격적으로 발달하기 시작한다. 즉, 최초의 운영 체제란 사람이 수작업으로 케이블을 갈아 끼워 전자적 신호의 방향을 바꿔주던 것을 컴퓨터 내부에서 자체적으로 처리하기 위해 개발된 것이다.
|내용35 =


|아랫글 =
이후 하드웨어와 소프트웨어가 발달함에 따라 운영 체제 역시 점점 더 많은 기능을 필요로 하게 되었고, 이에 따라 [[런타임 라이브러리]], [[인터럽트]], [[병렬 처리]]와 같은 기능들이 차례로 추가되었다. 또한 운영 체제를 이용하는 측의 편의를 위해 [[사용자 인터페이스]] (User Interface, UI) 및 [[API]] (Application Programming Interface) 등도 차례로 추가, 발전하였다.
}}
'''Operating System''' / '''운영 체제''' / '''運營體制''' / '''オペレーティングシステム'''


 
현대 사회에서 운영 체제의 역할은 매우 커, 컴퓨터는 물론 [[스마트폰]]이나 [[게임기]], [[자동차]]의 [[엔진]]이나 [[TV]]에 이르기까지 전자 기기를 사용하는 거의 모든 제품에 탑재되어 있다고 해도 과언이 아니다.
운영 체제란 [[하드웨어]]와 [[소프트웨어]]의 [[자원]]을 관리하며 [[시스템]]에서 사용하는 공용 서비스를 제공하는 [[소프트웨어]]로, [[시스템 소프트웨어]]의 일종이다. <del>아까 [[컴퓨터]] 켜면서 본 그 로고 말한다.</del>
 
주된 역할은 <del>[[블루 스크린]]을 띄운다</del><del> [[커널 패닉]]을 일으킨다</del><del> 얼어붙는다 </del> 물리적 장치인 [[하드웨어]]와 논리적 개념인 [[소프트웨어]]를 이어주는 것이다. <del>중매쟁이</del>
 
[[가상화]] 기술이 발달한 요즘에는 [[가상 장치|소프트웨어 위에서 운영체제가 돌아가는 경우]]도 있다.
 
기본적으로 시스템 소프트웨어를 포함한 모든 소프트웨어의 [[코드]]는 하드웨어 위에서 실행된다. 그러나 소프트웨어 측에서 <del>[[야동]]을 재생한다던가, [[위키질]]을 한다던가 하는 </del>특정한 목적으로 [[입출력]]이나 [[메모리 할당]]과 같은 하드웨어의 기능을 사용하기 위해서는 <del>앞뒤 꽉 막힌 하드웨어가 알아듣도록 </del>특정한 전기적 신호를 보낼 필요가 있다. 물론 개개의 소프트웨어가 직접 전기적 신호를 보낼 수 도 있으나, 복수의 소프트웨어가 동시다발적으로 동작할 경우 상호 간섭으로 인해 [[버그|예기치 못한 결과]]를 내거나, 서로간의 효율을 저하시키는 결과를 낳을 수 있다. 이런 비효율을 제거하고, 하드웨어와 소프트웨어의 커뮤니케이션을 원활히 하는 역할을 담당하는 것이 운영 체제인 것이다.
 
<del>[[클럽]]에 온 [[손님]]들이 자기 꼴리는대로 [[음악]] 바꿔틀면 [[헬게이트]]가 열리니 [[DJ]]가 알아서 선곡해서 틀어주는 거라고 생각하면 편하다.</del>
 
 
== 개요 ==
초기의 <del>화석</del><del> 고대 유물</del>컴퓨터들은 [[계산기]]처럼 단순 계산 등 [[네놈은 그냥 하루하루 똥 만드는 기계일 뿐이지|특정한 목적을 위해 만들어졌다]]. 어느 정도이고 하니, 소프트웨어를 설치하기 위해서는 사용자가 '''직접 [[케이블]]을 옮겨 꽃고 스위치의 전원을 바꿔주어''' [[외장 프로그램|하드웨어가 목적에 맞게 움직이도록 해주어야 하는 지경]]이었다. <del>[[커피]] 마시자고 [[농장]]부터 짓는다고 생각하면 편하다.</del>
 
그러던 것이 [[폰 노이만]]이 [[내장 프로그램]]이라는 개념을 발명하면서 [[운영 체제]] 역시 본격적으로 발달하기 시작한다. 즉, 최초의 운영 체제란 사람이 수작업으로 케이블을 갈아 끼워 전자적 신호의 방향을 바꿔주던 것을 컴퓨터 내부에서 자체적으로 처리하기 위해 개발된 것이다. <del>[[커피]] 농사 짓다가 빡쳐서 [[자판기]]를 들여다 놓았다 (...)</del>
 
이후 하드웨어와 소프트웨어가 발달함에 따라 운영 체제 역시 점점 더 많은 기능을 필요로 하게 되었고, 이에 따라 [[런타임 라이브러리]], [[인터럽트]], [[병렬 처리]]와 같은 기능들이 차례로 추가되었다. 또한 운영 체제를 이용하는 측의 편의를 위해 [[사용자 인터페이스]] (User Interface, UI) 및 [[API]] (Application Programming Interface) 등도 차례로 추가, 발전하였다. <del>심심해서 [[위키위키]]를 접한 사람이 [[위키니트]]가 되고 [[위키페어리]]로 진화하는 과정을 생각하면 편하다.</del>
 
현대 사회에서 운영 체제의 역할은 매우 커, <del>[[컴퓨터]]나 [[서버]] 같은 당연한 예외는 생략하더라도 </del>[[스마트폰]]이나 [[게임기]]는 물론, [[자동차]]의 [[엔진]]이나 [[TV]]에 이르기까지 전자 기기를 사용하는 거의 모든 제품에 탑재되어 있다고 해도 과언이 아니다.


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


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


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


=== [[Microsoft Windows]] 계열 ===
=== UNIX-like ===
[[더 이상의 자세한 설명은 생략한다]]
{{참고|유닉스 계열}}


=== [[Mac OS]] 계열<ref>사실 넓게 보면 이쪽도 [[UNIX]] / [[Linux]] 계열에 속한다.</ref> ===
* [[HP-UX]]
* [[OS X]]
* [[GNU Hurd]]
* [[iOS]]
* [[NeXTStep]]
* [[솔라리스]]
* [[BSD]]
** [[FreeBSD]]
** TrueOS (PC-BSD)
* [[XNU]] 커널
** [[macOS]]
** [[iOS]]
** watchOS
** tvOS


=== [[UNIX]] / [[Linux]] 계열<ref>보다 자세한 유닉스 / 리눅스의 계보는 [http://futurist.se/gldt/ 이곳]을 참조할 것.</ref> ===
==== Linux ====
* [[BSD]]
{{리눅스 배포판}}
* [[CentOS]]
* 레드햇·페도라 계열
* [[HP-UX]]
*: 유서 깊은 배포판인 레드햇 리눅스에서 진화한 배포판 계열. 패키지 관리자로 rpm을 사용한다.
** [[페도라 (운영체제)|페도라]]
** [[RHEL|레드햇 엔터프라이즈 리눅스]]
** [[Rocky Linux]]
* 데비안 계열
*: 의존성을 자동으로 찾아주는 패키지 관리자인 apt로 저변을 많이 넓힌 배포판 계열.
** [[데비안]]
** [[우분투]]
*** [[리눅스 민트]]
*** [[하모니카 OS]]
* 아치 계열
*: 미니멀리즘이 한껏 살아있는 아치 리눅스 계열의 배포판. 패키지 관리자로 pacman을 사용한다.
** [[아치 리눅스]]
* 젠투 계열
*: 속도를 위해 모든 편의를 포기한 배포판.
** [[젠투 리눅스]]
** [[크롬 OS]]
* [[openSUSE]]
* [[openSUSE]]
* [[RHEL]]
* [[Steam OS|스팀 OS]]
* [[SteamOS]]
 
* [[데비안]]
* [[안드로이드 (운영체제)|안드로이드]]
* [[리눅스 민트]]
* [[솔라리스]]
* [[아치 리눅스]]
* [[우분투]]
* [[젠투 리눅스]]
* [[페도라(OS)|페도라]]
* [[크롬OS]]
* [[페르마의 정리|그 외 모든 유닉스 / 리눅스를 열거하기에는 위키의 여백이 너무 좁다]]


=== [[모바일]] ===
=== [[기타]] ===
* [[안드로이드(OS)|안드로이드]]
* [[iOS]]
* [[미고]]
* [[미고]]
* [[바다]]
* [[바다OS|바다]]
* [[우분투#모니터 밖으로!|우분투 터치]]
* [[파이어폭스 OS]]
* [[파이어폭스 OS]]
* [[타이젠]]
* [[타이젠]]
* [[WebOS]]
* [[WebOS]]
* [[블랙베리]]
* [[블랙베리]]
* <s>[[Microsoft_Windows#휴대용|Windows Mobile]]</s><ref>Windows CE → Windows Mobile → Windows Phone으로 이어지다가 [[Windows 10]]이후로는 브랜드가 합쳐짐.</ref>
* [[블랙베리 10]]
* [[Windows 10]] <ref>Windows 10부터는 모바일 운영체제가 한 브랜드로 합쳐짐.</ref>
 
 
=== 기타 ===
비교적 일반적인 유저들도 접하기 쉬운 <del>어디가? </del>상기 운영 체제들 이외에도 다음과 같은 OS도 존재한다.
 
* [[BeOS]]
* [[BeOS]]
* [[OS/2]] - [[마이크로소프트]]
* [[OS/2]] (eComStation)
* [[RICS OS]]
* [[RICS OS]]
* [[z/OS]] - [[IBM]]
* [[z/OS]] - [[IBM]]
* [[아미가OS]]
* [[아미가OS]]
* [[MS-DOS]]


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


=== [[커널]] ===
=== [[커널]] ===
[[파일:Kernel Layout.svg|thumb|200px|커널이 응용 소프트웨어를 컴퓨터 하드웨어에 연결하고 있다.]]
[[커널#컴퓨터 용어|해당 문서 참조]]
[[커널]]이란 [[하드웨어]]와 [[소프트웨어]] 간을 이어주는 역할을 하는, 대다수의 운영 체제의 중핵을 이루는 부분이다.<ref>다만 단순한 [[임베디드 시스템]]의 경우 커널이 필요 없기에 커널 없는 운영 체제를 탑재하고 있는 경우도 있다. 물론 [[Windows CE]]나 [[리눅스 커널]]을 탑재한 임베디드 시스템의 경우는 [[그런 거 없다]]</ref>
 
커널의 주된 임무는 위에서 언급한 대로 [[CPU]], [[RAM]], [[입출력]] (Input /Output, I/O) 등의 하드웨어 추상화로, 커널을 통함으로서 [[어플리케이션]]은 하드웨어의 종류나 구성에 구속되지 않고 다양한 시스템 상에서 가동할 수 있다. 또 다른 커널의 주된 임무로는 [[어플리케이션]]의 편의를 위해 [[프로세스]]의 추상화 및 프로세스 간의 통신, [[시스템 콜]] 등의 기능을 제공하는 것을 들 수 있다.
<del>[[구글]]이나 [[네이버]]가 있기에 인터넷 상의 여기저기에 흩어진 정보를 손쉽게 찾아 사용할 수 있는 거랑 비슷하다고 생각하면 편하다.</del>
 
커널의 주된 기능으로는 다음을 들 수 있다.
 
* 프로세스 관리
:프로세스는 응용 프로그램이 액세스 할 메모리 영역을 정의한다. 커널에 있어서 프로세스 관리란, 응용 프로그램이 사용할 [[어드레스 공간]]을 할당하고, 해당 응용 프로그램의 코드를 지정된 어드레스 공간에 로드하며, 로드된 코드에 대한 콜 스택을 설정한 다음 해당 프로그램의 적절한 위치에 제어를 넘겨주기까지의 처리 과정을 뜻한다.
:[[멀티 태스킹]]이 가능한 커널의 경우, 위의 관리에 더해 각 프로세스가 처리될 순서를 결정하고 처리의 타이밍을 지정해, 마치 복수의 프로세스가 동시에 작동하는 것처럼 보이도록 관리한다. 이러한 관리를 [[스케줄링]]이라고 부른다.
:또한 복수의 프로세스가 서로간에 [[데이터]]를 주고받을 수 있도록 [[프로세스 통신]]을 제어하는 것 역시 프로세스 관리의 영역에 속한다.
* 메모리 관리
:커널은 시스템의 모든 메모리<ref>[[RAM]]은 물론, L1, L2, L3 [[캐쉬 메모리]] 및 [[가상 메모리]]를 모두 포함한다.</ref>를 사용하는 것이 가능한 반면, 유저 프로그램은 보안상의 이유 등으로 인해 메모리 사용이 제한된다. 그런 탓에 커널은 한정된 메모리를 각 프로그램에 할당, 시스템의 안정성을 확보하는 동시에 응용 프로그램이 원활하게 작동하도록 한다.
:[[CPU]]에 가까운 메모리 일수록<ref>일반적으로는 L1 캐쉬 → L2 캐쉬 → L3 캐쉬 → RAM → 디스크 (가상 메모리)의 순이다. [[CPU]]의 구조를 이해는 [[위키러]]라면 굳이 설명할 필요도 없겠지만, 물리적으로 [[CPU]]에 가까운 순으로 처리 속도가 빨라진다.</ref> 연산 속도가 빨라지는 반면, 반대급부로 메모리 자체의 용량은 작아지게 된다. 그렇기에 어느 응용 프로그램의 어떤 처리에 어떤 메모리를 할당하느냐에 따라 응용 프로그램 및 시스템 전체의 성능이 좌우되게 되는데, 이러한 중요한 요소의 제어 역시 커널의 주된 임무 중 하나다.
* 장치 관리
:하드웨어 추상화의 일환으로, 커널은 [[장치 드라이버]]와 연동해 [[컴퓨터]]에 연결된 장치를 인식하고, 그 장치가 가진 리소스를 하위 소프트웨어에 할당하는 역할을 담당한다. 커널이 표준화된 입출력 포트나 메모리 공간을 확보하고 드라이버가 그 포트와 공간을 사용해 커널에 장치의 정보를 넘겨줌으로서 개개의 응용 프로그램은 하드웨어의 종류에 구애받지 않고 커널에 요구하는 것만으로도 필요한 자원을 사용할 수 있다.
* 시스템 콜
:위의 설명을 보<del>고 어렴풋하게나마 이해했다</del>면 알 수 있듯, 커널은 시스템 전체에서 중요한 역할을 담당하고 있다. 그렇기에 [[CPU]]의 설계에 좌우되는 부분은 있으나, 대부분의 경우 보안상의 이유로 커널 공간과 유저 공간이 분리되어 있어, 유저 프로세스는 함부로 커널에 액세스 할 수 없도록 되어 있다.<ref>굳이 언급할 필요도 없겠지만 반대로 커널은 모든 유저 프로세스에 액세스 할 수 있다.</ref> 그렇기에 커널은 유저 프로세스가 간접적으로 커널의 기능을 사용할 수 있도록 커널을 호출할 수 있는 기능을 내재하고 있다. 이것이 시스템 콜로, 각 커널의 설계에 따라 다양한 방식이 존재하나, 어느 방식이든 유저 프로세스가 미리 지정된 행동을 하는 것으로 커널<del>의 [[어그로]]를 끌어서 열받은 [[싱아형|]]</del>을 호출할 수 있게 도와준다.


=== 네트워킹 ===
=== 네트워킹 ===
140번째 줄: 100번째 줄:


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


=== 인터페이스 ===
=== 인터페이스 ===
==== [[사용자 인터페이스]] ====
==== 사용자 인터페이스 ====
'''U'''ser '''I'''nterface, '''UI'''
{{본문|사용자 인터페이스}}
 
사용자 인터페이스(User Interface), 약칭 '''UI'''는 우리가 지금 보고 있는 [[그래픽 사용자 인터페이스|화면]]을 뜻한다.
 
[[파일:Command line.png|thumb|225px|명령 줄의 한 예. 각 명령어는 프롬프트 뒤에서 입력하면 되며 이에 대한 출력은 아래에 나타난다. 현재의 명령 프롬프트가 아래에 있다.]]
[[파일:KDE 4.png|thumb|225px|그래픽 사용자 인터페이스의 한 예. 프로그램들은 화면 위에 그림의 모습을 띠고 있으며 파일, 폴더, 응용 프로그램들은 아이콘과 기호의 모습을 띤다. 마우스는 컴퓨터를 탐색하는 데 쓰인다.]]
<del>[[너 나 우리]]가 지금 보고 있는 [[GUI|화면]].</del>
당연하다면 당연한 이야기지만, [[컴퓨터]]의 내부는 복잡한 실리콘 회로로 이루어져 있고, 그 회로 위를 지나는 전기적 신호를 통해 다양한 연산 과정이 이루어진다. 그러나 [[인간]]의 입장에서는 직접적으로 그러한 전기적 신호를 보낼 수도 없을뿐더러, 그러한 신호가 어떤 결과를 가져오는지 인식할 수도 없다. <del>혹시나 [[에볼류더]]나 [[사이보그]], [[안드로이드]]인 [[위키니트]]가 있다면 [[수정바람]] </del>
 
운영 체제는 이러한 [[키보드]]나 [[마우스]] 등의 [[입력 장치]]를 이용해 [[인간]]이 [[컴퓨터]]에게 전기적 신호를 보낼 수 있도록 함과 동시에, [[모니터]], [[스피커]] 등의 [[출력 장치]]를 통해 그러한 전기적 신호가 어떤 결과를 가져오는지 [[시각]], [[청각]] 등의 감각으로 인식할 수 있도록 도와준다.<del>[[마우스]]로 [[동영상]]을 더블클릭하면 여러 가지 의미로 눈과 귀를 흐뭇하게 해주는 걸 생각해보자.</del>
 
이러한 사용자 인터페이스는 크게 [[문자 사용자 인터페이스]] ('''C'''haracter '''U'''ser '''I'''nterface, '''CUI''')<ref>명령 줄 인터페이스 ('''C'''ommand '''L'''ine '''I'''nterface, '''CLI''')라고도 한다</ref>와 [[그래픽 사용자 인터페이스]] ('''G'''hrapic '''U'''ser '''I'''nterface, '''GUI''')로 나뉜다. 보다 알기 쉽게 설명하면 [[윈도우즈]]를 부팅했을 때 나오는 화면이 [[GUI]], [[CMD]]를 띄웠을 때 나오는 <del>검은 건 바탕이고 흰 건 [[영어|꼬부랑말]]이고... </del>화면이 [[CUI]]이다.


==== [[응용 프로그램 프로그래밍 인터페이스]] ====
운영 체제는 [[키보드]]나 [[마우스]] 등의 [[입력 장치]]를 이용해 [[인간]]이 [[컴퓨터]]에게 전기적 신호를 보낼 수 있도록 함과 동시에, [[모니터]], [[스피커]] 등의 [[출력 장치]]를 통해 그러한 전기적 신호가 어떤 결과를 가져오는지 [[시각]], [[청각]] 등의 감각으로 인식할 수 있도록 도와준다.
'''A'''pplication '''P'''rogramming '''I'''nterface, '''API'''


==== 응용 프로그램 프로그래밍 인터페이스 ====
{{본문|API}}
애플리케이션 프로그래밍 인터페이스('''A'''pplication '''P'''rogramming '''I'''nterface), 약칭 '''API'''.


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


알기 쉽게 설명하면, 이 항목을 보는 [[위키니트]]가 자신의 컴퓨터에서 [[온라인 게임]]을 실행하든, [[PC방]]에서 실행하든, 혹은 친구집 컴퓨터에서 실행하든, 같은 어플리케이션이라면 해당 어플리케이션이 지원하는 한도 내에서 운영 체제의 종류나 버전에 상관없이 동일한 결과를 얻을 수 있을 것이다. <del>물론 그 게임이 지원 안 하는 OS에서 돌리면 당연히 안 돌아간다 (...) [[리눅스]] 지원 안 하는 게임 [[리눅스]]에서 돌리고 안 된다고 징징대지 말자 (...) </del>이것이 가능하게 하는 기능들의 모음이 바로 API이다.
알기 쉽게 설명하면, 이 문서를 보는 [[위키니트]]가 자신의 컴퓨터에서 [[온라인 게임]]을 실행하든, [[PC방]]에서 실행하든, 혹은 친구집 컴퓨터에서 실행하든, 같은 애플리케이션이라면 해당 애플리케이션이 지원하는 한도 내에서 운영체제의 종류나 버전에 상관없이 동일한 결과를 얻을 수 있을 것이다. 이것을 가능하게 하는 기능들의 모음이 바로 API이다.


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


===== API의 종류 =====
===== API의 종류 =====
{|
|
* [[ASPI]]
* [[ASPI]]
* [[Carbon]] / [[Cocoa]]
* [[Carbon]] / [[Cocoa]]
175번째 줄: 130번째 줄:
* [[ODBC]]
* [[ODBC]]
* [[OpenAL]]
* [[OpenAL]]
|
* [[OpenCL]]
* [[OpenCL]]
* [[OpenGL]]
* [[OpenGL]]
183번째 줄: 139번째 줄:
* [[단일 유닉스 규격]]
* [[단일 유닉스 규격]]
* [[스칼라 API]]
* [[스칼라 API]]
|}


== 실시간 운영 체제 ==
== 실시간 운영 체제 ==
[[실시간 운영 체제]] ('''R'''eal '''T'''ime '''O'''perating '''S'''ystem, RTOS)란 한정된 자원 내에서 실행된 잡 (Job) 이 정해진 기간 내에 수행되어야 하는 [[실시간 시스템|특수한 시스템]]을 위해 만들어진 운영 체제이다.  
[[실시간 운영 체제]] ('''R'''eal '''T'''ime '''O'''perating '''S'''ystem, RTOS)란 한정된 자원 내에서 실행된 잡 (Job) 이 정해진 기간 내에 수행되어야 하는 [[실시간 시스템|특수한 시스템]]을 위해 만들어진 운영 체제이다.


=== RTOS를 사용하는 시스템의 예 ===
=== RTOS를 사용하는 시스템의 예 ===
236번째 줄: 193번째 줄:


== 바깥 고리 ==
== 바깥 고리 ==
* [http://ko.wikipedia.org/wiki/%EC%9A%B4%EC%98%81_%EC%B2%B4%EC%A0%9C 한국어 위키백과 운영체제 항목]<ref>본 항목에 사용된 이미지 등이 개제된 원본이다. 다만 내용은 [[리브레 위키]]의 분위기에 맞춰 전면적으로 수정했다.</ref>
* [http://www.netmarketshare.com/operating-system-market-share.aspx?qprid=10&qpmr=1000&qptimeframe=M&qpsp=182&qpcustomd=0&qpcustomb= 실시간 운영체제 점유율]
* [http://www.netmarketshare.com/operating-system-market-share.aspx?qprid=10&qpmr=1000&qptimeframe=M&qpsp=182&qpcustomd=0&qpcustomb= 실시간 운영체제 점유율]


----
{{각주}}
<references/>
{{소프트웨어 목록}}


[[분류:컴퓨터 용어]]
[[분류:컴퓨터 용어]]
[[분류:운영 체제| ]]
{{퍼온문서|운영 체제|13874320}}

2024년 3월 3일 (일) 07:29 기준 최신판

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

역할[편집 | 원본 편집]

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

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

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

초기의 컴퓨터들은 [계산기처럼 단순 계산 등 특정한 목적을 위해 만들어졌다. 어느 정도이고 하니, 소프트웨어를 설치하기 위해서는 사용자가 직접 케이블을 옮겨 꽃고 스위치의 전원을 바꿔주어 하드웨어가 목적에 맞게 움직이도록 해주어야 하는 지경이었다.

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

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

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

목적[편집 | 원본 편집]

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

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

대표적인 운영체제[편집 | 원본 편집]

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

Microsoft Windows[편집 | 원본 편집]

UNIX-like[편집 | 원본 편집]

Linux[편집 | 원본 편집]

기타[편집 | 원본 편집]

구성 요소[편집 | 원본 편집]

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

커널[편집 | 원본 편집]

해당 문서 참조

네트워킹[편집 | 원본 편집]

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

보안[편집 | 원본 편집]

운영 체제는 시스템 보안을 위해 사용자 및 프로그램이 시스템에 액세스 할 수 있는 권한을 설정하고 관리하는 역할을 담당한다. 윈도우즈UAC가 그 대표적인 기능이라 할 수 있다.

인터페이스[편집 | 원본 편집]

사용자 인터페이스[편집 | 원본 편집]

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

운영 체제는 키보드마우스 등의 입력 장치를 이용해 인간컴퓨터에게 전기적 신호를 보낼 수 있도록 함과 동시에, 모니터, 스피커 등의 출력 장치를 통해 그러한 전기적 신호가 어떤 결과를 가져오는지 시각, 청각 등의 감각으로 인식할 수 있도록 도와준다.

응용 프로그램 프로그래밍 인터페이스[편집 | 원본 편집]

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

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

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

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

API의 종류[편집 | 원본 편집]

실시간 운영 체제[편집 | 원본 편집]

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

RTOS를 사용하는 시스템의 예[편집 | 원본 편집]

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

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

RTOS의 예[4][편집 | 원본 편집]

같이 보기[편집 | 원본 편집]

바깥 고리[편집 | 원본 편집]

각주

  1. 물론 OS에 구애받지 않는 프리 API도 있다.
  2. 그 특성상 초장시간동안 오류 없이 사용할 수 있어야 하는 최중요 시스템
  3. 특히 증권 관련 시스템처럼 1분 1초가 수십 수백억의 손해로 직결되는 시스템
  4. 출처: 한국어 위키백과
Wikipedia-ico-48px.png
이 문서는 한국어 위키백과운영 체제 문서 13874320판에서 분기하였습니다.