나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2026-09-22 16:03:35

실시간 운영체제

RTOS에서 넘어옴

운영체제
Unix 파일:Linux 로고.svg Linux 파일:Windows 아이콘 2021_화이트.svg Windows
DOS DR-DOS · 파일:MS-DOS 아이콘.svg MS-DOS · 파일:FreeDOS 로고.svg FreeDOS · K-DOS
기타 실시간 운영체제 · 파일:퓨시아 아이콘.svg파일:퓨시아 아이콘 화이트.svg Fuchsia · TempleOS · ReactOS · BeOS · 하이쿠 · 파일:Mac OS 로고.svg Mac OS · 파일:OS/2 로고.svg OS/2 · CP/M · 모바일 운영체제 · OpenVMS · MenuetOS(Kolibri OS) · Pintos · Qubes OS · COSMOSOS(AuraOS)
취소선: 개발 중단된 운영체제

1. 개요2. 임베디드와 RTOS3. RTOS의 이점
3.1. 멀티태스킹3.2. 멀티코어 프로세싱3.3. 오류 보호3.4. 능동적인 메모리 관리3.5. 멀티미디어 지원3.6. 더 우수한 디버깅3.7. 보다 중립적이고 표준적인 API
4. 목록5. 관련 문서

1. 개요

Real-Time Operating System, RTOS

실시간 컴퓨팅, 즉 시간 내에 원하는 작업을 처리하는 것을 보장할 수 있는 운영체제를 말한다.

실시간 운영체제가 일반적인 운영체제와 다른 가장 큰 특징은 사용자가 직접 운영체제 상의 태스크 스케줄링과 인터럽트를 어느 정도 직접 관리할 수 있다는 점이다. Windows나 Linux 같은 비실시간 운영체제들은 프로세스와 스레드의 스케줄링을 운영체제가 완전히 독점적으로 관리하며 일반적으로는 사용자가 이를 직접 변경하기보다는 OS가 제공하는 그대로 사용하는 것이 보통이다. 그러나 실시간 운영체제들은 사용자가 특정 태스크의 실행이나 인터럽트 핸들링 등 프로그램의 실행 시점에 대한 기능들을 직접적으로 요구할 수 있다. 그래서 원하는 작업을 원하는 시점에 정확하게 실행할 수 있으면서도 운영체제의 혜택을 모두 얻을 수 있다는 장점이 있다.

우리 주변에서 볼 수 있는 Windows와 같은 상당수의 상용 운영체제들은 실시간성을 보장하지 않고 보장할 필요도 없다. 실시간성이 필요한 작업 자체도 드물거니와 실행해야 하는 프로세스의 수도 워낙 많고 무엇보다 어떤 프로그램이 언제 실행되고 언제 끝날지를 특정할 수 없다 보니 애초에 실시간성의 보장 자체가 불가능한 요구이기 때문이다. 또한 보안상으로도 RTOS들은 운영체제의 상당 부분을 응용 계층에 오픈할 수밖에 없으므로 악의적인 응용 프로그램이 스케줄러를 조절해서 컴퓨터의 동작을 방해하기도 쉬워져 이러한 실시간 처리 요구를 무턱대고 받아들이기가 곤란하다. 이 때문에 압도적인 하드웨어 성능으로 실시간 운영체제의 흉내를 낼 수는 있어도 어찌 되었든 이러한 범용 운영체제들의 사용 환경과 커널 구성은 본질적으로 일정한 처리에는 적합하다 보기 어렵다. 반대로 앞서 말했던 보안 문제와 스케줄러의 차이 때문에 RTOS도 범용 운영체제로서 사용하기에는 애로사항이 많다.

RTOS는 이름에 실시간이 들어가긴 하지만 실질적으로 실시간성만 보고 사용하는 것은 아니다. 사실 가장 실시간성이 좋은 환경은 RTOS의 오버헤드까지도 배제할 수 있는 OS가 없는 베어메탈(Bare-metal) 환경이다. 그러면 그냥 베어메탈 환경으로 펌웨어를 개발하면 그만 아니냐? 라고 따질 수 있을 텐데 이 또한 틀린 말은 아니다.[1] 실제로도 임베디드 프로젝트에서 RTOS가 채용되지 않는 경우 또한 꽤 많은데, 왜냐하면 원래부터 임베디드 분야가 작고 간단하거나 제한된 동작이 주된 프로젝트의 비중이 매우 크기 때문이다. 다만 시스템이 충분히 복잡해지게 되면 프로그래머가 상태를 직접 관리하는 방식으로는 최적화에 한계를 보이게 되며, 특히 동시성이 필요할 때 RTOS가 힘을 발휘하게 된다.

만약 RTOS를 채용할 만한 기존의 중대규모 임베디드 분야들 중에도 실시간성이 불필요하거나 응용과 확장성이 더 요구될 때 반도체의 성능이 충분히 빠르다면 그냥 GPOS를 사용하는 경우도 간혹 있다. 특히 Linux는 커스터마이징까지 해주면 극단적으로 요구사양을 낮출 수 있어서 이런 흐름을 더욱 가속화시켰고, 아예 커널 6.12부터 RTOS 기능을 지원하기 시작하면서 이쪽 시장을 야금야금 파먹는 중이다. 사실 퀄컴, 미디어텍, 락칩 등 고성능 ARM 칩의 경우는 구조가 너무 복잡하고 기능도 매우 많아서 현실적으로 더 이상 프로그래머가 마이크로컨트롤러들마냥 일일이 제어하기는 상당히 힘들고 대부분 리눅스나 BSD 등의 드라이버만 지원하고 있어서 전통적인 RTOS는 지원이 미흡한 경우도 많다. 오히려 어중간한 성능의 MCU나 DSP는 타이밍 예측이 쉬워 구조적으로도 RTOS에 잘 맞는 편이고 실제로도 많이 쓴다. 심지어 현대의 마이크로프로세서들은 인터럽트 간의 우선순위 커스터마이징과 선점 인터럽트까지도 하드웨어적으로 지원해 주는 경우가 꽤 있어서 저렴한 비용으로 Non-OS Hard RT 대응이 가능하다.

RTOS를 알아보게 되면 Soft RT와 Hard RT의 개념이 반드시 등장하기 마련이다. 여기서 Soft RT는 상대적으로 데드라인에 여유가 있는 작업을 의미하며, Hard RT는 데드라인이 굉장히 빡빡하거나 아예 지연이 허용되지 않는 작업을 의미한다. 이렇듯 무엇을 얼마나 여유를 두고 처리할지에 따라서 Soft와 Hard가 결정되기 때문에 RTOS들도 목적에 따라 Soft와 Hard로 나뉘거나 혹은 따로 구분짓지 않는 RTOS도 많다.

이런 실시간성을 설명할 때에 "어떤 작업을 끝낼 것을 보장한다"는 설명도 자주 볼 수 있는데 이는 오류이다. 왜냐하면 상식적으로 RTOS가 어떤 작업을 시작시킬 수는 있어도 이 작업이 적절한 시간 내에 끝낼 수 있는 것인지는 알 수 없기 때문이다. RTOS가 시작시켜 준 작업을 최대한 빠르게 끝내는 것은 프로그래머의 몫이다. 만일 다음 타이밍 주기까지 작업을 끝내지 못한다면 보통은 다음 타이밍으로 실행 주기가 밀려버린다.

2. 임베디드와 RTOS

RTOS는 고급 임베디드 환경에서 상당한 수요가 있다. 보통 산업용으로 많이 사용되는 운영체제라 하면 대표적으로 Linux를 꼽을 수 있고 Android라는 선택지도 있다. 그러나 이런 운영체제들을 구동하기 위해서는 적어도 수백MB의 메모리와 1GB 이상의 디스크 저장공간, 파일 시스템이 요구되며 운영체제가 각 프로세스들의 메모리를 보호하기 위해서 CPU 내장으로든 별도 하드웨어를 통해서든 MMU[2]라는 기능이 반드시 지원되어야 한다. 그러나 이 정도의 사양과 기능이 지원되는 시스템은 임베디드 산업에서는 불필요하게 크고 복잡하며 많은 비용이 들어가야 하고 범용 운영체제를 구동하기 위한 오버헤드도 대단히 크다. 때문에 임베디드 산업에서 쓰기 좋게 불필요한 기능은 다 들어내고 크기도 엄청나게 줄인 매우 작고 저렴한 SoC 마이크로프로세서들이 주로 사용되는데 이런 물건들은 대부분 성능도 성능이고 태생적으로 범용 운영체제를 지원할 수 없는 스펙으로 나온다.

당연히 이런 마이크로프로세서들에 흔히 사용되는 운영체제를 올릴 수는 없다. 하지만 다행스럽게도 현 시점의 임베디드 산업에서 절대적인 지위를 갖고 있는 C언어는 스펙상 단일 프로그램의 구동에 기술적으로 운영체제의 도움이 전혀 필요하지 않으며, 단지 간단한 하드웨어 요구사항만이 있을 뿐이다. 이 덕분에 아무리 작은 마이크로프로세서라 해도 일반적으로 하나의 C 프로그램을 온전하게 구동할 수 있는 구성을 갖추기 쉬운데 이렇게 사용되는 단일 프로그램 시스템의 상당수가 펌웨어이다. 참고로 이해를 돕기 위해 C언어를 콕 찝어서 언급했지만 C언어 외에도 이렇게 설계된 프로그래밍 언어는 많다. 파스칼, Ada 같은 언어도 있고 더 옛날로 가면 포트란, 코볼, 알골 같은 거의 조상님 격의 언어들도 있으며, 그조차도 사용할 수 없던 시절엔 직접 어셈블리어를 사용했었다. 따라서 이를 감안하여 문서를 읽도록 하자.[3]

펌웨어가 구동되는 환경은 운영체제가 없으므로 범용 운영체제로부터 API를 제공 받을 수도 없고 오류로부터 보호도 받지 못한다. 따라서 모든 인터럽트와 에러 처리, 주변장치 제어까지 전부 펌웨어 작성 시에 고려해야 하므로 당연히 운영체제 환경의 프로그램에 비해 코드가 훨씬 복잡하고 어려워질 수밖에 없을 것이다. 그런데 분명히 펌웨어 쪽의 코드가 더 복잡한데도 운영체제 기반 프로그램들에 비해 오히려 더 우수한 성능과 안정성을 갖는 경우를 많이 볼 수 있다. 이렇게 되는 이유는 하드웨어의 모든 자원을 단일 프로그램 하나가 전부 독점적으로 사용할 수 있고, 프로그램의 동작에 영향을 줄 수 있는 모든 요소를 프로그래머의 의도대로 완벽하게 통제할 수 있는 데다 대부분 동작이 충분히 간단하고 규모가 작기 때문이다.

하지만 이렇게 작고 간단하고 높은 안전성이라는 특징은 펌웨어의 규모가 충분히 작을 때에만 통하는 이야기다. 시간이 지날수록 전자기기들의 크기는 작아지는 반면에 더 많은 기능과 유연성이 요구되고 있으며, 이 때문에 펌웨어에서 해야 할 일이 점점 많아지고 있다 보니 자연스럽게 프로그램의 규모가 커질 수밖에 없다. 그러나 규모가 커질수록 단일 프로그램 구조의 한계로 인해 유지보수와 추가기능의 구현, 하드웨어 자원관리, 디버깅 등이 점점 까다로워지는 문제가 발생하고 기능 간의 의존도가 불필요하게 확대되는 데다 실행시간이나 작업순서의 변동, 혹은 인터럽트로 인해 전혀 생각지도 못한 부분에서 버그가 발생하는 등등 단일 프로그램 구조 하에서는 대규모 펌웨어의 작성과 협업이 여러모로 곤란해지는 경우가 많다. 이것은 그 무엇보다 신뢰성이 중요한 펌웨어에게 있어 매우 심각한 문제인데, 왜냐하면 이미 출하된 제품의 펌웨어에서 문제가 터지면 이를 수습하는 데에 엄청난 시간과 비용을 써야 하기 때문이다.

이런 상황에서 GPOS를 사용할 정도의 규모가 안되거나 비용을 최대한 절감하면서도 응용 플랫폼 역할을 해줄 운영체제가 있다면 대규모 협업 및 확장성의 확보가 쉽고 제품에서 응용 수준의 라이브러리와 서비스 제공 및 배포를 하는 데에 상당한 이점이 있다. 바로 이때 채용되는 것이 RTOS이다.

3. RTOS의 이점

RTOS를 사용하여 얻을 수 있는 가장 큰 이점은 바로 OS의 혜택을 받을 수 있다는 데에 있다. 사실 생각보다 OS는 프로그래머에게 상당히 많은 혜택을 제공하며, 여러 가지 유용한 백그라운드 작업을 수행하고 있다. 상단의 서술을 보다시피 베어메탈 환경과 RTOS 환경이 주로 비교되는 경우가 많은데 곰곰이 따져보면 생각보다 매우 큰 차이가 있다.

3.1. 멀티태스킹

베어메탈 환경과 같은 단일 프로그램 시스템에는 동시실행이라는 개념이 없으며, 작업을 일시중단하거나 재개하는 등의 능동적인 태스크 제어를 할 수 없다. 이는 근본적으로 이러한 환경이 단일 태스크 구성과 같기 때문이다. 따라서 여러 작업을 동시에 실행하기 위해서는 프로그래머가 모든 작업을 일일이 직접 작은 단위로 쪼개고 스케줄링을 해주어야 하며, 특히 네트워크 통신이나 디스크 입출력 등의 작업이 끝나는 시점을 명확히 특정할 수 없는 상황이 발생하면 유연하고 효율적으로 대응하기가 어렵다.

물론 베어메탈 환경이라고 해도 인터럽트의 존재 덕분에 프로그래머의 실력이 출중하다면 생각보다는 훨씬 능동적이고 유연하게 프로그램을 만들 수 있지만 이것도 비교적 단순하거나 Soft RT 작업의 비중이 큰 경우에나 가능한 것이다. 만약 Hard RT 작업까지 고려하기 시작하면 여러분의 상상보다 구현이 엄청나게 까다로워지기 시작한다. 예를 들어 Hard RT 작업을 시작해야 할 타이밍에 이미 다른 인터럽트가 먼저 작업을 수행하고 있을 수도 있다. 이 경우에 만약 하드웨어가 인터럽트 선점 기능을 지원하지 않으면 특정 상황에 Hard RT 작업의 데드라인을 지키지 못할 수도 있으며, 인터럽트 선점 기능을 이용한다 해도 프로그래머가 인터럽트 실행 도중에 또 다른 인터럽트가 실행되는, 중첩 인터럽트 처리를 직접 해야만 한다!

심지어 만약 해야 할 Hard RT 작업이 하나를 넘으면 일일이 우선순위를 지정해서 3중, 4중 인터럽트를 처리해야 할 수도 있는데 이런 상황에서 오류나 버그까지 발생한다고 생각해 보자. 프로그래머의 입장에서는 디버깅은커녕 대체 어느 시점에 무슨 일이 일어났는지조차 가늠하기 어렵다. 콜스택을 직접 까서 일일이 확인하는 건 일상이고 콜스택마저 터져버려서 디버깅 자체가 아예 불가능한 경우도 있다. 베어메탈 환경에서는 제대로 된 메모리 보호가 되지 않기 때문이다.

게다가 코어가 하나뿐이라고 해서 동기화 문제가 없는 것이 아니다. 인터럽트를 사용하게 되면 메인루프를 실행하는 중에 언제 인터럽트가 걸릴지 모르기 때문이다. 예를 들어 메인루프에서 길이가 긴 배열을 접근하는 도중에 인터럽트가 걸렸다고 생각해 보자. 만약 인터럽트 로직 내에서 모종의 이유로 동일한 배열에 접근하게 되면 메인루프의 입장에서는 실행 중 데이터 오염이 발생하게 되며, 예측불가능한 버그로 이어질 가능성이 높다. 이 때문에 일일이 flag 변수[4]를 이용해 메인루프와 인터럽트 로직간의 데이터 교환 시점을 조절해야만 하며[5], 프로그래머가 실력이 충분하지 않으면 인터럽트를 쓴 의미가 아예 사라지는 경우도 있다. 이 와중에 Hard RT 작업을 처리하기 위한 인터럽트 선점까지 고려하게 되면 개발 난이도는 그야말로 불지옥이 된다.[6]

결론적으로 베어메탈 환경에서는 인터럽트를 활용한다 해도 능동적인 프로그램을 효율적으로 만드는 것은 생각보다 대단히 어려운 일이며, 인터럽트를 쓴다고 해도 OS의 도움 없이 멀티태스킹을 구현하는 것은 결코 쉬운 일이 아니다. 그만큼 프로그래머의 경험과 동물적인 감각에 의존하게 되는 경우가 자주 있어 대규모 펌웨어의 개발이 무척 어렵다. 무한 루프 같은 것을 사용하는 것은 꿈도 꿀 수 없고 협업도 매우 어렵다.

반면에 RTOS를 이용하게 되면 각 태스크의 스케줄링을 OS가 전담해 주므로 프로그래머가 멀티태스킹에 온 신경을 집중할 필요가 없다. 한 태스크에서 무한 루프나 대기를 하면서 로직을 잠그더라도 OS가 실행을 잠시 중단하고 다른 태스크로 실행 시간을 알아서 확보해 준다. 만약 어떤 태스크에서 대기를 할 필요가 있다면 실행조건이 만족되기 전까지 스스로 실행 시간을 반납하고 태스크를 대기 상태로 두어 CPU를 사용하지 않게 할 수도 있다. OS가 제공하는 이벤트 핸들링과 동기화 객체를 이용해 안전하고 손쉬운 데이터 동기화가 가능한 것은 덤이며, 얼마든지 원하는 시점에 원하는 태스크를 실행할 수 있다. 위험한 인터럽트 선점과 실행 우선순위 같은 것을 치밀하게 고려하지 않아도 된다.

3.2. 멀티코어 프로세싱

멀티코어 프로세싱에는 2가지 구현 방식이 있다. 먼저 각 코어가 서로 다른 작업을 수행하는 방식을 비대칭 멀티프로세싱(Asymmetric Multi Processing, AMP)이라고 한다. 이 방식은 각 코어가 맡는 태스크가 다르며, 서로 실행 중인 태스크를 교환하지도 않는다. 반대로 우리가 흔히 알고 있듯이 모든 코어가 동등한 수준에서 작동하는 것을 대칭 멀티프로세싱(Symmetric Multi Processing, SMP)이라고 한다.

베어메탈 환경에서도 멀티코어 프로세서를 이용하는 경우가 있다. 다만 보통 베어메탈 환경에서는 특별한 이유가 없다면 AMP 방식이 거의 대부분인데 그 이유는 OS가 없으면 멀티코어 스케줄링도 프로그래머가 직접 구현해야 하는데 이걸 직접 구현할 바에는 당연히 OS를 사용하는 선택을 하기 때문이고, 무엇보다도 SMP가 지원되는 프로세서가 훨씬 비싸기 때문이다. 아무튼 AMP 방식으로 펌웨어를 개발할 때에는 코어 별로 펌웨어를 따로 작성해 주고 코어 간의 데이터 교환은 하드웨어가 제공하는 IPC[7]나 공유메모리를 이용한다. AMP 방식은 SMP보다 자원 활용 면에서 효율적이진 않더라도 구현이 비교적 간단하며, 2개 이상의 Hard RT 작업을 여유롭게 처리할 수 있기 때문에 산업적으로 상당히 유용한 경우가 꽤 있다. 아예 설계 단계부터 AMP 구성으로 사용할 것을 전제로 하는 멀티코어 프로세서도 굉장히 많다.

반대로 RTOS라고 해서 항상 SMP 시스템인 것도 아니다. 그 이유는 SMP 시스템을 구성하려면 프로세서의 하드웨어 사양이 상당히 중요하기 때문이다. SMP 시스템을 구성하기 위해서는 일단 코어들이 동일한 메모리 공간에 접근할 수 있어야 하고, 인터럽트 컨트롤러의 사양이 적절해야 하며, SMP 구성에 적합한 버스 구조여야 하고, 특히 캐시 일관성 기능이 요구된다. 그러므로 모든 멀티코어 프로세서가 SMP 구성에 적합한 것은 아니며, 따라서 RTOS라고 해도 AMP 환경에서는 멀티프로세싱 능력에 대해 어느 정도 타협을 하게 된다. 비록 각 코어에 능동적으로 태스크 스케줄링을 할 수 없더라도 코어 간 통신을 위한 API를 제공하며, 이를 이용해 다른 코어의 태스크를 기다리는 등의 동작을 할 수 있다.

어쨌든 대체로 RTOS는 멀티코어 프로세싱을 지원하며, 지원하는 방식에 따라 각 작업을 여러 코어에 능동적으로 배분하고 스케줄링 할 수 있다. 또한 뮤텍스, 세마포어, 스핀락 등의 다양한 동기화 API도 제공한다는 장점도 있다. 당연히 베어메탈 환경에서는 이런 API들이 없으며, 마찬가지로 프로그래머가 직접 구현해야 한다.

3.3. 오류 보호

OS가 없는 베어메탈 환경은 위에서 언급했듯이 단일 프로그램 구조이므로 코드 전체가 같은 주소 공간을 공유할 수밖에 없으며, 메모리 전체의 접근에 제약이 없다. 이로 인해 어딘가에서 메모리 훼손이나 스택 오버플로우 등의 오류가 발생하게 되면 프로그램 전체가 오동작하거나 완전히 중단되며, 프로그램의 모듈화에도 큰 제약이 가해진다. 또한 치명적인 오류가 발생했을 때의 복구 방법도 에러 핸들링 후 완전 리셋 정도밖에 없어서 근본적으로 오류 안전성이 거의 없다고 봐도 무방하다. 치명적인 오류가 발생했을 때 시스템 전체의 중단을 막기가 어려우며, 디버깅도 무척 힘들다.

반면에 RTOS의 경우, 하드웨어가 MPU나 MMU를 지원해 주면 이를 적극적으로 활용해 태스크 단위로 메모리 접근을 제한할 수 있어 서로 다른 태스크가 메모리를 손상시키는 문제를 근본적으로 방지할 수 있다. 또한 하나의 태스크에서 치명적인 오류가 발생하더라도 다른 태스크에 영향이 가지 않도록 보호하고 해당 태스크만 재시작할 수 있으므로 시스템 전체가 중단되지 않아 오류 복구 능력도 훨씬 뛰어나다.

3.4. 능동적인 메모리 관리

3.5. 멀티미디어 지원

3.6. 더 우수한 디버깅

3.7. 보다 중립적이고 표준적인 API





과거에는 피쳐폰에서 Nucleus RTOS라는 실시간 운영체제가 많이 사용되었다. 성능이 매우 떨어졌던 피쳐폰 하드웨어의 사양으로 구동할 수 있을 만큼 가벼우면서도 필요한 작업을 제때 실행할 수 있는 실시간성이 보장되는 데다가 운영체제로서 다양한 응용프로그램을 지원할 수 있는 플랫폼의 역할도 할 수 있었기 때문이다. 이후 스마트폰의 시대가 도래한 이후에도 삼성의 바다 같이 가벼우면서 응용성이 좋은 실시간 운영체제가 활용되었으나 스마트폰의 성능이 더 올라가면서 결국 리눅스 기반 운영체제로 대체되었다.

4. 목록

5. 관련 문서




#!if version2 == null
{{{#!wiki style="border:1px solid gray;border-top:5px solid gray;padding:7px;margin-bottom:0px"
[[크리에이티브 커먼즈 라이선스|[[파일:CC-white.svg|width=22.5px]]]] 이 문서의 내용 중 전체 또는 일부는 {{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/운영체제|운영체제]]}}}{{{#!if external != "o"
[[운영체제]]}}}}}} 문서의 {{{#!if uuid == null
'''uuid not found'''}}}{{{#!if uuid != null
[[https://namu.wiki/w/운영체제?uuid=a3dc0a28-b43e-4be8-80c2-af67829b1312|r281]]}}} 판{{{#!if paragraph != null
, [[https://namu.wiki/w/운영체제?uuid=a3dc0a28-b43e-4be8-80c2-af67829b1312#s-|번 문단]]}}}에서 가져왔습니다. [[https://namu.wiki/history/운영체제?commit=a3dc0a28-b43e-4be8-80c2-af67829b1312|이전 역사 보러 가기]]}}}
#!if version2 != null
{{{#!wiki style="display: block;"
{{{#!wiki style="border:1px solid gray;border-top:5px solid gray;padding:7px;margin-bottom:0px"
[[크리에이티브 커먼즈 라이선스|[[파일:CC-white.svg|width=22.5px]]]] 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
{{{#!wiki style="text-align: center"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="text-align: left; padding: 0px 10px"
{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/운영체제|운영체제]]}}}{{{#!if external != "o"
[[운영체제]]}}}}}} 문서의 {{{#!if uuid == null
'''uuid not found'''}}}{{{#!if uuid != null
[[https://namu.wiki/w/운영체제?uuid=a3dc0a28-b43e-4be8-80c2-af67829b1312|r281]]}}} 판{{{#!if paragraph != null
, [[https://namu.wiki/w/운영체제?uuid=a3dc0a28-b43e-4be8-80c2-af67829b1312#s-|번 문단]]}}} ([[https://namu.wiki/history/운영체제?commit=a3dc0a28-b43e-4be8-80c2-af67829b1312|이전 역사]])
{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid2 == null
'''uuid2 not found'''}}}{{{#!if uuid2 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph2 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]]){{{#!if version3 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid3 == null
'''uuid3 not found'''}}}{{{#!if uuid3 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph3 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version4 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid4 == null
'''uuid4 not found'''}}}{{{#!if uuid4 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph4 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version5 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid5 == null
'''uuid5 not found'''}}}{{{#!if uuid5 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph5 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version6 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid6 == null
'''uuid6 not found'''}}}{{{#!if uuid6 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph6 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version7 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid7 == null
'''uuid7 not found'''}}}{{{#!if uuid7 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph7 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version8 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid8 == null
'''uuid8 not found'''}}}{{{#!if uuid8 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph8 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version9 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid9 == null
'''uuid9 not found'''}}}{{{#!if uuid9 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph9 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version10 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid10 == null
'''uuid10 not found'''}}}{{{#!if uuid10 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph10 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version11 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid11 == null
'''uuid11 not found'''}}}{{{#!if uuid11 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph11 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version12 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid12 == null
'''uuid12 not found'''}}}{{{#!if uuid12 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph12 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version13 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid13 == null
'''uuid13 not found'''}}}{{{#!if uuid13 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph13 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version14 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid14 == null
'''uuid14 not found'''}}}{{{#!if uuid14 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph14 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version15 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid15 == null
'''uuid15 not found'''}}}{{{#!if uuid15 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph15 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version16 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid16 == null
'''uuid16 not found'''}}}{{{#!if uuid16 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph16 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version17 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid17 == null
'''uuid17 not found'''}}}{{{#!if uuid17 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph17 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version18 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid18 == null
'''uuid18 not found'''}}}{{{#!if uuid18 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph18 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version19 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid19 == null
'''uuid19 not found'''}}}{{{#!if uuid19 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph19 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version20 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid20 == null
'''uuid20 not found'''}}}{{{#!if uuid20 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph20 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version21 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid21 == null
'''uuid21 not found'''}}}{{{#!if uuid21 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph21 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version22 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid22 == null
'''uuid22 not found'''}}}{{{#!if uuid22 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph22 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version23 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid23 == null
'''uuid23 not found'''}}}{{{#!if uuid23 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph23 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version24 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid24 == null
'''uuid24 not found'''}}}{{{#!if uuid24 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph24 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version25 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid25 == null
'''uuid25 not found'''}}}{{{#!if uuid25 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph25 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version26 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid26 == null
'''uuid26 not found'''}}}{{{#!if uuid26 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph26 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version27 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid27 == null
'''uuid27 not found'''}}}{{{#!if uuid27 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph27 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version28 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid28 == null
'''uuid28 not found'''}}}{{{#!if uuid28 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph28 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version29 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid29 == null
'''uuid29 not found'''}}}{{{#!if uuid29 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph29 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version30 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid30 == null
'''uuid30 not found'''}}}{{{#!if uuid30 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph30 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version31 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid31 == null
'''uuid31 not found'''}}}{{{#!if uuid31 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph31 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version32 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid32 == null
'''uuid32 not found'''}}}{{{#!if uuid32 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph32 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version33 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid33 == null
'''uuid33 not found'''}}}{{{#!if uuid33 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph33 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version34 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid34 == null
'''uuid34 not found'''}}}{{{#!if uuid34 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph34 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version35 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid35 == null
'''uuid35 not found'''}}}{{{#!if uuid35 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph35 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version36 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid36 == null
'''uuid36 not found'''}}}{{{#!if uuid36 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph36 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version37 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid37 == null
'''uuid37 not found'''}}}{{{#!if uuid37 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph37 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version38 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid38 == null
'''uuid38 not found'''}}}{{{#!if uuid38 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph38 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version39 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid39 == null
'''uuid39 not found'''}}}{{{#!if uuid39 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph39 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version40 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid40 == null
'''uuid40 not found'''}}}{{{#!if uuid40 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph40 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version41 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid41 == null
'''uuid41 not found'''}}}{{{#!if uuid41 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph41 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version42 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid42 == null
'''uuid42 not found'''}}}{{{#!if uuid42 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph42 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version43 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid43 == null
'''uuid43 not found'''}}}{{{#!if uuid43 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph43 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version44 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid44 == null
'''uuid44 not found'''}}}{{{#!if uuid44 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph44 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version45 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid45 == null
'''uuid45 not found'''}}}{{{#!if uuid45 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph45 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version46 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid46 == null
'''uuid46 not found'''}}}{{{#!if uuid46 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph46 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version47 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid47 == null
'''uuid47 not found'''}}}{{{#!if uuid47 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph47 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version48 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid48 == null
'''uuid48 not found'''}}}{{{#!if uuid48 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph48 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version49 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid49 == null
'''uuid49 not found'''}}}{{{#!if uuid49 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph49 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}{{{#!if version50 != null
{{{#!wiki style="display: block;"

{{{#!wiki style="display: inline-block"
{{{#!if external == "o"
[[https://namu.wiki/w/|]]}}}{{{#!if external != "o"
[[]]}}}}}} 문서의 {{{#!if uuid50 == null
'''uuid50 not found'''}}}{{{#!if uuid50 != null
[[https://namu.wiki/w/?uuid=|r]]}}} 판{{{#!if paragraph50 != null
, [[https://namu.wiki/w/?uuid=#s-|번 문단]]}}} ([[https://namu.wiki/history/?commit=|이전 역사]])}}}}}}}}}}}}}}}}}}}}}


[1] 심지어 과거에는 OS도 없었고 CPU도 단순했기 때문에 어셈블리어만 가지고도 타이밍을 정확하게 맞추는 것이 가능했었다. 고전게임기는 NTSC 주사율에 내부 코드가 맞춰져 있는 경우도 있었고 외부 타이밍에 의존하지 않고 내부 클럭 속도와 어셈블리어를 가지고 동작을 예측했기 때문에 클럭을 빠르게 하면 게임 속도가 빨라진다든가 하는 일이 일었다. 현대에는 마이크로프로세서조차도 성능을 위해 명령어를 있는 그대로 실행하지 않는 경우가 자주 있고 인터럽트 오버헤드가 문제가 될 정도로 느리지도 않기 때문에 더 이상 어셈블리어만으로 타이밍을 조절하지는 않게 되었다. 특히 x86 같은 고도의 아키텍쳐의 경우, 매우 복잡한 분기예측과 uOp로 인해 프로그램 코드만 보고 타이밍을 예측해내는 것은 거의 불가능하다.[2] Memory Management Unit, 우리가 흔히 말하는 가상 메모리 관리를 하드웨어 차원에서 지원하기 위한 기능이다.[3] 요즘은 C언어를 저수준 언어라고 배우는 경우가 많지만 언어의 Level은 상대적인 것이다. 임베디드 분야에서 C언어는 고수준 언어로 취급된다.[4] 이런 목적으로 사용되는 변수를 위해서 C언어에서는 volatile 이라는 키워드를 제공하는데 volatile 키워드의 실질적인 기능은커녕 존재조차 모르는 경우가 매우 흔하다.[5] 이것도 생각보다 구현이 골치 아파지는 경우가 종종 있다. 왜냐하면 OS가 있는 환경과는 달리 베어메탈 환경에서는 코드를 무한 루프 따위로 멈춰둘 수가 없기 때문이다.[6] 그래서 인터럽트가 반드시 필요하거나 많이 쓰는 경우엔 메인루프에서 실행해야 할 반복작업까지도 반복 타이머 인터럽트 로직으로 올려버린 다음 모든 인터럽트를 비선점으로 설정해두기도 한다. 이렇게 하면 메인루프는 텅 빈 상태가 되지만 대신 인터럽트를 사용하면서 데이터 오염을 걱정하지 않아도 된다. 물론 Hard RT 작업이 필요하게 되면 더 이상의 자세한 설명은 생략한다.[7] Inter-Processor Communication[8] 前 한컴MDS