맨위로가기

파일 제어 블록

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

파일 제어 블록(FCB)은 CP/M, 86-DOS 및 PC DOS 1.x/MS-DOS 1.xx에서 파일 접근에 사용된 유일한 방법이었다. MS-DOS 2에서 파일 핸들 방식으로 대체되었으며, FCB는 하위 디렉터리 지정을 지원하지 않고, 보안 문제로 인해 파일 시스템 관련 데이터를 사용자 공간에 노출시켰다. MS-DOS 3 이상에서는 FCB 형식이 SHARE.EXE 로드 여부에 따라 달라졌으며, FAT32 파일 시스템이 도입될 때까지 지원되었다. Windows 95, 98, Me에서는 FAT32 드라이브에서 FCB 사용을 지원하지 않아 일부 구형 DOS 응용 프로그램에서 문제가 발생했다. FCB는 Windows NT, 2000 등에서도 제대로 작동하지 않으며, DOS 에뮬레이터를 통해 FCB가 필요한 구형 DOS 프로그램을 실행할 수 있다. FCB와 함께 사용되는 디스크 전송 영역(DTA)은 파일 내용의 읽기/쓰기를 위한 버퍼였으며, 프로그램 세그먼트 프리픽스(PSP)는 DOS 실행 파일에 제공되는 데이터 구조이다.

더 읽어볼만한 페이지

  • 도스 기술 - EXE
    EXE 파일 형식은 운영 체제에 따라 다양한 종류가 있는 실행 파일의 한 형태로, DOS MZ 실행 파일에서 PE, PE32+까지 발전해 왔으며, 코드, 데이터, 스택을 별도 관리하고 재배치 항목을 통해 실행 환경에 유연하게 대응하는 특징을 가진다.
  • 도스 기술 - COM 파일
    COM 파일은 CP/M 및 MS-DOS 운영체제에서 사용된 실행 파일 형식으로, 메타데이터 없이 코드와 데이터로 구성되어 64KB 크기 제한을 가지며, 단순한 구조로 극소의 실행 파일을 만들 수 있지만 보안 취약점도 존재한다.
파일 제어 블록

2. FCB의 사용 및 한계

CP/M, 86-DOS, PC DOS 1.x 및 MS-DOS 1.xx에서 FCB는 파일에 접근하는 유일한 방법이었다. DOS의 몇몇 INT 21h 하위 기능들은 FCB를 사용하여 파일에 대한 작업을 수행하는 인터페이스를 제공했다.

FCB를 사용하면 운영 체제는 열린 파일에 대해 알아야 할 모든 것을 FCB 내부에 저장했다. 따라서 별도의 운영 체제 메모리 공간을 파일별로 할당할 필요가 없었다. 그러나 MS-DOS가 발전하면서 여러 프로세스 지원, 다양한 파일 시스템 지원, 네트워크 파일 공유 등의 요구사항이 생겨났고, FCB는 이러한 기능을 처리하기에 한계가 있었다.

2. 1. 파일 핸들로의 전환

86-DOS 및 PC DOS 1.x/MS-DOS 1.xx에서 FCB는 파일에 접근하는 유일한 방법이었다. MS-DOS 2에서 여러 프로세스나 사용자를 지원하고, FAT 이외의 파일 시스템을 사용하거나 네트워크를 통해 파일을 공유하기 위한 준비 과정에서 FCB는 다음의 이유로 부적합하다고 여겨졌다.

  • 필요한 추가 데이터를 처리하기에 크기가 작음
  • 미래 확장성에 부적절
  • 하위 디렉토리를 지원하지 않음
  • 보안 위험 야기


따라서 FCB는 유닉스 및 그 파생 제품에서 사용되는 파일 핸들로 대체되었다. 파일 핸들은 특정 열린 파일과 관련된 연속적인 정수 번호일 뿐이다. 프로그램이 최신 파일 핸들 API를 사용하여 파일을 열면 운영 체제는 해당 파일과 관련된 내부 데이터 구조를 자체 메모리 영역에서 관리한다. 이는 구조가 응용 프로그램과의 호환성을 깨지 않으면서 이후 운영 체제 버전에서 크기가 커질 수 있다는 장점을 갖는다.

MS-DOS 3 이상에서 FCB를 사용하는 경우 FCB 형식은 SHARE.EXE가 로드되었는지 여부와 FCB가 로컬 또는 원격 파일을 참조하는지 여부에 따라 달라지며, SFT 항목을 참조하는 경우가 많다. 이 때문에 DOS 3 이상에서 한 번에 열어둘 수 있는 FCB 수는 제한되며, 일반적으로 4개이다. CONFIG.SYS 파일에서 FCBS= 지시문을 사용하면 필요한 경우 이 수를 늘릴 수 있다. DR-DOS에서 FILES와 FCBS는 모두 사용 가능한 핸들 구조의 동일한 내부 풀에서 가져오며 필요에 따라 동적으로 할당된다.

FCB는 FAT32 파일 시스템이 도입될 때까지 모든 버전의 MS-DOS 및 Windows에서 지원되었다. Windows 95, Windows 98 및 Windows Me는 볼륨 레이블을 읽는 경우를 제외하고 32비트 클러스터 번호로 인해 FAT32 드라이브에서 FCB 사용을 지원하지 않는다. 이로 인해 WordStar를 포함한 일부 구형 DOS 응용 프로그램이 이러한 버전의 Windows에서 실패했다. FCB 인터페이스는 Windows NT, 2000 등에서도 제대로 작동하지 않는다. DOS 에뮬레이터 DOSEMU 및 DOSBox는 FCB 인터페이스를 제대로 구현하므로 최신 운영 체제에서 FCB가 필요한 구형 DOS 프로그램을 실행하는 방법이다.

3. FCB의 지원 종료 및 에뮬레이션

CP/M, 86-DOS 및 PC DOS 1.x/MS-DOS 1.xx에서 FCB는 파일에 접근하는 유일한 방법이었다. DOS에서 몇 가지 INT 21h 하위 기능은 FCB를 사용하여 파일에 대한 작업을 수행하는 인터페이스를 제공했다. MS-DOS 2에서 여러 프로세스나 사용자를 지원하고, FAT 이외의 다른 파일 시스템을 사용하거나, 네트워크를 통해 파일을 공유하기 위해 FCB는 이러한 기능에 필요한 추가 데이터를 처리하기에는 너무 작고, 다양한 미래 확장 경로에 부적절하다고 여겨졌다. 또한 하위 디렉토리를 지정하는 필드를 제공하지 않았다. 파일 시스템 관련 데이터를 사용자 공간에 노출시키는 것 또한 보안 위험으로 간주되었다. 따라서 FCB는 유닉스 및 그 파생 제품에서 사용되는 파일 핸들로 대체되었다.

프로그램이 최신 파일 핸들 API를 사용하여 파일을 열면 운영 체제는 해당 파일과 관련된 내부 데이터 구조를 자체 메모리 영역에서 관리한다. 이는 이러한 구조가 응용 프로그램과의 호환성을 깨지 않으면서 이후 운영 체제 버전에서 크기가 커질 수 있다는 장점을 갖는다. 단점은 DOS의 메모리 관리를 고려할 때, "파일을 많이 사용하는" 프로그램이 사용할 수 있는 만큼의 이러한 구조에 대한 공간이 부팅 시 예약되어야 하며 컴퓨터가 실행되는 동안 다른 용도로 사용할 수 없다는 것이다. 이러한 메모리 예약은 CONFIG.SYS 파일의 FILES= 지시문을 사용하여 수행된다. DOS 1 또는 CP/M에서 FCB를 사용하면 이 문제가 발생하지 않는데, 운영 체제는 열린 파일에 대해 알아야 할 모든 것을 FCB 내부에 저장하므로 운영 체제 메모리 공간에서 파일별 메모리를 사용할 필요가 없기 때문이다. MS-DOS 3 이상에서 FCB를 사용하는 경우 FCB 형식은 SHARE.EXE가 로드되었는지 여부와 FCB가 로컬 파일 또는 원격 파일을 참조하는지 여부에 따라 달라지며, SFT 항목을 참조하는 경우가 많다. 이 때문에 DOS 3 이상에서 한 번에 열어둘 수 있는 FCB 수는 제한되며, 일반적으로 4개이다. CONFIG.SYS 파일에서 FCBS= 지시문을 사용하면 필요한 경우 이 수를 초과하여 늘릴 수 있다. DR-DOS에서 FILES와 FCBS는 모두 사용 가능한 핸들 구조의 동일한 내부 풀에서 가져오며 필요에 따라 동적으로 할당된다.

FCB는 FAT32 파일 시스템이 도입될 때까지 모든 버전의 MS-DOS 및 Windows에서 지원되었다. Windows 95, Windows 98 및 Windows Me는 볼륨 레이블을 읽는 경우를 제외하고 32비트 클러스터 번호로 인해 FAT32 드라이브에서 FCB 사용을 지원하지 않는다. 이로 인해 WordStar를 포함한 일부 구형 DOS 응용 프로그램이 이러한 버전의 Windows에서 실패했다.

FCB 인터페이스는 Windows NT, 2000 등에서도 제대로 작동하지 않으며 WordStar는 이러한 운영 체제에서 제대로 작동하지 않는다. DOS 에뮬레이터 DOSEMU 및 DOSBox는 FCB 인터페이스를 제대로 구현하므로 최신 운영 체제에서 FCB가 필요한 구형 DOS 프로그램을 실행하는 방법이다.

4. 디스크 전송 영역 (DTA)

파일 제어 블록(FCB)과 함께 사용되는 보조 데이터 구조는 '''디스크 전송 영역'''(DTA)이었다. 이는 파일 내용(레코드)을 읽거나 기록하는 데 사용되는 버퍼에 주어진 이름이다. FCB를 사용한 DOS의 파일 액세스 함수는 DTA에 대한 고정된 위치를 가정했으며, 처음에는 PSP의 일부를 가리켰다. 이 위치는 DOS 함수를 호출하여 변경할 수 있었고, 이후의 파일 액세스는 암묵적으로 새 위치를 사용했다.

5. 프로그램 세그먼트 프리픽스 (PSP)

COMMAND.COM에서 시작되는 모든 DOS 실행 파일에는 ''프로그램 세그먼트 프리픽스(PSP)''라는 256바이트 길이의 미리 채워진 데이터 구조가 제공되었다. 이 구조 내의 관련 필드는 다음과 같다.

오프셋바이트
크기
내용
0x022프로그램에 사용 가능한 메모리(16바이트 단위).
0x2C2프로그램의 환경 변수를 포함하는 세그먼트 주소.
0x5C16첫 번째 명령줄 인수를 위한 준비된 FCB (열리지 않음).
0x6C20두 번째 명령줄 인수를 위한 준비된 FCB (열리지 않음).
0x801명령줄 길이.
0x81127명령줄 내용.



이 데이터 구조는 프로그램 시작 시 DOS에서 제공한 주소의 데이터 세그먼트 시작 부분에서 DS 및 ES 세그먼트 레지스터를 통해 찾을 수 있었다. DOS는 주소 0x81에서 프로그램의 명령줄을 그대로 제공하는 것 외에도 명령줄의 처음 두 단어에 해당하는 두 개의 FCB를 구성하려고 시도했는데, 이는 이러한 단어가 작동할 파일 이름인 일반적인 경우 프로그래머의 작업을 줄이기 위한 것이었다. 이러한 FCB는 열리지 않은 상태로 유지되었으므로, 이러한 명령줄 단어가 파일을 참조하지 않더라도 문제가 발생하지 않았다.

DTA의 초기 주소는 명령줄 인수가 저장된 PSP의 영역(주소 0x80)을 오버레이하도록 설정되어, 프로그램이 DTA를 사용하는 DOS 함수(파일 레코드 읽기 등)를 호출하기 전에 명령줄 인수를 위해 이 영역을 파싱해야 했다. 단, 프로그램이 DTA의 주소를 다른 메모리 영역으로 변경하거나, 파일 핸들을 선호하여 곧 사용이 중단된 DTA/FCB 함수를 전혀 사용하지 않는 경우는 예외였다.

참조

[1] 웹인용 FCB - Standard DOS File Control Block http://stanislavs.or[...]
[2] 서적 8088-8086/8087 Programacion Ensamblador En Entorno MSDOS Ediciones Anaya Multimedia 1992



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com