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


13

LBA가 도입되기 전에 CHS는 왜 시작 0,0,1하지 0,0,0않습니까?


1
"왜 섹터 카운트가 1에서 시작합니까?" – 실제로 섹터 카운트가 아닌 섹터 번호를 참조 하고 있습니다 . 이들은 디스크 요청에 사용되는 두 개의 고유하고 다른 매개 변수입니다. 디스크 드라이브에 인덱스 라는 고유 한 엔티티가 있기 때문에 "섹터 인덱스" 도 섹터 번호의 약어입니다 .
톱밥

답변:


8

불행히도, 이것은 당시에 널리 사용되었던 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 번 섹터가 없기 때문에 논리 블록 주소 지정이 액세스 할 수있는 모든 가능한 섹터의 1/256 번째에 CHS 주소 지정이 액세스 할 수 없기 때문입니다.

따라서 논리 CHS 주소 지정의 경우 첫 번째 실린더 / 헤드 인덱스가 0 기반 오프셋에서 시작 하고 첫 번째 섹터 인덱스가 1 에서 시작하지만 (예 : 가능한 최소 CHS 주소는 0/0/1), 이는 변경되지 않습니다. 이 섹터 의 물리적 위치 CHS 0/0/1을 차지하는 "섹터 1"이라고하는 디스크 의 첫 번째 물리 섹터 로 생각하십시오 . 실제로 대부분의 프로그래밍 언어에서 "첫 번째"요소는 0 기반이므로 CHS 주소 0/0/1에서 섹터 의 논리 주소는 0 ( 0x00)입니다.

이것은 디스크 장치를 다른 메모리 장치로 지정할 수 있기 때문에 논리적으로 (즉, "제로" 논리 주소는 첫 번째 물리 섹터 임) 훨씬 더 의미 가 있습니다 (각 섹터는 고유 한 선형 주소를 가지므로 물리에 매핑됩니다) LBA가 0에서 시작하는 것이 합리적 인 이유는 무엇입니까? 실제로, CHS 주소 0/0/1을 LBA 로 변환하면 결과 LBA는 0x00000000(대부분의 CHS의 섹터 인덱스에서 1을 LBA 계산에서 빼고 1이 LBA의 인덱스에 추가되는 이유입니다) CHS 계산).


나는이 질문에 대한 답변을 이미 알고 있지만 내 의견을 남긴 사람이 답변을 표시 한 것으로 추측합니다 ... 어쨌든이 질문을 한 이유는 모두와 내가 읽은 모든 것이 기본적으로 귀하의 정확한 내용을 게시했기 때문입니다 대부분의 단어. 사람들이 무언가를 만들지 않고 그것을 사용하고 싶지 않아서 사용하지 않기 때문에 "그들이 만든 방식 일뿐입니다." 전혀 ...
Jordan Davis

1
CHR / CHS / LBA의 이력을 살펴보면 MBBCCHHR을 사용하여 가변 길이 인 CHR이 zero sector오류 코드 및 불량 블록 등에 사용되었다는 사실을 알았 습니다. 드라이브에 컨트롤러 (펌웨어) 추가 및 "논리"디스크 연결 시작의 전환 ... 이제 컨트롤러가 보이지 않지만 동일한 방식으로 사용한다고 가정 할 수 있습니다.이 용어는 이제 "호스트 보호됨"이라고합니다. 지역 " en.wikipedia.org/wiki/Fixed-block_architectureen.wikipedia.org/wiki/Host_protected_area
Jordan Davis

@JordanDavis 대부분의 경우 호스트로 보호되는 영역은 디스크의 끝 부분에 있으며 시작하지 않습니다. 실제로 첫 번째 섹터의 명명법이 값으로 반환되는 1동안 여전히 이유에 대한 정보를 찾지 못했습니다 (섹터 0가 오류 플래그로 예약 된 섹터와 관련이 있다고 생각되지만 ). 내가 뭔가를 만나면 당신을 업데이트 할 것입니다.
획기적인

FBA 섹션 개요에 대한 Wikipedia 링크는 ECC로는 0 번째 기록이지만 목록은 좋을 것입니다.
Jordan Davis

@JordanDavis 다른 사람들의 의견을 듣고 싶습니다. 특히 이유 측면 과 관련하여 의견을 듣고 싶습니다 . 다른 답변에 대한 기회.
획기적인

8

나는 CHS 의 역사 와 "1로 시작하는"섹터 넘버링 피스코 를 추적하려고 시도했는데 , 이로 인해 디스크 드라이버 제작자들에게 많은 합병증이 생겨 LBA 가 급격히 상승했습니다 .

CHS는 개인용 컴퓨터가 디스켓에서 실행 된 날과 BIOS가 발명 된 날로 거슬러 올라갑니다. 이것이 Wikipedia의 말입니다 :

BIOS (Basic Input / Output System)라는 용어는 Gary Kildall이 발명했으며 1975 년 CP / M 운영 체제에서 처음 등장하여 부팅시로드 된 CP / M의 시스템 별 부분을 하드웨어와 직접 인터페이스합니다.

CP / M BIOS에 대한 연구에 따르면 CP / M 정보 아카이브 (BDOS 시스템 호출 )에서 섹터 번호가 0으로 시작 하는 문서가 발견되었습니다 . : 결론이다 초기 CHS 스키마가 실제로 제로 섹터 주소를 사용 .

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였습니다.

David J. Bradley 는 IBM 개인용 컴퓨터 (모델 5150)를 작성하도록 지정된 12 명의 IBM 엔지니어 중 BIOS 용 코드를 개발했습니다. 그래서 그는 다른 모든 세부 사항 중에서 디스크 인터럽트의 매개 변수를 결정한 사람입니다. 우리는 또한 Mel CTRL+ Hallerman과 함께이 남자에게 유명한 + ALT+를 빚지고 DEL있습니다.

그래서 대답 질문에는 왜 섹터 수는 1에서 시작 않고 0이 아닌 CHS에서이 있습니다 :
데이비드 J. 브래들리가 진행하는 BIOS를 프로그램 때문에 .

그가 왜 이런 식으로했는지에 관해서는, 이것은 스스로 대답하는 것이 가장 좋습니다. 내가 추측해야한다면, 그는 운전자가 헤드가 올바른 길을 가고 있음을 확인할 수있는 어드레싱 섹터로 섹터 0을 남겼다고 말할 것이다.

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


"나는 그가 섹터 0을 어드레싱 섹터로 두었다고 말하고 싶다 ..." 모든 섹터에는 실린더 / 헤드 / 섹터 주소를 포함하는 식별 레코드가 있습니다. 디스크 컨트롤러는 검색이 올바른 실린더에서 완료되었는지 확인하기 위해 인덱스가 돌아올 때까지 기다릴 필요가 없습니다. 헤드 아래에서 회전하는 바로 다음 섹터를 읽고 확인합니다.
톱밥

"CH = 실린더 번호 (0-1023 12 월)" -원래 IBM PC BIOS는 "트랙"번호에 CH를 사용합니다. CH는 8 비트 레지스터이므로 최대 값은 255입니다.
sawdust 1

"CHS의 역사를 추적하려고 노력했지만 LBA가 급격히 상승했습니다." -분명히 "LBA"에 대한 모든 논의는 PC 디스크 인터페이스, 특히 ATAPI 사양에만 해당됩니다. 그렇지 않으면 CHS와 LBA가 공존 할 수 있습니다. EG 내부적으로 LBA를 사용하는 몇 가지 파일 시스템을 작성했지만 컨트롤러 인터페이스 당 실제 디스크 I / O를 수행하기 위해 주소 지정을 CHS로 변환했습니다. "가장 빠른 CHS 스키마는 실제로 제로 기반 섹터 주소를 사용했습니다." -사실이지만 CP / M 이전에 일어났습니다.
톱밥

@ sawdust : 내가 한 것은 IBM 문서를 인용하는 것이 었습니다. 심지어 PC BIOS 인터페이스에 대한 레지스터 할당보다 오래되었을 수도 있습니다. 섹터 0을 예약 된 주소로 설정하여 Bradley가 착각하거나 오도 된 것은 분명하지만, 결코 발생하지 않았기 때문에 무엇을해야하는지 확신 할 수 없습니다. 그는 섹터 주소 부분에 트랙 번호가 포함되어 있음을 알지 못했을 수 있습니다. 또는이 예비 섹터는 Bradley의 일반 BIOS 인터페이스로 옮겨진 디스켓의 속성 일 수 있습니다. 우리는 IBM / PC BIOS가 CHS의 이러한 변경에 책임이 있음을 알고 있습니다.
harrymc

이러한 문제에서 항상 그렇듯이 Ralph Brown의 인터럽트 목록은 귀중한 정보를 제공합니다. @sawdust가 CH를 8 비트 레지스터로 쓴 것은 사실이지만 CX가 사용 된 방식은 아닙니다. 대신, CX는 실린더 번호 섹터 번호 로 채워져 있습니다 (그러나이 확장은 플로피가 아닌 하드 디스크에만 적용됩니다. 플로피의 경우 CL은 섹터 번호를, CH는 실린더 번호를 유지했습니다). 예를 들어 Int 13 / AH = 02h, BIOS-DISK-READ SECTOR (S) INTO MEMORY 입력 매개 변수에 지정된 인터페이스를 비교하십시오 .
CVn

1

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

우리는 인간이 어떤 것을 계산하기 시작하면 0이 아니라 1로 시작한다는 것을 알 수 있습니다. 예를 들어, 교실에 135 명의 학생이 있다고 상상해보십시오. 숫자를 세는 것은 다음과 같습니다. 1, 2, 3 ... 백 삼십 사, 백 삼십 오.

숫자 표현은 다음과 같습니다. 1, 2, 3, ... 134, 135 지금까지 우리는 동의합니까?

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이 다른 이유로 사용자에게 예약되고 숨겨져 있지 않는 한 SECTOR 0을 사용할 수없는 기술적 이유는 없습니다. 원칙적으로 모든 것은 자연적인 번호의 문제입니다.

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

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

24 페이지
DATA ON 표지 디스켓을
초기화하는 동안은, 데이터 세트에 대한 데이터 세트 라벨 자기 인덱스 트랙 디스켓 (00 트랙)에 기록된다. 이 레이블의 주요 목적은 디스켓에서 데이터 세트의 위치를 ​​표시하는 것입니다.

8 인치 디스켓에 데이터를 기록했습니다. IBM PC 5150은 1981 년 8 월 12 일에 태어 났으며 이전 장치와의 호환성을 유지해야한다는 것을 잊을 수 없습니다.

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


드라이버 용으로 예약 됨-I / O 펌웨어 인터페이스, 심지어 오늘날의 SSD 디스크 또는 플래시에서도 I / O 작업을위한 읽기 / 쓰기 / 복사 / 포맷 등을위한 공간이 예약되어 있습니다.
Jordan Davis


예, SECTOR 0이 아니라 CYLINDER 0입니다. 첫 번째 스펙 (IBM 3740)에서 실린더 0을 "인덱스 실린더"라고하며 "INDEX CYLINDER LAYOUT"에 지정된 여러 데이터를 저장합니다. 최신 디스크에서이 실린더는 일반적으로 "실린더 번호 -1", 예 "-1"로 지정되며 컨트롤러에서만 액세스 할 수 있습니다. 섹터 0이 사용되지 않은 이유는 설명 할 것이 없으며 CP / M과 같은 일부 운영 체제에서는 볼 수 있지만 하드웨어가 여전히 IBM 3740에 따라 제조되므로 가상입니다. 부문 1. 왜? "자연 번호"
APO69
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.