# 도스

명령줄 인터페이스, 디렉터리 구조, 버전 정보를 보여주고 있는 프리도스의 스크린샷.
**도스**(영어: disk operating system, 디스크 오퍼레이팅 시스템, **DOS**)는 디스크 운영 체제의 일종으로서 디스크에 읽고 쓰기 등의 명령을 수행하는 프로그램이다. 명령어를 직접 입력하는 명령 줄 기반이다.

1981년부터 1995년까지, 또 부분적으로 MS-DOS 기반인 마이크로소프트 윈도우(95, 98, 미)를 포함한 2000년까지는 MS-DOS가 IBM PC 호환기종 시장을 장악하였다. 도스는 MS-DOS, PC DOS, DR-DOS, 프리도스, ROM-DOS, PTS-DOS를 포함한 비슷한 명령 줄 시스템의 계열이다.

이 시스템들 중 어느 것도 간단히 "도스"라고 불리진 않았다. (1960년대의 이와 관련이 없는 IBM 메인프레임 운영 체제에만 사용되었음) 이와 무관한 수많은 비x86 마이크로컴퓨터 디스크 운영 체제는 "도스"라는 이름을 그대로 사용하였으며 이들을 사용하는 컴퓨터에 대해 논할 때 단순히 "도스"라고 부르곤 했다. (아미가도스, AMSDOS, 애플 도스, 아타리 도스, 코모도어 도스, CSI-DOS, 프로도스, TRSDOS)

## 역사

### 초기의 도스

디지털 리서치의 CP/M이 가장 대표적인 도스의 원형이다. 8비트 개인용 컴퓨터에는 CP/M이 널리 사용되었으나 애플 II는 독자적인 애플 도스(정식 명칭은 그냥 DOS)를, MSX는 MSX-DOS를 썼다. 이들 컴퓨터도 나중에 CP/M을 지원하지만 디스크의 포맷이 달라서 서로 바꾸어 쓸 수는 없었다. IBM-PC에서는 이를 모방한 QDOS로부터 PC-DOS와 MS-DOS가 나왔으며, 나중에 CP/M은 16비트 버전인 CP/M-86 바탕으로 DR-DOS로 나왔다.

현재는 DR-DOS의 후기작인 오픈도스와, NTFS 등을 지원하는 공개 도스 프로젝트인 프리도스가 있다. MS-DOS는 마이크로소프트가 만든 가장 보편적으로 쓰인 도스이다. PC-DOS는 IBM의 도스이다. 버전 5.0까지는 사실상 MS-DOS와 같은 제품이었으나 그 이후 추가된 내용이 달라졌다. DR-DOS는 디지털 리서치사에서 만든 도스이다. 이것은 나중에 노벨 도스(Novell DOS)로 바뀌었다가 다시 칼데라 오픈 도스(Caldera OpenDOS)로 바뀐다.

### 쇠퇴

윈도우 3.1 이하의 버전과 같이 초기 버전의 마이크로소프트 윈도우는 별도 버전의 도스 위에서 실행되었다. 1990년대 초에 윈도우의 그래픽 셸은 도스 시스템에서 많이 이용되었다. 1995년에 윈도우 95가 별도의 도스 라이선스를 요구하지 않은 독립형 운영 체제로 번들되었다. 윈도우 95(및 이를 따랐던 윈도우 95과 ME)는 기본 OS 커널을 인계 받았지만 MS-DOS 구성 요소는 호환성을 위해 그대로 남겨두었다. 윈도우 미를 제외한 윈도우 95, 98과 더불어 MS-DOS 구성 요소는 윈도우를 시작하지 않고도 구동이 가능하였다. 윈도우 NT 계열 운영 체제가 널리 사용되면서, 윈도우 사용을 위해 더 이상 도스가 필요없게 되자 PC 사용자들 다수가 도스를 직접 사용하는 일은 중단되었다.

### 계속된 이용

2012년 기준으로, 프리도스, DR-DOS, ROM-DOS, PTS-DOS, RxDOS, REAL/32와 같은 도스 운영 체제를 이용할 수 있다. 델, HP를 포함한 일부 컴퓨터 제조업체들은 FreeDOS를 OEM 운영 체제를 포함한 컴퓨터들을 판매한다.

#### 임베디드 시스템

하드웨어에 직접 접근하는 도스 구조는 임베디드 장치에서 이용할 때 매우 이상적이다. 최신 판의 DR-DOS가 현재에도 이 시장에 초점을 두고 있다. ROM-DOS가 캐논 파워샷 프로 70의 임베디드 시스템에 사용되었다.

#### 에뮬레이션

리눅스 하에서 도스 프로그램들을 거의 네이티브 속도로 구동할 수 있는 DOSEMU라는 리눅스 네이티브 가상 머신을 이용하여 여러 도스 사본들을 실행할 수 있다. 도스박스를 포함하여 여러 버전의 유닉스에서 도스를 구동하기 위한 다른 수많은 에뮬레이터들이 있다.

도스 에뮬레이터들은 마이크로소프트 윈도우 하에서 게임이나 다른 도스용 소프트웨어를 구동하기에 적절한 방법인데, 현대 버전은 도스와의 완전한 호환성이 결여되어 있기 때문이다. 현대의 운영 체제에서 오래된 게임을 즐기도록 고안된 도스박스가 대표적인 예이다. 다른 대안으로는 PC 에뮬레이터 상에서 도스 운영 체제의 사본으로 도스 응용 프로그램들을 구동하는 것이다. 이러한 접근은 오버헤드는 증가되지만 더 나은 호환성을 제공한다.

## 설계

모든 MS-DOS형 운영 체제들은 인텔 x86 호환 CPU를 갖춘 컴퓨터, 주로 IBM-PC 및 호환기종에서 동작한다. 특정 기계에 의존적인 MS-DOS 버전들은 수많은 비 IBM 호환 x86 기반 컴퓨터용으로 개발되었으며, 여기에는 제조업체 이름을 딴 마이크로소프트의 배포판에서부터 비 IBM-PC 호환 하드웨어와 동작하도록 설계된 버전에 이르기까지 다양하다. 응용 프로그램들이 직접 하드웨어 접근 대신 도스 API를 사용하는 한 IBM-PC 비호환 머신들에서도 실행이 가능하다. 1985년, 디지털 리서치는 또한 모토로라 68000 CPU용 컨커런트 도스 68K 버전 및 1990년대 초에 모토로라 CPU용 DOS/NT 파생 오리지널 프리도스 커널 DOS-C가 있었다. 이 시스템들이 도스 구조와 유사하긴 했지만, 응용 프로그램들은 이러한 x86이 아닌 CPU의 비호환 명령 집합으로 인해 이진 호환성이 없었다. 그러나 고급 언어로 작성된 응용 프로그램들은 쉽게 포팅이 가능했다.

도스는 재진입성이 없는 기본 커널 기능들을 갖춘 단일 사용자, 싱글태스킹 운영 체제이다. 즉, 한 번에 하나의 프로그램 해당 커널 기능들을 사용할 수 있으며 도스 스스로는 하나 이상의 프로그램을 한 번에 실행할 수 있게 하는 기능이 없다. 도스 커널은 문자 입출력, 파일 관리, 메모리 관리, 프로그램 적재 및 종료와 같이 프로그램을 위한 다양한 함수를 제공한다.

도스는 기본적으로 배치 파일(파일 확장자는 `.BAT`)을 통해 셸 스크립트를 위한 기능을 제공한다. 이것들은 텍스트 파일로서, 문서 편집기를 이용해서 작성이 가능하다. 컴파일된 프로그램과 동일한 방식으로 실행되며, 배치 파일의 각 줄을 명령 단위로 실행한다. 배치 파일은 또한 여러 내부 명령을 이용할 수 있는데, 이를테면 GOTO와 조건문을 들 수 있다. GOSUB 및 단순 산술은 DR-DOS COMMAND.COM 및 4DOS와 같은 일부 서드 파티 셸을 통해 지원되지만, 실질적인 형태의 프로그래밍이 지원되는 것은 아니다.

이 운영 체제는 문자 기반 응용 프로그램의 개발을 허용하는 API를 제공하지만 그래픽 카드, 프린터, 마우스와 같은 하드웨어 대부분의 접근을 위한 것은 아니다. 프로그래머들이 직접 하드웨어에 접근하게 하려면 각 프로그램이 개별 하드웨어 주변기기에 맞는 자체 장치 드라이버를 갖추어야 했다. 하드웨어 제조업체들은 사양을 공개하여 대중화된 응용 프로그램들을 위한 장치 드라이버들을 사용할 수 있도록 보증해야 했다.

### 부트 시퀀스

* PC 호환 컴퓨터의 부트스트랩 로더(MBR 또는 부트 섹터)는 디스크의 첫 섹터인 Track0에 위치한다. 롬 바이오스는 이 섹터를 주소 0000h:7C00h의 메모리에 불러들이고 오프셋 +1FEh의 55h AAh 서명을 보통 검사한다.
* 로드된 부트 섹터가 마스터 부트 레코드(MBR)로 간주되면, 그 자신을 메모리의 0000h:0600h에 재할당하며, 그렇지 않다면 이 단계는 무시된다.
* 0000h:7C00h에 위치하는 섹터 콘텐츠는 현재 VBR을 이룬다. VBR은 운영 체제에 특화되어 있으며 구체적인 동작이 도스 버전마다 다르기 때문에 일반적으로 다른 도스 버전끼리 교환할 수 없다.
* VBR이 IO.SYS/IBMBIO.COM 파일의 처음 3개의 섹터만 메모리에 불러들이는 현대의 도스 버전에서는 로드된 부분에는 다른 부트 로더를 포함하며, 이는 0000h:0500h에 저장된 루트 디렉터리 정보를 이용하여 메모리의 나머지 부분을 읽어들인다.
* 도스 시스템 초기화 코드가 내장 장치 드라이버를 초기화한 다음 MS-DOS 시스템의 MSDOS.SYS에 위치한 도스 커널을 메모리로 불러들인다. 윈도우 9x의 경우 도스 시스템 초기화 코드와 내장 장치 드라이버와 도스 커널은 하나의 IO.SYS 파일에 병합되어 있으며 MSDOS.SYS는 텍스트 구성 파일로 사용된다.
* 그 뒤 CONFIG.SYS 파일을 읽어들여 구성 매개변수들을 구문 분석한다. SHELL 변수는 COMMAND.COM을 기본으로 하는 셸의 위치를 지정한다.
* 셸을 불러들여 실행한다.
* 그 뒤 시작 배치 파일 AUTOEXEC.BAT이 셸에 의해 실행된다.

### 파일 시스템

도스는 8.3 파일 이름을 지원하는 파일 시스템을 사용하며, 여기에서 파일 이름이 8자, 확장자의 경우 3자를 사용한다는 뜻이다. 도스 2를 기점으로 계층적 디렉터리가 지원된다. 또, 각 디렉터리는 8.3 형식이지만 최대 디렉터리 경로 길이는 64자인데, 이는 도스가 관리하는 내부적인 현재 디렉터리 구조(CDs) 테이블 때문이다. 드라이브 이름을 포함하여, 도스가 온전히 지원하는 최대 길이는 마지막의 널 바이트를 포함, "드라이브:\경로\파일명.확장자"를 이용하여 80자이다.

도스는 파일 할당 테이블(FAT) 파일 시스템을 사용한다. 본래 드라이브 당 최대 4078개의 클러스터를 지원하는 FAT12였다. 도스 3.0에는 16비트 할당 엔트리를 사용하여 드라이브 당 최대 65517개의 클러스터를 지원하는 FAT16 지원을 추가하였다. 도스 3.31은 32 MB 드라이브 제한을 제거하고 최대 2 GB까지 지원하는 FAT16B의 지원을 추가하였다. 마지막으로 MS-DOS 7.1(윈도우 9x의 도스 구성 요소)은 32비트 할당 엔트리를 사용하는 FAT32의 지원을 추가함으로써 하드 드라이브를 최대 137 GB 이상 지원할 수 있게 되었다.

도스 3.1을 시작으로 파일 리다이렉터 지원이 도스에 추가되었다. 초기에 네트워킹 지원을 위해 사용되었으나 나중에는 MSCDEX를 이용한 CD-ROM 드라이브 지원에 사용되었다. IBM PC DOS 4.0 또한 IFS(installable file system)를 지원했으나 사용되지 않아 도스 5.0에서 제거되었다.

#### 드라이브 명명 계획

도스에서 드라이브들은 식별 가능한 문자들을 가리킨다. 표준화된 관습으로, "A'와 "B"는 플로피 드라이브를 위해 할당한다. 오직 하나의 플로피 드라이브를 가진 시스템에서 도스는 이 드라이브에 두 개의 문자를 할당하며, 프로그램들이 이들을 교체할 때 사용자에게 디스크를 스왑할 것인지 묻게 된다. 플로피에서 플로피로 복사하거나 다른 곳에서 데이터를 접근하는 동안 특정 플로피로부터 프로그램을 실행하고자 할 때 이용된다. 하드 드라이브들은 본래 문자 "C"와 "D'로 할당되었다. 도스는 드라이브 당 하나의 활성 파티션만 지원할 수 있었다.

#### 예약된 장치 이름

도스에는 내부 문자 장치로 점유하고 있는 까닭에 파일 이름을 사용할 수 없는 예약 장치명이 있다. 또, 이러한 제한은 여러 윈도우 버전에도 영향을 미치면서 어떠한 경우에는 충돌이나 보안 취약성을 야기하기도 한다.

예약어는 다음과 같다:

* `COM1`, `COM2`, `COM3`, `COM4`, `COM5`, `COM6`, `COM7`, `COM8`, `COM9` (직렬 통신 포트)
* `CON`, 콘솔용
* `LPT1`, `LPT2`, `LPT3`, `LPT4`, `LPT5`, `LPT6`, `LPT7`, `LPT8`, `LPT9` (라인 프린터)
* `AUX`, 보조용
* `PRN`, 프린터용
* `NUL`, 널 장치용. 86-DOS 1.10 및 PC DOS 1.0에 추가.

### 메모리 관리

도스는 원래 인텔 8086/8088 프로세서용으로 설계되었으므로 최대 1 MB의 램에만 직접 접근할 수 있었다. PC 아키텍처로 인해 최대 640 KB만 사용 가능하며(기본 메모리) 그 중 상위 384KB가 예약된다.

### OS/2, 윈도우 하의 도스

## 사용자 인터페이스

도스 시스템들은 명령 줄 인터페이스를 이용한다. 프로그램들은 명령 프롬프트에서 파일 이름을 입력하여 시작할 수 있다. 도스 운영 체제들은 시스템 유틸리티와 같은 몇 가지 프로그램들을 포함하고 있으며, 이러한 프로그램들과 관련되지 않는 내부 명령어라 불리는 추가 프로그램들도 제공한다.

사용자에 더욱 친숙한 환경을 제공하려는 시도 속에, 수많은 소프트웨어 제조업체들은 메뉴나 아이콘 기반 인터페이스를 제공하는 파일 관리 프로그램들을 작성하였다. 마이크로소프트 윈도우가 잘 알려진 예인데, 마이크로소프트 윈도우 9x가 프로그램 로더를 기본 내장하면서 가장 흔히 쓰이는 PC 호환 프로그램 로더로서 도스를 대체하였다. 텍스트 사용자 인터페이스 프로그램들에는 Mdir, 노턴 커맨더, 도스 내비게이터, 볼코프 커맨더, 쿼터데스크 DESQview, 사이드킥이 있다. 그래픽 사용자 인터페이스 프로그램에는 디지털 리서치의 그래픽 인바이런먼트 매니저(본래 CP/M용으로 작성됨)와 GEOS가 있다.

마침내, 주요 도스 시스템 제조업체들이 자신들만의 환경 관리자를 포함하기 시작하였다. MS-DOS/IBM DOS 4는 도스 셸을 포함하였다. 이듬해에 출시된 DR DOS 5.0은 GEM 기반의 뷰맥스를 포함하였다.

### 종료 후 상주 프로그램

도스는 멀티태스킹 운영 체제가 아니다. 그러나 도스는 종료 후 상주 프로그램(Terminate and Stay Resident, TSR)을 제공하여 여러 프로그램들이 메모리에 상주할 수 있게 도와준다.

이러한 프로그램들은 시스템 타이머나 키보드 인터럽트를 후킹하여 이들이 백그라운드에서 작업을 수행하게끔 하거나 현재 실행 중인 프로그램을 적시에 호출할 수 있게 한다. `PRINT` 명령어는 이를 수행하여 백그라운드 인쇄 스풀링을 구현하였다. 볼랜드 사이드킥도 이 기법을 사용한다.

종료 후 상주 프로그램들은 기본적으로 이용할 수 없는 기능을 제공하는 데에도 사용되었다. CED와 도스키와 같은 프로그램들은 COMMAND.COM에서 사용할 수 있는 기능 이상으로 명령 줄 편집 기능을 제공하였다. 마이크로소프트 CD-ROM 확장 (MSCDEX)과 같은 프로그램들은 CD-ROM 디스크의 파일을 접근할 수 있게 하였다.

일부 TSR들은 초기 수준의 태스크 전환을 수행할 수 있었다. 이를테면, 셰어웨어 프로그램 백 앤드 포스 (1990년)은 단축키를 이용하여 현재 실행 중인 프로그램의 상태를 디스크로 저장하고, 다른 프로그램을 불러와 전환할 수 있었다.

## 소프트웨어

아라크네 웹 브라우저
도스는 지배적인 PC 호환 플랫폼이었으며 수많은 유명한 프로그램들이 도스를 위해 작성되었다. 여기에는 다음을 포함한다:

* **4DOS**: 더 개선된 셸 치환.
* **아라크네**: 16비트 그래픽 도스 웹 브라우저.
* 베이직 언어 인터프리터. BASICA, GW-BASIC이 8비트 컴퓨터에서 흔히 볼 수 있는 베이직 인터프리터 환경을 따라하였다.
* **dBase**: 초기 데이터베이스 프로그램들 가운데 하나이다.
* **DJGPP**: 32비트 DPMI 도스 포팅 gcc이다.
* **하버드 그래픽스**: 초기 프레젠테이션 그래픽스 디자인 프로그램 가운데 하나이다.
* **로터스 1-2-3**, 보호 모드 스프레드시트 프로그램으로, 기업에서 많이 이용되었고 IBM PC의 성공에 기여하였다.
* **마이크로소프트 매크로 어셈블러**, **마이크로소프트 C**, **코드뷰**: 모두 마이크로소프트 개발 소프트웨어의 일부.
* **노턴 커맨더**, **XTree**: 파일 관리 유틸리티.
* **노턴 유틸리티**: 디스크 및 시스템 유틸리티 모음.
* **PC 툴스**: 디스크 및 시스템 유틸리티 모음.
* **PKZIP**: 파일 압축을 빠르게 표준화한 압축 유틸리티.
* **ProComm**, **Qmodem**, **Telix**: 모뎀 통신 프로그램.
* **QEMM**, **386MAX**: 도스 메모리 관리 유틸리티.
* **사이드킥**: 팝업 개인 정보 관리자.
* **터보 파스칼**, **터보 베이직**, **터보 C**, **터보 어셈블러**: 모두 볼랜드의 통합 개발 환경의 일부.
* LIST 유틸리티: ASCII나 HEX 형태로 파일을 볼 수 있다.
* **워드퍼펙트**: 워드 프로세서의 하나로, 현재는 윈도우 플랫폼용으로 제작된다.
* **우드스타**: 초기 워드 프로세서.

* 도스 명령어 목록
* 도스 셸
* 도스 API
* cmd.exe
* COMMAND.COM
* 글라도스

* **(영어)** “DOS - where hardware is the only limit”. 2010년 8월 15일에 원본 문서에서 보존된 문서. 2010년 8월 29일에 확인함.
* **(영어)** Batfiles: The DOS batch file programming handbook
* **(영어)** “The Rise of DOS: How Microsoft Got the IBM PC OS Contract”. 《pcmag.com》. 2022년 12월 24일에 확인함.
* **(영어)** “Application Software - DOS Short File Name Family”. 《www.jumpjet.info》. 2020년 2월 17일에 원본 문서에서 보존된 문서. 2020년 2월 7일에 확인함.  "(...) An archive of carefully hand selected FREE [and abandoned] software for DOS."