CHS의 섹터 번호 주소 지정이 0이 아닌 섹터 1에서 시작하는 이유는 무엇입니까?

CHS의 섹터 번호 주소 지정이 0이 아닌 섹터 1에서 시작하는 이유는 무엇입니까?

LBA가 도입되기 전에 CHS가 시작되는 이유는 무엇 0,0,1입니까 0,0,0?

답변1

불행하게도 이는 당시 유행했던 CHS 주소 지정 방식이 구현되어 사용되는 방식이었습니다. 이는 디스크 액세스에 사용되는 BIOS 인터럽트에서 IBM 호환 컴퓨터의 공식 규칙으로 채택되었으며, 이 규칙이 오늘날까지 사용되는 이유를 설명합니다. 에서ECMA-107 표준, 정보교환을 위한 디스크 카트리지의 볼륨과 파일 구조(원본에도 언급되어 있음)ATA-1 사양):

6.1.3 논리 섹터 번호

볼륨의 각 섹터는 논리 섹터 번호로 식별됩니다. [...]논리 섹터 번호는 0부터 시작하여 섹터 1, 트랙 00, 측면 0에서 시작하여 오름차순으로 할당됩니다., 트랙 00, 측면 1(FDC가 양쪽에 모두 녹음 가능한 경우)로 계속 이동한 다음 트랙 01, 측면 0 등으로 이동합니다.

이 문제는 사양에서 해결되었습니다.일부 하드 디스크, 여기서 주어진논리 CHS주소가 나와 다릅니다물리적 CHS 주소위치. 이에 대해서는 다음에서 추가로 논의됩니다.Seagate ATA 인터페이스 참조 설명서, 여기에는 다음과 같은 흥미로운 이야기가 포함되어 있습니다.

5.1 논리 블록 주소 지정

[...] 드라이브의 섹터는 실린더 0/헤드 0/섹터 1의 LBA 0을 사용하여 선형으로 매핑되는 것으로 가정됩니다.

[...] 모든 변환 모드에서 C=0, H=0, S=1은 LBA=0과 동일합니다.이 공식은 한 방향으로만 작동하기 때문에 모든 변환 모드에서 모든 논리 블록 주소에 대해 동등한 CHS를 계산하는 것은 불가능합니다. 이는 CHS에 섹터 0이 없기 때문에 CHS 주소 지정이 논리 블록 주소 지정이 액세스할 수 있는 모든 가능한 섹터의 1/256에 액세스할 수 없기 때문입니다.

따라서 논리적 CHS 주소 지정의 경우 첫 번째 실린더/헤드 인덱스는 0 기반 오프셋에서 시작하고 첫 번째부문색인은 다음에서 시작됩니다.1(예: 가능한 최소 CHS 주소는 0/0/1입니다.) 이는 항목에 대해 아무 것도 변경하지 않습니다.물리적이 섹터의 ​​위치. 처음이라고 생각하세요물리적디스크의 섹터는 "섹터 1"이라고 하며 CHS 0/0/1을 차지합니다. 실제로 대부분의 프로그래밍 언어에서 "첫 번째" 요소는 0 기반이므로논리적CHS 주소 0/0/1의 섹터 주소는 다음과 같습니다.( 0x00).

이는 논리적으로 훨씬 더 의미가 있습니다(즉, "0"논리적주소가 첫 번째물리적섹터), 다른 메모리 장치처럼 디스크 장치의 주소를 지정할 수 있으므로(각 섹터에는 이를 물리적 섹터에 매핑하는 고유한 선형 주소가 있으므로) LBA가 0부터 시작하는 것이 합리적입니다. 실제로 만약 우리가CHS 주소 0/0/1을 LBA로 변환, 결과 LBA는 다음과 같습니다 0x00000000(이것이 대부분의 CHS-LBA 계산에서 섹터 지수에서 1을 빼고 LBA-CHS 계산의 지수에 1을 추가하는 이유입니다).

답변2

나는 역사를 추적하려고 노력했다.CHS그리고 "1부터 시작" 섹터 번호 지정 실패로 인해 디스크 드라이버 작성자에게 많은 문제가 발생하고 급속한 증가가 발생했습니다.LBA.

CHS의 역사는 개인용 컴퓨터가 디스켓으로 실행되고 BIOS가 발명되던 시절로 거슬러 올라갑니다. 이것이 바로위키피디아말한다 :

BIOS(기본 입출력 시스템)라는 용어는 Gary Kildall이 고안했으며 1975년 CP/M 운영 체제에 처음 등장했습니다. 이는 부팅 시 로드되어 하드웨어와 직접 인터페이스하는 CP/M의 특정 시스템 부분을 설명합니다.

CP/M BIOS에 대한 연구 결과 문서가 발견되었습니다. CP/M 정보 아카이브 : BDOS 시스템 호출, 섹터 번호는 0으로 시작합니다. 결론은 다음과 같습니다.최초의 CHS 스키마는 실제로 0부터 시작하는 섹터 주소를 사용했습니다..

1 기반 섹터 주소는 최초의 IBP/PC에서 처음 도입되었습니다. 문서 INT 13 - 디스켓 BIOS 서비스구체적으로 말한다 :

Most disk BIOS calls use the following parameter scheme:

    AH = function request number
    AL = number of sectors  (1-128 dec.)
    CH = cylinder number  (0-1023 dec.)
    CL = sector number  (1-17 dec.)    <--------!!!
    DH = head number  (0-15 dec.)
    DL = drive number (0=A:, 1=2nd floppy, 80h=drive 0, 81h=drive 1)
    DL = drive number (0=A:, 1=2nd floppy, 80h=C:, 81h=D:)
         Note that some programming references use (0-3) as the
         drive number which represents diskettes only.
    ES:BX = address of user buffer

따라서 실제로 BIOS를 구현하여 섹터 번호 지정을 0 기반에서 1 기반으로 전환한 것은 IBM/PC였습니다.

IBM 개인용 컴퓨터(모델 5150)를 만드는 데 배정된 12명의 IBM 엔지니어 중데이비드 J. 브래들리BIOS용 코드를 개발했습니다. 따라서 그는 다른 모든 세부 사항 중에서 디스크 인터럽트에 대한 매개 변수를 결정한 사람입니다. 우리는 또한 유명한 CTRL+ ALT+ 인 Mel Hallerman과 함께 이 사람에게 빚을 지고 있습니다 DEL.

그래서대답질문에 CHS에서 섹터 수가 0이 아닌 1에서 시작하는 이유는 무엇입니까?이다 :
David J. Bradley가 BIOS를 그런 식으로 프로그래밍했기 때문입니다..

그가 왜 이런 식으로 행동했는지에 대해서는 스스로 대답하는 것이 가장 좋습니다. 내가 추측해야 한다면, 그는 운전자가 헤드가 올바른 경로에 있는지 확인할 수 있는 주소 지정 섹터로 섹터 0을 떠났다고 말할 것입니다.

디스크는 실제로 그러한 메커니즘을 필요로 하지 않도록 설계되었고 엔지니어들은 BIOS 때문에 한 섹터를 낭비할 준비가 되어 있지 않았기 때문에 섹터 0은 결코 존재하지 않았습니다. 그 이후로 드라이버 작성자는 모든 BIOS 디스크 호출에 대해 섹터 주소에 1을 빼고 1을 더해야 했습니다.

답변3

플로피 디스크에 대한 첫 번째 사양은 IBM 3740의 출현으로 IBM에 의해 만들어졌으며 시스템용으로 예약된 섹터가 있다는 것을 언급하지 않습니다. 시스템에 대한 유일한 예약은 트랙 01부터 76까지에 저장된 정보 유형을 식별하는 "데이터 세트 레이블"만 저장하는 트랙 00입니다. 이는 첫 번째 섹터가 SECTOR 1임을 명확하게 정의합니다. 이것은 우연이 아니라 우연입니다. 컴퓨터의 번호 매기기에 대한 자연 계산의 문제.

우리는 인간이 무엇이든 세기 시작할 때 0이 아니라 1로 시작한다는 것을 관찰할 수 있습니다. 예를 들어, 교실에 135명의 학생이 있다고 가정해 보겠습니다. 숫자를 세는 것은 다음과 같습니다: 하나, 둘, 셋 ... 백서른넷, 백서른다섯.

수치 표현은 다음과 같습니다: 1, 2, 3, ... 134, 135 지금까지 우리는 동의합니다. 그렇죠?

이제 0으로 표현되지 않는 숫자를 넣어보겠습니다. 다음과 같습니다: 001, 002, 003, ..., 015, 016, ..., 099, 100, ..., 133, 134, 135

이것이 일어나는 일입니다CHS:0,0,1 - 0,0,2 - 0,0,3...

Excel 시트의 행이나 데이터베이스의 자동 숫자 필드가 0이 아닌 1로 시작하는데 아무도 이에 대해 언급하지 않았다는 점이 중요합니다.

David J. Bradley가 BIOS를 그런 식으로 예약했습니까?

응, 하지만 그 사람은 밖에 있지 않았어.

SECTOR 0이 다른 이유로 사용자에게 예약되거나 숨겨지지 않는 한 사용할 수 없는 기술적인 이유는 확실히 없습니다. 원칙적으로 그것을 가리키는 모든 것은 자연번호 매기기의 문제입니다.

GA21-9152-2 파일 번호 3740-00,15
IBM 3740 데이터 입력 시스템

12페이지
디스크 초기화
...각 디스크에는 불규칙한 트랙을 대체할 수 있는 2개의 예비 트랙이 포함되어 있습니다. 또한 초기화 기능은 디스켓의 섹터 주소 순서를 변경하는 수단을 제공합니다. 일반적으로 섹터 순서는 숫자 순서(1, 2, 3, ... 25,26)입니다.
.

24페이지
디스켓의 데이터 라벨링
초기화 중에 데이터 세트에 대한 데이터 세트 라벨은 디스켓의 인덱스 트랙(트랙 00)에 자기적으로 기록됩니다. 이 레이블의 주요 목적은 디스켓에 있는 데이터 세트의 위치를 ​​표시하는 것입니다.

1973년의 일입니다. 8인치 디스켓에 데이터를 기록했습니다. IBM PC 5150은 1981년 8월 12일에 탄생했습니다... 그리고 이전 장치들과 어느 정도 호환성을 유지해야 했다는 점을 잊을 수 없습니다.

기술적인 이유는 전혀 없었습니다.

관련 정보