도스 API 도스 API(DOS API, Disk Operating System Application Programming Interface)는 도스(DOS) 운영 체제에서 응용 프로그램이 하드웨어 및 시스템 자원에 접근하고 제어할 수 있도록 제공하는 시스템 호출(System Call) 인터페이스의 총칭이다. 주로 마이크로소프트의 MS-DOS, IBM의 PC DOS, 그리고 호환 시스템(DR-DOS, FreeDOS 등)에서 사용되었다.
주요 특징 및 구조 도스 API는 소프트웨어 인터럽트(Software Interrupt) 방식을 기반으로 동작한다. 응용 프로그램은 특정 인터럽트 번호를 호출하고, 레지스터에 기능 번호(Function Number)와 매개변수를 설정하여 커널에 서비스를 요청한다.
- 인터럽트 21h (INT 21h): 도스 API의 핵심으로, 파일 관리(생성, 삭제, 읽기, 쓰기, 이동), 디렉터리 관리, 메모리 할당/해제, 프로세스 제어(프로그램 로드 및 실행, 종료), 날짜/시간 처리, 문자 입출력 등 대부분의 시스템 서비스를 제공한다.
- 인터럽트 20h, 22h~27h, 2Ah~2Fh: 프로그램 종료, 주소 저장, 절대 디스크 읽기/쓰기, 네트워크 리다이렉션 인터페이스 등 보조적인 기능을 제공한다.
- 인터럽트 13h (INT 13h), 10h (INT 10h) 등: 이들은 엄밀히 말해 시스템 BIOS(Basic Input/Output System) 인터럽트이나, 초기 도스 환경에서는 도스 API 기능이 부족하여 하드웨어 제어(디스크 I/O, 화면 출력 등)를 위해 응용 프로그램이 직접 호출하는 경우가 많았다.
호출 규약
x86 실모드(Real Mode) 환경에서 레지스터 기반의 호출 규약을 따른다. 일반적으로 AH 레지스터에 기능 번호(Function Code)를, 나머지 레지스터(AL, BX, CX, DX, SI, DI, BP, DS, ES 등)에 매개변수를 담아 인터럽트 명령어(INT 21h 등)를 실행한다. 반환 값 역시 레지스터(AX, FLAGS 레지스터의 캐리 플래그 등)를 통해 전달된다.
역사적 의의 및 한계
- 표준화: IBM PC 호환 기종 생태계에서 소프트웨어 이식성을 보장하는 사실상의 표준(De facto standard) 역할을 수행했다.
- 한계: 16비트 실모드 기반으로 1MB 메모리 장벽(640KB 컨벤셔널 메모리), 선점형 멀티태스킹 미지원, 보호 메모리 부재, 그래픽/사운드/네트워크 등 고수준 하드웨어 추상화 부족 등의 구조적 한계를 가졌다.
- 확장: 이러한 한계를 극복하기 위해 DOS 익스텐더(DOS Extender, 예: DOS/4GW, Phar Lap), VCPI/DPMI 규격, TSR(Terminate and Stay Resident) 프로그램, 장치 드라이버(Device Driver) 인터페이스 등이 개발되어 사용되었다.
현황 마이크로소프트 윈도우 9x 계열(Windows 95, 98, Me)은 내부적으로 도스 커널을 기반으로 하여 도스 API를 가상화(Virtual DOS Machine) 형태로 지원했다. 윈도우 NT 계열(Windows 2000, XP 이후)에서는 NTVDM(NT Virtual DOS Machine)을 통해 16비트 도스 응용 프로그램의 API 호출을 에뮬레이션하여 제한적으로 지원했으나, 64비트 윈도우에서는 NTVDM이 제거되어 네이티브 실행이 불가능하다. 현재는 DOSBox, DOSEmu, vDos 같은 에뮬레이터나 가상 머신(VMware, VirtualBox 등)을 통해 도스 API 환경을 구현하여 구형 소프트웨어를 실행하는 것이 일반적이다.