※ 여기서 표현되는 윈도우 는 윈도우 3.1이후 즉,윈도우95/98 을 의미합니다.
윈도우 에 의해 만들어진 환경은 여러 개의 '가상기계(Virtual Machine)'들 처럼 보일 수 있습니다. 이 개념은 사용자가 실제로 보고 만지고 조절할 수 있는 컴퓨터, 즉 '물리적기계'와는 다른 개념입니다. 가상기계는 물리적 컴퓨터 내에 존재하는 '논리적 컴퓨터'를 나타냅니다. 요컨대 소프트웨어에 의해 창조된 컴퓨터 시스템을 말합니다. 이 경우에 소프트웨어는 운영체제(OS)를 말합니다.
윈도우에서 어떤 응용 프로그램을 실행시킬 때 이 프로그램은 가상의 기계에서 작동됩니다. 응용 프로그램이 실행되고 있는 상황에서 이 프로그램은 컴퓨터를 완벽히 통제합니다. 정확히 말하자면 컴퓨터의 일부분만이 통제되고 상위 레벨(운영체제)이 전체 컴퓨터를 통제하는 것입니다.
사용자는 물리적 컴퓨터 안에서 여러 개의 가상 기계를 실행시키는 것이 가능합니다. 각각의 가상 기계에서 실행되는 프로그램은 다른 가상 기계에서 실행하는 프로그램들과 완전히 개별적입니다.
윈도우 운영체제에서 두 가지 유형의 가상 기계들(VMs)이 만들어질 수 있습니다. 첫 번째 가상 기계는 항상 실행되며 '시스템 가상기계(System virtual machine)'로 불립니다. 사용자는 이 가상 기계에서 윈도우 응용 프로그램들을 실행시키는 것입니다. 가상 기계의 또 하나의 유형은 'DOS 가상기계(Dos Virtual Machine)' 로서 제공됩니다. 이 유형은 MS-DOS용 응용 프로그램들의 실행에 사용됩니다. 여러 개의 도스 가상기계(DOS VMs)를 사용할 수 있는 것을 제외하면 윈도우 에서는 한가지의 시스템 가상 기계만을 사용할 수 있습니다.
왜 두 가지 유형의 VMs가 필요할까요? 해답은 DOS입니다. 원래 DOS가 싱글 유저 운영체제이므로 대부분의 DOS 용 프로그램들은 그들이 실행될 때는 그 자신만이 시스템의 주인이라고 생각하고 사용자는 다른 프로그램을 동시에 사용할 수 없게 되기 때문입니다. 이것은 도스만이 사용되던 시절부터의 전통이었고 이 때에는 한번에 한 프로그램만이 실행되었습니다. 그러나 지금은 도스용 프로그램에게 가상 기계 환경을 조성해 줌으로써 윈도우 는 훌륭하게 시스템에서 다른 소프트웨어를 운용할 수 있는 것입니다.
⊙ 윈도우에서 시스템 관리
운영체제는 파일관리자(File Manager)와 가상 기계 관리자(VMM : Virtual Machine Manager)라는 두 가지 주요 부분으로 구성됩니다. VMM은 앞에서 설명했듯이, 가상 기계들을 만들고 이를 통제하기위해 존재합니다. VMM 기능에 대해 아는 것은 전체 운영체제에 대해 이해하는데 많은 도움을 줍니다.
실제로 윈도우의 모든 기능들이 VMM의 도움을 받는다. VMM은 시스템의 다양한 자원들을 관리하고 그들을 사용 가능하게 하기 위해서 필수적입니다. 시스템의 관리에서 VMM 은 여러 중요한 책임을 지고 있습니다.
▶ 메모리관리
VMM의 이런 책임들은 '메모리페이징(Memory Paging)'으로 불리는 기술에 의해 가능해집니다. 이는 VMM이 가능한 한 스왑 파일에서 정보들을 이리저리 옮겨야 하기 때문입니다. 시스템의 모든 가상 기계는 번지 영역을 가지고 있습니다. 이 크기는 4GB 이고 이 메모리를 가상 메모리 라고 합니다. 각각의 4GB 번지 공간은 운영체제와 이 공간에서 실행되고 있는 프로그램에 각각 배정됩니다. 처음의 2GB 는 곧장 그 프로그램에서 사용되고, 남은 2GB 는 운영체제(OS)에 의해 사용됩니다.
메모리 페이저(Memory Pager)는 윈도우에서 메모리의 이동을 취급하는 VMM 의 일부분입니다. 메모리 페이저는 어느 시스템에서나 메모리 는 부족한 자원이기 때문에 꼭 필요합니다. 윈도우 는 요구 페이징(Demand Paging) 이라고 불리는 기술을 사용합니다. 프로그램이나 데이터의 일부가 더 이상 필요 없어지면 물리적 메모리로 인식될 수 없는 영역이나 하드 드라이브의 스왑 파일로 이동됩니다. 이 후에 그 데이터나 프로그램이 필요합니다면, 그 프로그램이 계속 사용하던 작업 메모리로 되돌려집니다.
메모리 페이징(Memory Paging)은 시스템 내부에서 자동적으로 이루어집니다. 이것은 사용자의 프로그램들이 언제 이것을 필요로 하는지를 걱정할 필요가 없다는 것과, 사용자는 메모리페이징 에 대해 신경 쓸 필요가 없음의 의미합니다.
▶ 프로세스 스케쥴링
윈도우에서 프로세스(Process)는 시스템에서 실행되는 프로그램을 말합니다. 만약 사용자가 마이크로소프트사의 Excel을 실행하고 있다면 이것이 곧 프로세스입니다. 마찬가지로 다른 응용 프로그램 역시 프로세스에 속합니다.
이것은 쓰레드(Threads) 라고 불리는 다중의 독립적인 절차에 따라 운영됩니다. 쓰레드는 전체 프로그램에 필요한 사전에 약속한 기능을 이행하는데 필요합니다. 예를 들어 엑셀프로그램을 사용할 때, 한 쓰레드는 백그라운드로 재배치 작업을 수행하는데 사용되며 또 다른 쓰레드는 입력을 위해 키보드를 통제하는데 사용됩니다.
각각의 의무를 실행하는 데 있어서 프로세스와 프로세스의 쓰레드들은 자원들을 사용합니다. 프로세스 스케쥴러(Process Scheduler) 는 서로다른 프로세스들이 필요한 자원들을 인식하고 사용할 수 있도록 할 책임이 있는 VMM의 일부분입니다.
▶ 자원할당
자원(Resource)은 컴퓨터에 부속된 여러 가지 용량과 디바이스들을 표현하는데 다소 막연한 개념입니다. 예를 들면 디스크 드라이브 들이나 프린터, 직력포트,비디오 스크린, 그리고 여러 아이템처럼 메모리 또한 자원입니다. 프로세스가 업무를 수행할 수 있는 컴퓨터의 일부분을 자원이라고 생각하면 됩니다.
시스템 자원들은 프로세스 제어기에 의해 다른 프로세스들에게 할당됩니다. 각각의 프로세스가 자원 사용하기를 의뢰할 때 이 의뢰는 프로세스 관리자에 의해 조절됩니다. 이 때 자원이 사용 가능하다면 해당 프로세스에 할당됩니다. 만약 다른 프로세스가 같은 자원을 사용하기를 요청한다면 프로세스 제어기는 어떤 프로세스가 자원을 먼저 사용할 것인지를, 또 언제 이용가능한지를 결정해 줍니다. 자원은 세가지 방식으로 프로세스에게 접근될 수 있습니다.
♠ 동시 접근(Shared Access) : 이것은 자원이 두 가지 혹은 여러개의 프로세스에게 동시에 사용될 수 있음을 의미합니다. 메모리(RAM) 나 디스크 드라이브가 예입니다.
♠ 순차적 접근(Sequential Access) : 이런 유형의 자원은 한 가지 프로세스가 사용한 후에만 다른 프로세스가 사용할 수 있습니다. 아마도 대표적인 예는 프린터일 것입니다.
♠ 독자적 접근(Exclusive Access) : 이것은 한 자원이 한 가지 프로세스에게만 사용될 수 있음을 의미합니다. I/O 포트, 키보드, 모뎀 등이 예입니다.
프로세스 제어기는 확실히 시스템 각각의 자원과 프로세스 양자가 서로를 비슷하게 사용될 수 있도록 하는 것이 가능합니다. 즉 충돌이 발생하지 않도록 조정하고 모든 프로세스가 자원을 활용할 기회를 갖도록 합니다.
▶ 멀티태스킹(Multitasking)
멀티태스킹이란 동시에 여러 개의 프로세스들이 운영될 수 있는 능력입니다. 윈도우 는 다중 프로세싱을 수행하기 위한 두 가지 방식을 사용합니다. 이 방법이란 협력 멀티태스킹(Cooperative Multitasking) 과 선제 멀티태스킹(Preemptive Multitasking)을 말합니다.
윈도우3.1 용 16비트 프로그램을 실행할 때는 협력 멀티태스킹이 사용됩니다. 협력 멀티태스킹은 시스템에서 수행되고 있는 프로세스들간을 스위칭함으로써 가능합니다.
예를들어 협력 멀티태스킹 중에 어떤 프로세스가 CPU를 필요로 한다면 필요한 시간을 알리기 위해 대기 행렬(Queue :큐) 에 메시지를 제출할 것입니다. 통제에 사용되는 프로세스는 어떤 다른 프로세스가 통제가 필요한지를 알아보기 위해 정기적으로 대기행렬을 확인합니다. 이 때 메시지가 확인되면, 이 통제 프로세스는 실행을 중단하고 다른 프로세스가 실행을 시작합니다. 이러한 접근의 문제점은 언제 프로세스가 대기 행렬을 체크할 것인가에 대한 일정한 표준이 없다는 것입니다. 그 결과로 어떤 프로그램은 다른 프로그램이 5내지 10초당 한번꼴로 체크하는데 비해 1초당 수회를 체크해야 합니다. 그러면 몇몇 프로세스들은 보다 많은 CPU 시간을 사용해야 합니다.
멀티태스킹의 다른 방식인 선제 멀티태스킹은 보다 강력하고 진보된 것입니다. 이 유형의 멀티태스킹에서 운영체제는 CPU를 보다 적절히 사용합니다. 이 방식은 응용 프로그램이 CPU를 점유하고 있다하더라도 운영체제가 제어권을 가지고 다른 응용 프로그램이나 시스템 프로세스에게 CPU를 할당해 줄 수 있는 방식입니다. 윈도우 에 의해 특별하게 만들어진 32비트 응용 프로그램은 이 유형의 멀티태스킹으로 많은 이익을 얻게됩니다. 운영체제 스스로가 CPU 시간을 결정하기 때문에 16비트 응용 프로그램이 실행될 때 발생하던 오버헤드(Overhead) 는 더 이상 발생하지 않습니다. 32비트 프로그램을 사용하는 것이 좀더 간편합니다. 그리고 프로세스 제어기에 의해 과거의 방식보다 CPU 시간이 보다 각 프로세스들에게 공평하게 할당되기 때문에 응용 프로그램들은 보다 자연스럽고 안전하게 작동합니다.
또 다른 VMM의 책임 중 하나가 시스템의 디바이스 드라이버들을 관리하는 것입니다.
이것은 디바이스 드라이버에 의해 관리되는 자원의 스케쥴을 VMM이 관리하기 때문에 또 다른 효과를 가져옵니다. 윈도우는 가상 디바이스 드라이버를 사용합니다. 가상 디바이스 드라이버는 자원을 보다 동등하게 사용될 수 있게 관리하는 코드 계층입니다. 각각의 디바이스 드라이버의 임무중의 하나는 멀티태스킹 때의 디바이스의 상태나 실행의 선후 관계를 놓치지 않는 것입니다.
가상 디바이스 드라이버는 일반적으로 VxD라고 불리는데 V는 가상(Virtual)을 의미하고 D는 디바이스( Device)를 의미합니다. 그리고 디바이스 드라이버의 여러 유형을 편의상 x로 표현하고 있습니다. 즉, VxD 는 일반적인 가상의 디바이스 드라이버를 말하며 VDD는 가상의 디스플레이를 말합니다. VxD들은 VMM에 의해 필요할 때만 설치됩니다. 이 방식의 디바이스 드라이버 관리법은 윈도우의 대단히 큰 개선점입니다.
윈도우에 가장 적절한 드라이버로 보호모드(Protected Mode) 드라이버들이 제공됩니다. 가능합니다면 시스템에서 공급하는 드라이버들을 사용하는 것이 좋습니다. 실제모드(Real Mode:16비트) 드라이버들이 사용될 때 윈도우는 가상의 8088 모드로 전환해야 하므로 수행속도가 저하됩니다. 디바이스에서 I/O(Input/Output)가 발생할 때마다 실제 모드 드라이버를 사용하며 시스템 역시 실제모드로 전환해야 합니다. 이것은 결국 CPU 사이클을 낭비하는 것이며 실행속도를 크게 저하시킵니다.
▶ MS-DOS 모드의 운영
VMM의 마지막 중요한 업무는 시스템이 MS-DOS 모드로 실행될 때 이를 통제하는 것입니다. 윈도우 상의 DOS 창 모드를 말하는 것이 아닙니다. MS-DOS 모드는 DOS 용 프로그램을 실행시키기 위해 시스템을 배타적으로 사용합니다. 이 모드는 매우 독단적인 모드이며 이전 시스템의 DOS를 실행하는 것과 비슷합니다.
MS-DOS 모드로 운영될 때 시스템에서 다른 응용 프로그램은 실행될 수 없습니다. MS-DOS 모드로 전환될 때 VMM 은 실행되고 있는 다른 프로그램들을 닫게됩니다. DOS 모드에서 실행되고 있는 프로그램이 완결되었을 때 시스템을 다시 초기화하는 단한가지 방법은 재부팅하기위해 시스템을 다시 시작하는 것입니다.