운영체제로 부팅한 후, 다른운영체제를 불러온다는것은 사실상 불가능한 일입니다.
잘 모르시는분들은 버쳘박스나 와인등을 보고 그게 가능하지 않을까? 생각하시는데 거의 불가능합니다.
컴퓨터 부팅과정을 설명드리자면…
먼저 전원이 켜지면, 하드웨어 동작이 진행되어 롬바이오스가 제어권을 갖습니다.
롬바이오스는 롬(ROM-Read Only Memory)과 바이오스(BIOS-Basic Input Ouput System)의 합성어입니다.
ROM은 RAM(Random Access Memory)와 다르게 출고당시 전기-전자적으로 프로그램되어 있습니다.
이 롬바이오스에서 컴퓨터의 메인보드와 메모리,주변장치들을 검색하고, 그러한 장치들을 사용할 수 있도록 초기화하고,
이후에 기동될 운영체제에서 이러한 장치들을 컨트롤할 수 있도록 정보를 메모리에 담습니다.
그리고, 각종 제어기능들을 제공하게 됩니다. 이것을 롬바이오스펑션(Rom bios function)이라고 합니다.
이렇게 하드웨어장치들을 초기화하는 과정을 하드부팅(hard boot)라고 합니다.
그리고 나서, 외부장치로 부팅을 시도합니다.
이과정에서 하드디스크의 첫번째 저장영역에 접근하고, 보통 이것을 MBR(master boot record)라고 합니다.
MBR에는 각 운영체제별로 자신의 운영체제로 접근할 수 있게 하는 부트코드가 들어가고, 이 부트코드로 점프하여 운영체제로 부팅이 시작됩니다.
여기서 부터가 웜부팅(warm boot)라고 하며, 운영체제를 로드하고… 운영체제가 기능을 초기화하는 과정을 말합니다.
보통 운영체제는 롬바이오스펑션과 메모리에 담긴 롬바이오스정보를 기반으로 고유의 기능들을 제공합니다.
그러한 기능들을 시스템 펑션(system function)혹은 시스템콜(system call)이라고 합니다.
일반 어플리케이션들은 이런 시스템펑션을 사용하게 됩니다.
보통은 롬바이오스 펑션에 직접접근의 불가능하게 됩니다.
운영체제를 통과(by-pass)하여 하드웨어를 제어하는것을 방지하기 위해…
운영체제들은 메모리내의 롬바이오스제어기능들을 숨기고, 운영체제를 통해 합법적으로 접근하게
기능들을 교체하게 됩니다.
그리고는, 드라이버(driver)라는 형태를 제공하여, 하드웨어 저작자가 제공하는 기능들을
운영체제에서 관리하고, 어플리케이션은 운영체제에서 제공하는 기능을 통해 간접적으로 드라이버의 기능을 사용하게 됩니다.
이러한 기능들을 모두 합하여 커널이라고 합니다.
운영체제는 이러한 커널과 커널과 소통하는 쉘, 그리고 기본적인 어플리케이션들로 구성되어 있습니다.
각각의 운영체제는 각각의 특징이 있고, 기능도 각기 다르기 때문에…
시스템펑션이 다 다를 수 밖에 없고, 이것은 소프트웨어의 가장 근저에 위치하고 있기에 교체될 수 없습니다.
그렇기 때문에 하나의 운영체제로 부팅한 후, 다른 운영체제를 불러온다는 것은 사실 상 불가능한 일입니다.
qemu, virtualbox, vmware등은 가상머신으로, 컴퓨터를 통째로 가상화하는 것입니다.
컴퓨터가 하나 따로 있는 것 처럼 흉내내고, cpu자체도 가상화하느냐에 따라 para-virtual인가가 구분될 뿐입니다.
그러한 가상컴퓨터 위에, 운영체제를 설치하는 것이지요.
하지만 가상머신위에도 가상의 하드웨어가 존재해야 하고, 이것은 실제 하드웨어와는 다른것이기에, 직접적으로 하드웨어에 접근할 수는 없습니다.
wine(windows emulator)은 에뮬레이터로서, 일반 어플리케이션과 같은 것입니다.
윈도우즈기능들을 분석해서 그와 동일하거나, 유사한 기능을 하도록 리눅스시스템 프로그래밍으로 작성된것입니다.
그리고는 wine에뮬레이터가 그러한 기능들을 제공함으로써, 윈도우즈 실행파일들은 윈도우즈가 설치되어 있다고, 착각하는 것이지요.
하지만 하드웨어를 접근하는 프로그램들은 wine에서 동작될 수 없습니다.