파일 제어 블록
File Control Block파일 제어 블록(FCB)은 열린 파일의 상태가 유지되는 파일 시스템 구조다.FCB는 운영 체제에서 관리되지만, 운영 체제 메모리가 아닌 파일을 사용하는 프로그램의 메모리에 상주한다.이는 한 번에 파일당 FCB를 위한 충분한 메모리를 확보할 수 있다면, 프로세스가 원하는 만큼의 파일을 열 수 있게 해준다.
FCB는 CP/M에서 발생하며 MS-DOS 버전 2.0 이상에서 역호환성 측도로만 존재하지만 대부분의 DOS 변종에도 존재한다.전체 FCB는 36바이트로, CP/M의 초기 버전에서는 33바이트였다.애플리케이션 호환성을 깨지 않고서는 늘릴 수 없었던 이 고정된 크기는 FCB가 파일에 액세스하는 표준 방법으로 최종 소멸을 초래한다.
FCB에서 여러 필드의 의미는 CP/M과 DOS에 따라 다르며, 또한 어떤 작업을 수행하느냐에 따라 다르다.다음 분야는 일관된 의미를 갖는다.[1]
오프셋 | 바이트 사이즈를 맞추다 | 내용물 |
---|---|---|
0x00 | 1 | 드라이브 번호 — 기본값인 경우 0, A:의 경우 1, B:, ... |
0x01 | 8 | 파일 이름 및 확장명 - 8.3 파일 이름을 함께 작성한다. |
0x09 | 3 | |
0x0C | 20 | 구현에 따라 달라짐 — FCB가 열리기 전에 0으로 초기화해야 함. |
0x20 | 1 | 파일의 현재 섹션에 기록 번호 - 순차적 액세스를 수행할 때 사용됨. |
0x21 | 3 | 임의 액세스를 수행할 때 사용할 번호를 기록하십시오. |
오프셋 0x0C에서 시작하는 20바이트 길이의 필드에는 파일에 대한 추가 정보를 제공하는 필드가 포함되었다.[2]
오프셋 | 바이트 사이즈를 맞추다 | 내용물 |
---|---|---|
0x0E | 2 | 파일의 레코드 길이(바이트) |
0x10 | 4 | 총 파일 크기(바이트). |
0x14 | 2 | 파일 내용을 마지막으로 수정한 날짜. |
0x16 | 2 | 마지막 수정 시간. |
새로운 정보가 이 20바이트에 더 이상 들어갈 수 없을 때까지 DOS의 새로운 버전에 의해 추가 값이 사용되었다.파일 속성 저장을 위해 CP/M Zero Page와 DOS Program Segment Prefix의 예약된 공간으로부터 이전의 "음의 오프셋" 바이트가 압축되었다.[1]
사용법
CP/M, 86-DOS, PC DOS 1.x/MS-DOS 1.xx에서는 FCB만이 파일에 액세스하는 방법이었다.DOS에서 몇 가지 INT 21h 하위 기능들은 FCB를 사용하는 파일에서 작동할 수 있는 인터페이스를 제공했다.[1][3][4]MS-DOS 2에서는 다중 프로세스 또는 사용자를 지원하거나 [3][4]FAT가 아닌 다른 파일 시스템을[3][4] 사용하거나 향후 네트워크를 통해 파일을[4] 공유하기 위한 준비가 이루어졌을 때, FCB는 그러한 기능에[4] 필요한 추가 데이터를 처리하기에 너무 작다고 느꼈고, 따라서 FCB는 다양한 미래 확장 경로에 적합하지 않은 것으로 보였다.[3]또한 하위 디렉터리를 지정할 수 있는 필드도 제공하지 않았다.[3]파일 시스템 관련 데이터를 사용자 공간에 노출하는 것 또한 보안 위험으로 간주되었다.[4]따라서 FCB는 UNIX와 그 파생상품에 사용된 파일 핸들로 대체되었다.[3]파일 핸들은 특정 열린 파일과 관련된 연속 정수일 뿐이다.
프로그램이 파일을 열기 위해 새로운 파일 핸들 API를 사용하는 경우, 운영 체제는 자신의 메모리 영역에서 파일과 관련된 내부 데이터 구조를 관리할 것이다.이는 이러한 구조가 애플리케이션 프로그램과의 호환성을 깨지 않고도 이후 운영 체제 버전에서 크기가 커질 수 있다는 큰 이점을 가지고 있다. 단점은 DOS의 다소 단순한 메모리 관리를 감안할 때, 가장 "파일 사용량이 많은" 프로그램만큼 이러한 구조를 위한 공간을 예약해야 한다는 것이다.부팅 시 컴퓨터 실행 중에는 다른 용도로 사용할 수 없음.그러한 메모리 예약은 CONFIG의 FILES= 지시어를 사용하여 이루어진다.SYS 파일.운영 체제는 FCB 내부의 열린 파일에 대해 알아야 할 모든 것을 저장하기 때문에 운영 체제 메모리 공간에서 파일별 메모리를 사용할 필요가 없기 때문에 DOS 1 또는 CP/M의 FCB에서는 이 문제가 발생하지 않는다.MS-DOS 3 이상에서 FCB를 사용할 경우, FCB 형식은 SHARE 여부에 따라 달라진다.EXE가 로드되며 FCB가 로컬 또는 원격 파일을 참조하고 종종 SFT 항목을 참조하는 경우이 때문에, DOS 3 이상에서 한 번에 열 수 있는 FCB의 수 또한 대개 4개로 제한된다; CONFIG의 FCBS= 지시어를 사용한다.SYS 파일, 필요한 경우 그 수 이상으로 늘릴 수 있다.DR-DOS에서 FILEX와 FCBS는 모두 가용 핸들 구조의 동일한 내부 풀에서 제공되며 필요에 따라 동적으로 할당된다.[5]
FCB는 FAT32 파일 시스템이 도입되기 전까지 MS-DOS 및 Windows의 모든 버전에서 지원되었다.Windows 95, Windows 98 및 Windows Me는 볼륨 레이블을 읽는 [4]것을 제외하고 32비트 클러스터 번호로 인해 FAT32 드라이브에 FCB를 사용하는 것을 지원하지 않는다.이로 인해 WordStar를 포함한 일부 오래된 DOS 응용프로그램이 이러한 버전의 Windows에서 실패하게 되었다.
Windows NT, 2000 등에서도 FCB 인터페이스가 제대로 작동하지 않음 – WordStar는 이러한 운영 체제에서 제대로 작동하지 않음.DOS 에뮬레이터 DoseMU와 DOSBox는 FCB 인터페이스를 적절하게 구현하므로, 최신 운영 체제에서 FCB가 필요한 구형 DOS 프로그램을 실행하는 방법이다.
디스크 전송 영역
FCB와 함께 사용된 동반 데이터 구조는 디스크 전송 영역(DTA)이었다.[2]파일 내용(레코드)을 읽거나 쓸 수 있는 버퍼의 이름이다.FCB를 사용한 DOS의 파일 액세스 기능은 처음에는 PSP의 일부를 가리키며 DTA의 고정된 위치를 가정했다(다음 섹션 참조). 이 위치는 DOS 기능을 호출하여 변경할 수 있으며, 이후 파일 액세스는 새로운 위치를 암시적으로 사용한다.
FCB 방식이 퇴보하면서, 파일 핸들을 사용한 새로운 파일 액세스 기능은 동시 독립 버퍼(다른 파일이나 동일한 파일에 대한 버퍼)를 유지하는 등, 모든 함수 호출과 함께 파일 내용에 대한 메모리 버퍼를 지정하는 수단도 제공했다.
프로그램 세그먼트 접두사 및 프로그램 초기화
모든 DOS 실행 파일은 셸(CORM)에서 시작되었다.COM)에는 PSP(Program Segment Prefix)라고 하는 미리 채워진 256바이트 길이의 데이터 구조가 제공되었다.이 구조 내의 관련 분야는 다음과 같다.[2]
오프셋 | 바이트 사이즈를 맞추다 | 내용물 |
---|---|---|
0x02 | 2 | 16바이트 청크 단위의 프로그램에 사용 가능한 메모리. |
0x2C | 2 | 프로그램의 환경 변수를 포함하는 세그먼트 주소. |
0x5C | 16 | 첫 번째 명령줄 인수(개봉되지 않음)에 대해 준비된 FCB. |
0x6C | 20 | 두 번째 명령줄 인수(개봉되지 않음)에 대해 준비된 FCB. |
0x80 | 1 | 명령줄의 길이. |
0x81 | 127 | 명령줄 내용. |
이 데이터 구조는 DS 및 ES 세그먼트 레지스터에서 프로그램 시작 시 DOS에 의해 주소가 제공된 데이터 세그먼트의 시작 부분에서 찾을 수 있었다.주소 0x81에서 프로그램의 명령줄을 그대로 제공하는 것 외에도, DOS는 명령줄의 처음 두 단어에 해당하는 두 개의 FCB를 구성하려고 시도했는데, 이는 이러한 단어들이 파일 이름인 일반적인 경우 프로그래머의 작업을 저장하기 위한 목적이다.이들 FCB는 개방되지 않은 상태로 남아있기 때문에 이러한 명령줄 단어가 파일을 참조하지 않더라도 문제가 발생하지 않을 것이다.
DTA의 초기 주소는 프로그램이 주소 변경을 주의하지 않는 한, 명령줄 인수가 저장된 PSP(주소 0x80)의 영역을 오버레이하도록 설정되었다. 예를 들어, 프로그램은 DTA를 사용한 DOS 함수를 호출하기 전에 명령줄 인수의 이 영역을 구문 분석해야 한다(파일 레코드의 읽기 등).일부 다른 메모리 영역에 대한 DTA(또는 DTA/FCB 함수를 함께 사용하지 않음, 곧 파일 핸들을 위해 사용되지 않게 됨).
참고 항목
참조
- ^ a b c "FCB - Standard DOS File Control Block".
- ^ a b c Rodriguez-Rosello, Miguel (1992). 8088-8086/8087 Programacion Ensamblador En Entorno MSDOS (in Spanish). Ediciones Anaya Multimedia. ISBN 84-7614-128-9.
- ^ a b c d e f Zbikowski, 마크, 앨런, 폴, 발머, 스티브, 보먼 판사, 르우벤, 보먼 판사, 롭, 버틀러, 존은 캐롤, 척이며, 마크, 첼, 데이비드. Colee, 마이크, 코트니, 마이크;Dryfoos, 마이크, 던컨, 레이첼, Eckhardt, 커트, 에번스, 에릭, 농부, 릭, 게이츠, 빌, 기어리, 마이클 그리핀, 밥. 호가스, 더그. 존슨, 제임스 W.;Kermaani, Kaamel, 왕, Adrian은;. 코흐, 리드, 란도브스키, 제임스 라슨, 크리스, 레넌, 토머스, Lipkie, 댄, 맥도날드, 마크, 맥키니, 브루스, 마틴, 파스칼, Mathers가, 에스텔. Matthews, 밥, Melin, 데이비드. Mergentime, Charles:네빈, 랜디, 뉴웰, 댄, 뉴웰, 타니, 노리스, 데이비드, 있을 때 오리어리, 마이크;O'Rear, 밥, 올손, 마이크;Osterman, 래리, Ostling, 리지, 빠이, 선일. 패터슨, 팀;P.에레즈, 게리, 피터스, 크리스, 페쫄트, Charles:폴록, 존은 레이놀즈, 아론, 루빈은 대릴, 라이언, 랠프, Schulmeisters, 칼, 샤, Rajen, 쇼, 배리, 쇼트, 앤서니, Slivka, 벤, Smirl, 존, Stillmaker, 베티, 스토다드, 존은 틸먼, 데니스..휘튼, 그렉, Yount, 나탈리. Zeck, 스티브(1988년)."기술 고문".그 MS-DOS백과 사전:버전 1.03.2를 통해.덩컨, 레이, 보츠윅, 스티브, 버고인, 키스, 바이어스, 로버트 A.;까지.호건, 톰, 카일, 짐,. Letwin, 고든, 페쫄트, Charles:라비, 칩, 톰린, 짐, 윌턴 양탄자, 리처드, 울버 턴, 반, 웡은 윌리엄;우드콕. 도요목 도요과의 조류., JoAnne(완전히 교육 reworked.).워싱턴 주, 미국:MicrosoftPress.아이 에스비엔 1-55615-049-0. LCCN 87-21452.OCLC 16581341.(xix+1570 페이지, 26))(NB다.본판은 다른 작가팀이 1986년 초판을 회수하여 광범위하게 재작업한 후 1988년에 발행되었다. [1]
- ^ a b c d e f g Chappell, Geoff (January 1994). Schulman, Andrew; Pedersen, Amorette (eds.). DOS Internals. The Andrew Schulman Programming Series (1st printing, 1st ed.). Addison Wesley Publishing Company. ISBN 978-0-201-60835-9. (xxvi+738+iv 페이지, 3.5"-플로피[2][3]) 에라타: [4][5][6]
- ^ Paul, Matthias R. (1997-07-30). NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds. MPDOSTIP. Release 157 (in German) (3 ed.). Archived from the original on 2017-08-23. Retrieved 2012-01-11. (NB. NWDOSTIP).TXT는 Novell DOS 7과 OpenDOS 7.01에 대한 포괄적인 작품으로, 많은 미등록 기능 및 내부 기능에 대한 설명을 포함한다.그것은 저자의 더 큰 MPDOSTIP.Z의 일부분이다.IP 콜렉션은 2001년까지 유지되었고 그 당시 많은 사이트에 배포되었다.제공된 링크는 HTML 변환 NWDOSTIP의 이전 버전을 가리킨다.TXT 파일).
추가 읽기
- Brown, Ralf D., ed. (2000-07-17). "210F: DOS 1+ - OPEN FILE USING FCB". Ralf Brown's Interrupt List 61. ctyme.com. Archived from the original on 2016-06-19. [7]
- Elliott, John C. (2002-12-29). "CP/M File Control Block". Seasip.info. Archived from the original on 2017-08-23. Retrieved 2017-08-23.
- "CP/M Internals". 2017-08-23. Archived from the original on 2017-08-23. Retrieved 2017-08-23. - CP/M FCB에 대한 상세 설명