도스

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

파일 시스템

도스는 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'로 할당되었다. 도스는 드라이브 당 하나의 활성 파티션만 지원할 수 있었다.

예약된 장치 이름

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

메모리 관리

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

사용자 인터페이스

도스 시스템들은 명령 줄 인터페이스를 이용한다. 프로그램들은 명령 프롬프트에서 파일 이름을 입력하여 시작할 수 있다. 도스 운영 체제들은 시스템 유틸리티와 같은 몇 가지 프로그램들을 포함하고 있으며, 이러한 프로그램들과 관련되지 않는 내부 명령어라 불리는 추가 프로그램들도 제공한다.
사용자에 더욱 친숙한 환경을 제공하려는 시도 속에, 수많은 소프트웨어 제조업체들은 메뉴나 아이콘 기반 인터페이스를 제공하는 파일 관리 프로그램들을 작성하였다. 마이크로소프트 윈도우가 잘 알려진 예인데, 마이크로소프트 윈도우 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년)은 단축키를 이용하여 현재 실행 중인 프로그램의 상태를 디스크로 저장하고, 다른 프로그램을 불러와 전환할 수 있었다.