❗️ 운영제체: 운영 체제는 컴퓨터 하드웨어를 관리하는 소프트웨어입니다.
컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 중개자 역할을 합니다.
컴퓨터 시스템의 기본 목표는 프로그램을 실행하고 사용자 문제를 더욱 쉽게 해결할 수 있게 하는 것입니다.
이에 따라 운영체제의 목적은 사용자가 프로그램을 편리하고 효율적으로 수행할 수 있는 환경을 제공하는데 있습니다.
컴퓨터 시스템은 대게 네 가지 구성요소인 하드웨어, 운영체제, 응용 프로그램 및 사용자로 구분할 수 있습니다.
운영 체제는 보는 관점에 따라 2가지 관점으로 구분할 수 있습니다.
사용자는 응용 프로그램이 어떻게 동작하는지 알기 보다 자신이 가지고 있는 문제를 해결할 수 있으며 가능하다면 보다 편리하게 해결하고 싶을 것입니다.
따라서, 사용자 관점에서는 인터페이스가 중요합니다. 사용의 용이성에 관심이 있고 자원의 이용에는 신경을 쓰지 않습니다.
반면, 컴퓨터의 관점에서 운영체제는 하드웨어와 가장 밀접하게 연관된 프로그램입니다. 이 관점에서는 운영체제를 자원 할당자(resource allocator)로 볼 수 있습니다.
또한, 여러 가지 입출력 장치와 사용자 프로그램을 제어할 필요성을 강조합니다. 운영체제는 제어 프로그램(control program)이기도 합니다.
여기에서는 개관임에도 불구하고 중요해 보이는 내용이 많아서 다소 많은 내용을 넣을 예정입니다. 따라서 소목차를 더 매기도록 하겠습니다.
현대의 범용 컴퓨터 시스템은 하나 이상의 CPU와 구성요소와 공유 메모리 사이의 액세스를 제공하는 공통 버스를 통해 연결된 여러 장치 컨트롤러로 구성됩니다.
운영체제에는 각 장치 컨트롤러마다 장치 드라이버가 있습니다.
⚡️TIP⚡️
CPU와 장치 컨트롤러는 병렬로 실행되어 메모리 사이클을 놓고 경쟁합니다. => 메모리 컨트롤러: 동기화 작업 요구
❗️ 인터럽트: CPU가 현재 실행 중인 작업을 일시 중지하고 특정 루틴(인터럽트 핸들러 또는 서비스 루틴)을 실행하도록 하는 신호 또는 매커니즘입니다.
인터럽트는 운영체제와 하드웨어의 상호 작용의 핵심 부분으로 볼 수 있습니다.
해당 파트는 개관 파트라서 자세한 부분은 살펴보지 않을 것이지만, 간단하게 인터럽트가 어떻게 동작하는지는 확인하고 가려고 합니다.
인터럽트 발생
인터럽트 서비스 루틴의 주소를 제공하기 위해 배열이 존재하는데, 이것을 인터럽트 벡터라고 합니다.
여기서 궁금증이 생길만한 요소들은 짚고 넘어갑시다.
먼저, CPU가 인터럽트 되면, CPU는 하던 일을 중단?
CPU가 하던 일을 처리한다는 것은 메인 메모리로 부터 명령어를 받아서 처리하고 있는 과정이라는 것인데 어떻게 인터럽트가 발생한지 알 수 있을까요? 인터럽트 명령어가 도중에 치고 들어와서 CPU에 도달이라도 하는 것일까요?
이것은 인터럽트 요청 라인(interrupt request line)라는 선이 존재하여 해결됩니다.
CPU 하드웨어는 하나의 명령어 실행을 완료할때마다 이 선을 감지합니다.
return_from_interrupt
명령어를 실행하여 CPU를 인터럽트 전 실행 항태로 되돌린다.즉, 다음과 같은 순서로 CPU는 작업을 수행하는 것입니다.
controller raise interrupt -> CPU catch interrupt -> CPU dispatch to handler -> handler service and clear interrupt
다른 의문점으로는 인터럽트를 인덱스로 구별해서 실행한다고 했는데 그렇다면 인터럽트 수가 많아서 인덱스가 많다면 일일히 다 확인하는 것일까?
이 문제를 해결하는 일반적인 방법은 인터럽트 체인을 사용하는 것입니다.
인터럽트 벡터의 각 원소는 인터럽트 핸들러 리스트의 헤드를 가리팁니다. 인터럽트가 발생하면 요청을 처리할 수 있는 핸들러가 발견할 때까지 상응하는 리스트의 핸들러가 하나씩 호출됩니다.
인터럽트마다 중요한 정도가 다를 수 있는데 어떻게 처리해야되나?
이 경우에는 인터럽트 우선순위 레벨(interrupt priority level)을 구현합니다.
이러한 레벨을 통해 CPU는 모든 인터럽트를 마스킹하지 않고도 우선순위가 낮은 인터럽트 처리를 연기할 수 있고, 우선순위가 높은 인터럽트가 낮은 인터럽트의 실행을 선점할 수 있습니다.
여기서 시스템 콜이라는 개념이 나오는데 시스템 콜이란 운영체제(커널)가 제공하는 API를 의미하고 인터럽트 번호에 맞는 API를 호출하여 작업을 수행하게 됩니다. 자세한 내용은 이후에 다루겠습니다.
저장장치는 계층 구조를 가지고 다음과 같은 구조로 되어 있습니다.
1차 저장장치는 휘발성 메모리입니다. 특히, 레지스터와 캐시는 빠르게 동작하기 위해서 하드웨어 수준에서 통제됩니다.
모든 형테의 메모리는 바이트의 배열을 제공합니다. 각 바이트는 "자신의 주소"를 가지고 있습니다.
상호 작용은 특정 메모리 주소들이 일련의 적재(load), 또는 저장(store) 명령을 통하여 이루어지고 이 과정에서 메인 메모리와 CPU 내부의 레지스터과 관여합니다.
실행 사이클은 다음과 같습니다.
instruction fetch -> instruction decoder -> operand fetch -> execution -> interrupt search into
메인 메모리는 CPU와 가깝기 때문에 빠른 속도로 상호 작용이 이루어질 수 있지만 휘발성 메모리인데다가 저장 용량이 작습니다.
따라서, 메인 메모리의 확장으로 보조저장장치가 필요하고 가장 일반적인 보조저장장치는 하드 디스크 드라이브(HDD)와 비휘발성 메모리(NVM) 장치로, 프로그램과 데이터 모두를 위한 저장소를 제공합니다.
비휘발성 메모리의 경우, 전원이 꺼져도 유지되기 때문에 그 특성에 맞게 필요한 메모리들이 저장되어 있습니다.
이를테면 운영 체제는 부트스트랩 프로그램, 일반적으로 "부트로더"라고 불리고 이것은 펌웨어에 저장되어 있으며, 펌웨어는 컴퓨터의 비휘발성 메모리에 위치합니다.
3차 저장장치는 다른 장치에 저장된 자료의 백업 사본을 저장하기 위해 특수 목적으로만 사용하기에 매우 느리고 충분히 큰 장치입니다.
I/O는 인터럽트와 밀접한 관련이 있고, I/O 작업은 모든 동작 중에 거의 가장 느린 성능을 보여줍니다.
만약, CPU가 이런 작업에 많은 자원을 사용하게 된다면 컴퓨터의 성능이 매우 저하될 것입니다.
따라서, 이 문제를 해결하기 위해서 직접 메모리 액세스(DMA)가 사용됩니다.
DMA(Direct Memory Access): 일반적으로, CPU는 메모리와 모든 데이터 전송을 관리합니다. 하지만 NIC와 같은 일부 하드웨어 장치는 CPU의 개입 없이 메모리와 직접 데이터를 전송할 수 있는 DMA 기능을 가지고있습니다. DMA를 사용하면 NIC는 시스템 메모리에 직접 데이터를 읽거나 쓸 수 있으므로, 중간의 버퍼링 단계나 CPU의 개입을 줄일 수 있습니다.
위에서 인터럽트가 수행되는 과정을 간단히 살펴보았는데 일반적으로는 해당 모든 과정에 CPU가 개입됩니다. 하지만, DMA 컨트롤러를 사용하게 될 경우에 CPU는 DMA 컨트롤러에게 작업을 위임하게 되면서 I/O 작업이 실행되는 시점부터는 CPU는 다른 작업을 수행하게 됩니다.
자세한 내용은 뒤에서 다룰 것 같으니 뒤에서 정리하도록 하겠습니다.
컴퓨터 시스템은 사용된 범용 처리기의 수에 따라 분류 가능한 다양한 방식으로 구성될 수 있습니다.
하나씩 알아보도록 합시다.
단일 처리기 시스템은 단일 처리 코어를 가진 하나의 CPU를 포함하는 단일 프로세서를 사용했습니다.
코어는 명령을 실행하고 로컬로 데이터를 저장하기 위한 레지스터를 포함하는 구성요소입니다.
다중 처리시 시스템은 하나의 처리기(칩)에 각각 단일 코어 CPU가 있는 두개 이상의 프로세서가 있습니다.
다중 처리기 시스템의 주요 장점을 처리량 증가입니다. 즉, 프로세서 수를 늘리면 더 적은 시간에 더 많은 작업을 수행할 수 있습니다. (여러 프로세서가 협력시 시스템 버스 공유 및 메모리 공유로 인해 오버헤드가 발생하므로 고려하여 설계해야함)
가장 일반적인 다중 처리기 시스템은 각 피어 CPU 프로세서가 운영체제 기능 및 사용자 프로세스를 포함한 모든 작업을 수행하는 SMP(symmetric multiprocessing)를 사용합니다.
프로세서 간에 로컬 캐시 및 자체 레지스터 세트를 별도로 가지고 있지만 시스템 버스를 통해 물리 메모리를 공유합니다.
이 방식에는 장단점이 존재하는데,
여기서 중요한 개념 하나가 나오는데,
칩 내 통신이 칩 간의 통신보다 빠릅니다.
그래서 현대에는 여러 개의 컴퓨팅 코어가 단일 칩에 상주하는 다중 코어 시스템을 포함하고 있습니다.
전력적인 측면에서도 여러 개의 단일 코어 칩을 사용하는 것이 다중 코어 단일칩보다 전력 소모가 많습니다.
마지막으로 컴퓨터 시스템의 구성 요소를 간단하게 정의하고 마무리 합시다.
클러스터형 시스템은 여러 CPU를 가진 시스템의 또 다른 유형으로, 둘 이상의 독자적 시스템 또는 노드들을 연결하여 구성합니다.
각 노드는 통상 다중 코어 시스템이고 약결합(loosely coupled)이라고 간주됩니다.
클러스터링은 통상 높은 가용성(availability)을 제공하기 위해 사용됩니다.
클러스터링은 비대칭적으로 또는 대칭적으로 구성될 수 있습니다.
병렬화라는 기법으로 프로그램을 컴퓨터의 개별 코어에서 혹은 클러스터의 각 컴퓨터에서 수행되는 분리된 요소로 나누는 작업을 포함합니다.
쉽게 말하자면, 작업을 분산하여 개별적으로 수행 후 결과를 집계하여 빠르게 동작을 수행하는 것을 의미합니다.
⚡️ 운영체제에서 병렬화 ⚡️
현재, 병렬화라는 단어가 나왔는데 필자가 알고 있는 병렬화는 약 3군데에서 사용됩니다.
1. 멀티 코어를 이용한 병렬화
- 목적: 여러 CPU 코어를 활용하여 병렬 처리를 수행함으로써, 프로그램의 실행 시간을 단축시킵니다.
- 방식: 단일 프로세서 내에 있는 여러 코어에서 동시에 여러 작업을 수행합니다. 이는 특히 데이터 병렬성(data parallelism)이나 태스크 병렬성(task parallelism)을 활용하는 작업에 적합합니다.
- 예시: 이미지 처리, 과학적 계산, 빅 데이터 분석 등에서 데이터를 여러 조각으로 나누어 각 코어에서 동시에 처리합니다.
2. 클러스터링을 이용한 분산 병렬화
- 목적: 여러 컴퓨터(노드)의 자원을 활용하여 대규모의 병렬 처리를 수행합니다.
- 방식: 클러스터 내의 다수의 독립적인 컴퓨터가 네트워크를 통해 연결되어, 복잡하고 대용량의 작업을 분산 처리합니다.
- 예시: 고성능 컴퓨터(HPC), 대규모 웹 서비스, 분산 데이터베이스 시스템 등에서 사용됩니다.
3. 시분할을 이용한 병렬 처리
- 목적: 단일 CPU내에서 여러 프로세스 또는 스레드를 시간적으로 분할하여 실행함으로써, 병렬처리 효과를 냅니다.
- 방식: 시분할 시스템에서는 CPU 시간을 작은 단위로 분할하여 여러 작업에 할당합니다. 이는 동시에 여러 작업이 실행되는 것처럼 보이게 합니다.
- 예시: 운영 체제의 멀티태스킹 환경에서 여러 프로그램이 동시에 실행되는 것처럼 처리합니다.
운영체제는 "부트로더"라고 불리며 펌웨어 즉, 비휘발성 메모리에 저장되어 있다고 위에서 말했습니다.
부트스트랩 프로그램은 운영체제를 적재하는 방법과 해당 시스템 실행을 시작하는 방법을 알아야 합니다.
이 목표를 달성하려면 부트스트랩 프로그램이 운영체제 커널을 찾아 메모리에 적재해야 합니다.
커널이 적재되어 실행되면 시스템과 사용자에게 서비스를 제공할 수 있습니다. 그 외 적재되어야 하는 서비스(이를테면 시스템 데몬)가 있다면 시스템 프로그램에 의해 커널 외부에서 제공되어 실행될 것이고 이러한 과정이 다 마무리가 된다면 시스템은 완전히 부팅되고 시스템은 어떤 이벤트가 발생할 때까지 기다립니다.
이벤트가 발생한다면 거의 항상 인터럽트를 발생시켜서 신호를 보낼 것입니다. 인터럽트의 형태는 하드웨어의 인터럽트 혹은 트랩으로, 오류 또는 사용자 프로그램의 특정 요청 때문에 발생하는 소프트웨어 생성 인터럽트입니다.
이 특정 요청은 시스템 콜이라는 특수 연산을 실행하여 요청되고 "운영체제가 제공하는 서비스"가 수행될 것을 요구합니다.
운영체제의 가장 중요한 측면 중 하나는 하나의 프로그램은 일반적으로 항상 CPU나 I/O 장치를 항상 바쁘게 유지할 수 없으므로 여러 프로그램을 실행할 수 있다는 것입니다.
CPU의 사용율을 높이기 위해 다중 프로그래밍을 사용하고, 이 말은 즉 운영체제는 여러 프로세스를 "동시에 메모리에 유지"한다는 것
을 의미합니다.
다중 테스킹(multitasking)은 다중 프로그래밍의 논리적 확장으로 시분할 시스템을 이용해서 여러 프로세스를 빠르게 전환해가며 실행하는 것을 의미합니다.
이렇게 여러 프로세스를 동시에 메모리에 올려놓고 사용하기 때문에 고려해야 되는 점이 몇가지 있습니다.
이러한 작업들은 나중에 CPU 스케줄링과 가상 메모리를 다루면서 이야기 될 것이다.
가상 메모리는 물리 메모리를 논리적 메모리로 접근할 수 있도록 추상화 시킨 형태로 프로세스들이 메모리에 접근할 때는 가상 메모리를 통해서 접근하도록 한다.
이렇게 함으로써 운영체제가 메모리를 관리할 수 있는 헝태가 만들어지기 때문에 위와 같은 작업들이 가능해집니다. 나중에 자세히 다루겠습니다.
시스템을 올바르게 실행하려면 운영체제 코드 실행과 사용자-정의 코드 실행을 구별할 수 있어야 합니다.
따라서, 대부분의 컴퓨터 시스템이 취하는 접근 방식은 다양한 실행 모드를 차별화 할 수 있는 하드웨어 지원을 제공하는 것입니다.
적어도 두개의 독립된 연산 모드, 즉 사용자 모드와 커널 모드[수퍼바이저 모드, 시스템 모드, 혹은 특권 모드(privileged mode)로도 부른다]를 필요로 합니다.
모드 비트(mode bit)라고 하는 하나의 비트가 현재의 모드를 나타내기 위해 컴퓨터의 하드웨어 추가 되었습니다. 이 비트는 커널 보드(0) 또는 사용자 모드(1)를 나타냅니다.
사용자 모드와 커널 모드가 전환할 때 해당 비트의 변경이 "무조건" 이루어져야 하고, 이 비트를 이용해서 "권한"을 확인할 수 있습니다.
예를 들어, 시스템 부트를 하는 과정을 살펴보겠습니다.
이러한 모드 비트를 이용해서 특권 명령(priviledged instruction)을 지정함으로써 악의적은 접근으로부터 보호를 할 수 있다는 것을 명심해두자.
모드의 개념은 두 가지 모드 이상으로 확장될 수 있으며, 실제로 Intel 프로세서에는 4개의 분리된 보호 링이 있다고 합니다. 가상화를 지원하는 CPU는 종종 VMM(virtual machine manager)이 시스템을 지원하는 시점을 표시하기 위한 별도의 모드를 가진다고 합니다.
사용자 응용 프로그램이 실행이 되면서 제어가 사용자 모드에 있는 상황에서 어떻게 커널 모드로 넘어가서 작업을 수행할 수 있을까?
이것을 도와주는 것이 시스템 콜입니다.
시스템 콜은 운영체제가 제공하는 API를 실행하는 것으로 일반적으로 인터럽트 벡터의 특정 위치로 트랩을 거는 형태를 취합니다. 특정 인터럽트에 설정되어있는 서비스를 실행하게 될 것이고 해당 서비스를 ISR(Interrupt Service Routine)이라고 합니다.
사용자 프로그램이 무한 루프(infinite loop)에 빠지거나 시스템 서비스 호출에 실패하여, 제어가 운영체제로 복귀하지 않는 경우가 없도록 반드시 방지해야 합니다.
이러한 목적을 달성하기 위해, 타이머(timer)를 사용할 수 있습니다.
운영체제는 자원 관리자입니다. 어떠한 자원들을 어떻게 관리하는지 살펴봅시다.
프로세스는 한 시스템 내의 작업의 단위로 프로그램은 수동적(passive) 개체이고, 프로세스는 프로그램 카운터(program counter)를 가진 능동적(active) 개체임을 알아두자.
운영체제는 프로세스 관리와 연관해 다음과 같은 활동에 책임을 집니다.
폰 노이만 방식의 컴퓨터에서는 CPU가 명령어를 인출하고 해독하고 실행하기 위해서는 명령어는 메인 메모리 내에 있어야 합니다.
프로그램이 수행되기 위해서는 반드시 절대 주소로 매핑(mapping)되고 메모리에 적재되어야 합니다.
운영체제는 메모리 관리와 관련하여 다음과 같은 일을 담당해야 합니다.
컴퓨터 시스템의 편리한 사용을 위해, 운영체제는 정보 저장장치에 대한 "균일한 논리적 관점"을 제공합니다. 운영체제는 저장장치의 물리적 특성을 추상화하여 논리적인 저장 단위인 파일을 정의합니다.
운영체제는 파일을 물리적 매체로 매핑하며, 저장장치를 통해 이들 파일에 접근합니다.
또한 파일은 특성에 맞게 저장 위치를 결정하는데 물리 매체의 속성은 접근 속도, 용량, 데이터 전송률, 그리고 접근 방식(순차 접근 방식 또는 임의 접근 방식) 등이 있으므로 이러한 점들을 고려해서 어느 물리 매체에 저장을 할 것인지 결정합니다.
파일들을 효율적으로 관리하기 위해서 디렉토리를 구분하고, 권한을 부여하는 작업을 통해 접근을 통제하는 것이 바람직합니다.
운영체제는 파일 관리를 위하여 다음과 같은 일을 담당합니다.
운영체제는 보조저장장치 관리와 관련하여 다음 활동을 담당합니다.
캐싱은 컴퓨터 시스템의 중요한 원리입니다.
메인 메모리보다 접근 속도가 빠르며, 캐시에 정보가 있는지 확인 후 없다면 메인 메모리 시스템으로부터 그 정보를 가져와서 사용하는 방식으로 동작할 것입니다.
CPU 내부의 프로그램 가능한 레지스터들은 메인 메모리를 위한 고속의 캐시로 볼 수 있습니다.
캐시에는 두 가지 종류가 있습니다.
메모리가 계층 구조를 이루고 있기 때문에, 같은 데이터임에도 불구하고 여러 저장 공간에서 발견될 수 있습니다.
또한, 레지스터 또는 캐시의 경우 CPU가 개별적으로 가지고 있을 수 있기 때문에 일관성 문제가 발생할 수 있습니다.
캐시에서 발생하는 일관성 문제를 캐시 일관성 문제라고 합니다. 이는 다중 프로세스를 다룰 때 주의할 점입니다.
이는 하드웨어적 문제입니다.
입출력 시스템은 다음과 같이 구성되어 있습니다.
만약 컴퓨터 시스템이 다수의 사용자를 가지며 다수 프로세스를 병행 수행을 허용한다고 한다면, 운영체제는 각 프로세스에게 자원을 할당함과 동시에 각 프로세스에게 제공해주는 자원을 잘 격리하여 서로 다른 프로세스가 다른 프로세스의 자원에 접근하는 것을 막아줘야 합니다.
그러기 위해서 필요한 것이 보호(protection)입니다.
보호(protection)란 컴퓨터 시스템이 정희한 자원에 대해 프로그램, 프로세스, 또는 사용자들이 접근을 제어하는 기법입니다.
해당 기법을 사용함으로써, 자원에 대한 보호는 물론이고 각 요소(서브 시스템)가 오류 검출을 수행함으로써 오류가 발생했을 때 확산되는 것을 방지할 수 있습니다.
컴퓨터 시스템은 충분한 보호 기능이 있더라도 여전히 고장이 나거나 부적절한 접근을 허용할 수 있습니다. 예를 들어, 사용자 인증 정보가 도난되면 외부에서 이것을 악용할 수 있을 것입니다.
이러한 외부 또는 내부의 공격을 방어하는 것이 보안 기능입니다.
보호와 보안을 제공하기 위해서는 시스템의 모든 사용자를 구분할 수 있어야 합니다. 운영 체제의 대부분은 사용자 이름과 연관된 사용자 식별자(user IDs)의 리스트를 유지합니다.
해당 기능은 사용자들을 그룹화하는 것도 가능하고 사용자 혹은 그룹에 연산 권한을 부여함으로써 자원을 보호합니다.
가상화는 단일 컴퓨터의 하드웨어를 여러 가지 실행 환경으로 추상화하여 개별 환경이 자신만의 컴퓨터에서 실행되고 있다는 환상을 만들 수 있는 기술입니다.
간단하게 말하자면, 메인 운영체제(호스트 OS) 위에서 서브 운영체제(게스트 OS)들이 독립적인 프로세스처럼 동작하는 것을 의미합니다. 실제로 서브 운영체제들은 개별 프로세스로서 메인 운영체제 위에서 실행되며, 각각이 독립된 자원(메모리, CPU 등)을 할당받아 사용합니다.
넓게 말하면 가상화 소프트웨어는 에뮬레이션을 포함하는 클래스의 구성원입니다.
소프트웨어로 컴퓨터 하드웨어 시물레이션 하는 에뮬레이션은 일반적으로 소스 CPU 유형이 대상 CPU 유형과 다른 경우에 사용됩니다.
⚡️ 에뮬레이션 ⚡️
에뮬레이션은 한 시스템(보통 소프트웨어)이 다른 시스템(보통 하드웨어)의 기능을 모방하는 것을 의미합니다. 이 과정에서 에뮬레이터라는 소프트웨어는 모방하려는 하드웨어의 동작을 시물레이션하여 해당 하드웨어 없이도 그 기능을 구현할 수 있게 합니다.
에뮬레이션의 특징
- 하드웨어 모방: 에뮬레이터는 다른 컴퓨터 하드웨어의 기능과 동작을 모방합니다. 예를 들어, 오래된 비디오 게임 콘솔을 에뮬레이터로 구현하여 현대 컴퓨터에서 그 게임들을 실행할 수 있습니다.
- 가상 환경 제공: 에뮬레이터는 다른 시스템의 환경을 소프트웨어적으로 재현합니다. 이는 특정 운영체제나 하드웨어 플랫폼에 종속되지 않는 테스트 및 개발 환경을 제공할 수 있습니다.
- 성능과 정확성의 균형: 에뮬레이션은 정확한 하드웨어 동작의 모방을 중시하지만, 이로 인해 성능이 저하될 수 있습니다. 에뮬레이터는 모방하려는 하드웨어의 모든 세부 사항을 처리해야 하므로, 때로는 실제 하드웨어 보다 느릴 수 있습니다.
에뮬레이션의 사용 사례
- 게임 콘솔 에뮬레이션: 오래된 게임 콘솔을 에큘레이트하여 현대 컴퓨터나 다른 플랫폼에서 게임을 실행합니다.
- 소프트웨어 개발: 다른 운영 체제나 플랫폼용 소프트웨어를 개발할 때, 에뮬레이터를 사용하여 해당 환경을 재현하고 테스트합니다.
- 하드웨어 테스트 및 시뮬레이션: 새로운 하드웨어 설계를 테스트하고 검증하기 위해 에뮬레이터를 사용할 수 있습니다.
에뮬레이션과는 다르게 가상화는 특정 CPU를 위해 컴파일된 운영체제가 동일 CPU영의 다른 운영체제 내에서 수행되빈다.
여기서, Window에서 많이 사용하는 Vmware가 등장하는 것이고, Windows는 호스트 운영체제이고 VMware 응용은 가상 머신 관리자(VMM)입니다.
VMM을 사용하여 여러 게스트 OS를 실행할 수 있게 해주며, 그들의 자원 이용을 관리하며 각 게스트를 서로로부터 보호해줍니다.
분산 시스템은 물리적으로 떨어져 있는 이기종 컴퓨터들의 집합입니다. 분산 시스템의 검퓨터들은 사용자가 시스템 내의 다양한 자원들을 접근할 수 있도록 네트워크로 연결되어 있습니다.
모든 범용 운영체제들은 기본 네트워크 스택인 TCP/IP 모델을 지원하고 있습니다.
네트워크 운영체제는 다른 컴퓨터의 다른 프로세스가 메시지를 교환할 수 있도록 하는 통신 체계와 함께 네트워크를 통한 파일 공유와 같은 기능을 제공하는 운영체제입니다.
여기서는 커널에서 사용하는 자료구조 및 여러 자료구조에 대해서 설명되어 있습니다.
대표적인 사용처를 정리를 해보자면 다음과 같을 수 있습니다.
이후 계산 환경과 무료 및 공개 소스 운영체제에 대해서 다루는데 해당 파트들은 읽기는 하지만, 현재는 정리를 하지 않을 예정입니다.
앞에서 다룬 내용들을 가지고 실제로 활용하는 사례를 보여주는 해당 파트들은 앞서 언급되는 내용들을 읽고나서야 비로소 내용들을 폭 넓게 이해하고 받아들일 수 있을 것이라고 판단하였기 때문입니다.
해당 운영체제 책을 온전히 이해하는 시점이 온다면 그 때 나머지 두 파트를 읽고 정리하도록 하겠습니다.