본문으로 이동

DPMI

위키백과, 우리 모두의 백과사전.
DOS Protected Mode Interface
상태출판됨
시작 연도1989년(37년 전)(1989)
조직DPMI 위원회
분야API
약어DPMI

도스 보호 모드 인터페이스(DOS Protected Mode Interface), 곧 DPMI는 1989년에 도입된 규격으로, DOS 프로그램이 보호 모드에서 실행될 수 있도록 하여 당시 리얼 모드에서는 사용할 수 없었던 PC 프로세서의 여러 기능을 활용할 수 있게 해준다. 이 규격은 처음에 마이크로소프트가 윈도우 3.0을 위해 개발했으나, 나중에 마이크로소프트는 규격의 통제권을 개방형 회원제로 운영되는 산업 위원회로 넘겼다.[1][2] 거의 모든 현대의 도스 확장자는 DPMI를 기반으로 하며, DOS 프로그램이 PC에서 사용 가능한 모든 메모리를 어드레싱하고 보호 모드(대부분 가장 권한이 낮은 링 3)에서 실행될 수 있도록 한다.[3]

개요

[편집]

DPMI는 DOS Protected Mode Interface의 약자이다. 이것은 80286 시리즈 이후의 프로세서에서 프로그램이 보호 모드로 실행되도록 하고, CPU 모드를 수동으로 설정할 필요 없이 리얼 모드로 호출할 수 있게 해주는 API이다. 또한 DPMI는 메모리와 같은 다양한 자원을 관리하는 기능을 제공한다. 이를 통해 DPMI를 지원하는 프로그램은 멀티태스킹 운영 체제에서 작동할 수 있으며, 운영 체제 커널이 여러 응용 프로그램 간에 이러한 자원을 분배할 수 있게 한다. DPMI는 슈퍼바이저 모드에서 구현되어야 하는 기능만을 제공한다. 이는 단일 태스킹 마이크로커널로 간주할 수 있다. 나머지 기능은 DPMI 지원 프로그램이 리얼 모드의 도스 및 바이오스 서비스를 호출하여 사용할 수 있으므로, DPMI API 자체는 대부분 도스와 독립적으로 유지된다. DPMI API를 도스 전용으로 만드는 요소는 도스 메모리를 관리하는 3개의 함수와 "DPMI" 약자에서 "D"라는 글자뿐이다.

DPMI 서비스는 16비트, 32비트 또는 "유니버설"일 수 있으며, DPMI 커널, DPMI 호스트 또는 DPMI 서버라고 부른다. 이는 호스트 운영 체제(가상 DPMI 호스트)나 도스 확장자(실제 DPMI 호스트)에 의해 제공된다. DPMI 커널은 DOS/4GW나 DOS/32A와 같은 도스 확장자의 일부일 수도 있고, CWSDPMI나 HDPMI처럼 별도로 존재할 수도 있다.

DPMI API의 주된 용도는 도스 확장자가 호스트 운영 체제와 무관한 환경을 제공할 수 있도록 하는 것이다. 도스 확장자는 DPMI 커널의 존재 여부를 확인하고, 이미 설치되어 있지 않은 경우에만 자신만의 커널을 설치한다. 이를 통해 도스 확장 프로그램은 자체 DPMI 커널을 제공하는 멀티태스킹 운영 체제에서 실행되거나, 베어메탈 DOS 환경에서 직접 실행될 수 있으며, 후자의 경우 도스 확장자는 자신의 DPMI 커널을 사용한다. 윈도우 3.x 및 9x의 사용자 모드 커널은 도스 확장자로 구축되어 있으므로, 윈도우의 링-0 커널이 제공하는 DPMI API에 전적으로 의존한다.

역사

[편집]

첫 DPMI 규격 초안은 1989년 마이크로소프트의 랄프 리프(Ralph Lipe)에 의해 발표되었다.[4][1] 386 향상 모드에서 윈도우 3.0을 위한 DPMI의 원형 버전을 기반으로 했지만, 랄프 리프가 원래 초안에서 제안했던 MS-DOS 확장[5] 또는 도스 API 변환이라고 불리는 기능을 포함하여 이 구현의 몇몇 기능은 공식 규격에서 제거되었다.[6] 대부분은 도스 및 바이오스 인터페이스를 구현하는 것이었다(이러한 역사 때문에 4Ch와 같은 일부 INT 21h API는 모든 DPMI 구현에서 반드시 구현되어야 한다). DPMI 버전 0.9는 1990년 새로 결성된 DPMI 위원회에 의해 발표되었다. 결과물인 규격의 버전 번호 0.9는 DPMI 위원회 회원들이 합의할 수 있었던 표준의 축소된 성격과 불완전한 상태를 반영하기 위해 선택되었다.[1] 윈도우는 호환성을 위해 DPMI 버전 0.9를 보고하지만, 실제로는 시스템의 필수적인 부분을 구성하는 다른 부분들도 구현하고 있다.[5][1] 이러한 문서화되지 않은 DPMI의 완전한 성격은 업계에서 "진정한 DPMI(true DPMI)"로 알려지게 되었다.[7] DPMI 표준이 VCPI 규격의 단점을 극복하기 위한 유일한 노력은 아니었다. 마이크로소프트가 윈도우 3.0을 위해 DPMI를 개발하던 당시에, 인텔 소프트웨어 포커스 그룹(Intel Software Focus Group),[8][1] 로터스(Lotus),[8] 디지털 리서치, 인터랙티브 시스템즈 등 다른 산업 연합체들은 386의 메모리 관리 및 멀티태스킹 기능을 확장 도스 응용 프로그램에서 사용할 수 있도록 하기 위해 확장 VCPI(XVCPI)라는 규격을 개발했다.[8][1][9] 마이크로소프트의 DPMI 제안이 유사한 문제들을 해결하고 윈도우의 지원을 받는다는 사실이 확인되자, 이러한 노력들은 1990년 2월 산타클라라의 인텔에서 열린 회의에서 DPMI 위원회를 창설하는 결과로 이어졌다.[8][1]

1991년, DPMI 위원회는 다수의 명확화 및 확장을 통합하기 위해 DPMI를 버전 1.0으로 개정했으나, 여전히 윈도우에 구현된 "진정한 DPMI" 조각들은 포함되지 않았다. 사실, "진정한 DPMI"는 공식 DPMI 규격의 일부가 된 적이 없으며, 윈도우 역시 DPMI 1.0 확장을 구현하지 않았다(그리고 많은 DPMI 호스트도 마찬가지였다).

DPMI는 확장 도스 응용 소프트웨어를 보호 모드와 확장 메모리에서 실행하도록 최적화되어 있지만,[10] 상주 시스템 확장 프로그램에는 그다지 적합하지 않다. 디지털 리서치 / 노벨이 1992년경에 개발한 DPMS라는 또 다른 규격은 수정된 도스 드라이버 소프트웨어를 확장 메모리로 쉽게 옮기고 보호 모드에서 실행하여 기존의 메모리 풋프린트를 작은 스텁으로 줄이는 요구 사항을 구체적으로 해결한다.[10] 이는 Helix Cloaking에서도 지원된다.

DPMI "방식"은 도스와 IBM PC에 특화된 것이다. 다른 컴퓨터 유형들은 16비트에서 32비트로 업그레이드되었고, 고급 프로그램 지원은 새로운 32비트 API와 새로운 메모리 관리/어드레싱 기능을 갖춘 운영 체제로 업그레이드하여 제공되었다. 예를 들어, OS/2 핵심 시스템은 32비트 프로그램을 지원하며 GUI 없이도 실행할 수 있다. DPMI 솔루션은 지배적인 운영 체제 공급업체인 마이크로소프트가 32비트 윈도우의 미래를 해결할 수 있거나 해결할 의지가 생기기 전에, 제3자가 도스 보호 모드 프로그램을 윈도우 3.x에서 안정적으로 실행해야 할 필요성을 해결하기 위해 주로 필요했던 것으로 보인다. 또한 마이크로소프트는 32비트 전환에 대한 해답을 32비트 도스가 아닌, 완전히 다른(그리고 호환되지 않는) API를 가진 32비트 윈도우로 보았다.

호환성

[편집]

윈도우 3.0은 "진정한 DPMI"를 구현하고[5] DPMI 0.9 지원을 보고하지만,[11] DPMI 버전 1.0은 마이크로소프트 윈도우에 구현된 적이 없으므로 대부분의 프로그램과 도스 확장자는 주로 0.9 버전용으로만 작성되었다. 그러나 일부 확장자는 "진정한 DPMI"를 구현한다.

Qualitas 386MAX의 베타 버전은 "진정한 DPMI"를 구현하여 명령줄에서 윈도우의 KRNL386.EXE를 실행할 수 있었으나, 내부 이메일에 따르면 출시된 제품에서는 비활성화되었다고 한다.[5] 하지만 (386MAX 코드를 기반으로 밥 스미스가 만든) DPMIONE는 이를 수행할 수 있다. 현재 DPMIONE과 386MAX는 DPMI 1.0을 완전히 지원하는(예: uncommitted memory) 유일한 DPMI 호스트이며, DPMI 1.0의 주요 지원자이기도 하다.[12]

1991년부터 개발되어 온 DR DOS "Panther" 및 "StarTrek"의 KRNL386.SYS(일명 "MultiMAX")와,[13] 노벨 DOS 7의 EMM386.EXE 메모리 관리자,[10] Caldera OpenDOS, DR-DOS 7.02 이상은 /DPMI[=ON] 옵션으로 로드할 때 DPMI에 대한 내장 지원을 제공한다. KRNL386.SYS는 DPMI 1.0 또는 0.9에 대한 지원을 제공하기 위해 /VER=0.9|1.0이라는 명령줄 옵션까지 갖추고 있었다.[14] 도스 API 변환은 "보호 모드에서 호출된 인터럽트 21"이라고 지칭되었다. 멀티유저 도스, 시스템 매니저 및 REAL/32 또한 DPMI를 지원한다.

가장 유명한 독립형 DPMI 커널은 아마도 CWSDPMI일 것이다. 이 커널은 DPMI 0.9를 지원하지만 문서화되지 않은 "도스 API 변환"은 지원하지 않는다. "TRAN" 일명 토마스 피텔(Thomas Pytel)이 만든 PMODE라는 또 다른 변형은 1990년대 데모신 기간 동안 32비트 프로그래머들에게 인기가 있었다. 많은 게임이 Rational Systems에 의해 DOS/4G의 하위 집합으로 개발되어 Watcom C 컴파일러와 함께 배포된 DOS/4GW를 사용했다.

HDPMI(HX 도스 확장자의 일부)는 "도스 API 변환"과 거의 완전한 DPMI 1.0 구현을 제공한다.

DPMI 위원회

[편집]

DPMI 1.0 위원회는 1990년부터 1991년까지 회의를 가졌으며 12개의 그룹으로 구성되었다:

같이 보기

[편집]

각주

[편집]
  1. 1 2 3 4 5 6 7 Duncan, Ray (1991년 2월 12일). “Power Programming – An Introduction to the DOS Protected Mode Interface”. 《PC Magazine》 (Ziff-Davis Publishing Co.) 10 (3): 367–371. ISSN 0888-8507. 2016년 5월 21일에 확인함. […] The creators of the VCPI were well aware of its limitations and were already hard at work on a second generation specification called Extended VCPI (XVCPI), when Microsoft barged onto the scene with the beta-test versions of Windows 3.0 and its DPMI. For a few months it appeared that the fledgling DOS extender market would fragment into two mutually exclusive directions […] Microsoft turned control of the DPMI specification over to an industry committee with open membership, and the backers of the XVCPI effort decided to join forces behind the DPMI. […] Microsoft agreed to delete the portions of the DPMI that crossed into DOS extender territory - specifically, direct support of the DOS and ROM BIOS interrupts in protected mode. Consequently, DPMI, Version 0.9, the first public version, released by the DPMI Committee in May 1990, defines only the low-level or building-block functions […] Naturally, the higher level or DOS extender interface of Windows 3.0 still exists, but it has receded into the twilight zone of undocumented functionality. Undocumented, but hardly unusable […]
  2. ↑ Duncan, Ray; Petzold, Charles; Schulman, Andrew; Baker, M. Steven; Nelson, Ross P.; Davis, Stephen R.; Moote, Robert (1992). 《Extending DOS: A Programmer's Guide to Protected-Mode DOS》 2판. 2. Addison-Wesley Publishing Company, Inc. 433–436쪽. ISBN 0-201-56798-9.
  3. ↑ Schmit, Michael L. (1995). 《Pentium Processor Optimization Tools》 1판. Cambridge, Massachusetts, USA: Academic Press, Inc. (AP Professional). ISBN 0-12-627230-1.
  4. ↑ Microsoft (Fall 1989), 《DOS Protected Mode Interface Specification, Revision Prerelease 0.04》 Prerelease판
  5. 1 2 3 4 Cole, Dave (1992년 5월 4일). Neiminen, Bruce (편집). “Re: MS-DOS DPMI extensions” (PDF) (Court document). Microsoft. 123–124쪽. MSC 00779372/00779373, MX3232616/3232617, Cole Exhibit 10, 2001-06-21. 2018년 9월 18일에 원본 문서 (PDF)에서 보존된 문서. 2018년 9월 17일에 확인함 – Comes v. Microsoft - Plaintiff's exhibit 1306 경유. […] [Ralph Lipe:] I think, they're checked into Win386 project. In the root MSDOS.DOC (look at all the .DOC files in the root) […] NO! This is an extremely sensitive matter since it basically tells […] ISVs (AKA DR-DOS and IBM) how to run standard mode Windows. You need to clear it with BradSi[lverberg] before distributing it. [Greg Lowney:] SoftNet makes a limulator. They read in the C7 manual that you can run C7 dos-extended if your limulator supports the MS-DOS extensions to the DPMI specification. So […] they called us to get a spec on exactly what those extensions are. Apparently they are not documented. […] They are not that complicated, mostly just what MS-DOS and BIOS calls we map for the application, and Qualitas had no trouble reverse engineering them. (The new 386MAX was, in beta, able to run KRNL386 from the command line, but I believe they disabled that feature in their final product to avoid stepping on our feet. 386MAX does, of course, support C7.) […] Ralph, was the spec distributed to the members of the DPMI committee? […] [Dave Cole:] We should absolutely NOT document this. […]
  6. ↑ Microsoft (1990년 10월 31일). Sokolov, Michael (편집). “MS-DOS API EXTENSIONS FOR DPMI HOSTS Version Pre-Release 0.02” Annotat retyp preliminary판 (FTP). 《ftp.freecalypso.org》 (1999년 4월 8일에 출판됨). 2016년 5월 23일에 확인함.
  7. ↑ Microsoft (1989). Sokolov, Michael (편집). “DOS PROTECTED MODE INTERFACE (DPMI) – SPECIFICATION Protected Mode API For DOS Extended Applications” Annotat incompletely reconruct판 (FTP). 《ftp.freecalypso.org》 (1999년 4월 8일에 출판됨). 2016년 5월 23일에 확인함.
  8. 1 2 3 4 Wurthmann, Gerold; Wopperer, Bernhard; Wiesböck, Johann (1991). 〈Die DPMI-Spezifikation – Eine Einführung〉 [An introduction to the DPMI specification] 1판 (독일어) (book). 《Vorträge und Begleittexte zum 2. Entwicklerforum der Design & Elektronik zum Thema: PC-Architektur, 17. September 1991, München》 [Presentations and supplemental material for the second developer forum on PC architecture on 17 September 1991, Munich]. Munich, Germany: Markt & Technik Verlag Aktiengesellschaft. 223쪽. (NB. The forum was organized by the German magazine Design & Elektronik and Intel.)
  9. ↑ The DPMI Committee (1991년 3월 12일). 《DOS Protected Mode Interface (DPMI) Specification – Version 1.0 – Application Program Interface (API) for Protected Mode DOS Applications》 (PDF). 1.0. Intel. 4–5쪽. Intel order code 240977-001. 2013년 5월 31일에 원본 문서 (PDF)에서 보존된 문서. 2013년 5월 24일에 확인함. The initial DPMI prototype was developed by Microsoft for Windows version 3.0, with input from Lotus Corporation and Rational Systems, as part of a general effort to enhance Windows' performance by allowing the Windows kernel to run in extended memory. In parallel, Intel was working with manufacturers of multitasking environments, EMS emulators, and DOS extenders to ensure that an extended VCPI specification could fully utilize the 80386's virtualization and protection features. In February 1990, the parties involved in the above activities agreed to form the DPMI Committee and formulate an industry-wide standard for protected-mode DOS applications. The Committee released the first public DPMI Specification, Version 0.9 in May 1990.
  10. 1 2 3 Schneider, Stefanie (1994년 6월 17일). “Das Ende von DOS ist nur noch eine Frage der Zeit” [The end of DOS is only a question of time] (독일어). 《Computerwoche》 (Munich, Germany: IDG Business Media GmbH). 2022년 1월 2일에 원본 문서에서 보존된 문서. 2022년 1월 2일에 확인함.
  11. ↑ “FILE: Windows Int 21h and NetBIOS Support for DPMI”. 《Knowledge Base》. Microsoft. 2004년 8월 4일 [1999-12-04]. KB65128. Q65128. 2020년 2월 20일에 원본 문서에서 보존된 문서. 2016년 5월 21일에 확인함.
  12. ↑ Sokolov, Michael (1998년 5월 6일). “lA correction to a previous posting”. 《lynx-dev》. 2020년 2월 20일에 원본 문서에서 보존된 문서. 2020년 2월 20일에 확인함.
  13. ↑ KRNL386.SYS of DR DOS "Panther" has copyright strings "1991,1992".
  14. ↑ Schulman, Andrew; Brown, Ralf D.; Maxey, David; Michels, Raymond J.; Kyle, Jim (1994) [November 1993]. 《Undocumented DOS: A programmer's guide to reserved MS-DOS functions and data structures - expanded to include MS-DOS 6, Novell DOS and Windows 3.1》 2판. Reading, Massachusetts, USA: Addison Wesley. 194쪽. ISBN 0-201-63287-X. (xviii+856+vi pages, 3.5"-floppy) Errata:

외부 링크

[편집]