CHS-LBA 매핑 - (디스크 스토리지)

CHS-LBA 매핑 - (디스크 스토리지)

LBA 이전에는 단순히 디스크의 물리적 매핑이 있었습니다. 원래 IBM-PC 호환 시스템에서 BIOS를 사용한 디스크 액세스는 다음과 같았습니다.

  • 실린더 번호:(10b)
    • 0-1024 (1024 = 2^10)
  • 머리 번호: (8b)
    • 0-256 (256 = 2^8)
  • 섹터 번호: (6b)
    • 0은 일반적으로 "부트 섹터" (-0,시간-0,에스-0)
    • 1-64 (63 = 2^6 - 1) *0은 예약되어 있습니다.

총 CHS 주소:24b(10+8+6)


예전에는 평균(파일|블록|섹터) 크기가 512B였습니다.

위키피디아:

512(bytes) × 63(sectors) x 256(heads) × 1024(cylinders) = 8064 MiB (yields what is known as 8 GiB limit) 

내가 혼란스러워하는 것은 무엇입니까?머리heads-per-cylinder실제로 는 LBA 공식에서 언급될 때를 의미합니다 . 내가 아는 바로는 머리가머리, 이동식 미디어가 아닌 경우 각각플래터각 표면에 하나씩 두 개(상단, 하단)가 있습니다.

여기에 이미지 설명을 입력하세요

내 생각에는 실린더가 전체 디스크(다중 플래터)를 통과하므로 이들을 heads-per-disk또는 이라고 부르는 것이 더 적합할 것 같습니다 .heads-per-surface

여기에 이미지 설명을 입력하세요


논리적 블록 주소 지정:

공식:A = (c ⋅ Nheads + h) ⋅ Nsectors + (s − 1)

  • A- 논리 블록 주소
  • Nheads- 디스크의 헤드 수heads-per-disk
  • Nsectors- 트랙의 섹터 수sectors-per-track
  • c,h,s- 실린더, 헤드, 섹터 번호입니다.24-bits total (10+8+6)

첫 번째 예를 보면여기:

For geometry 1020 16 63 of a disk with 1028160 sectors CHS 3 2 1 is LBA  3150=(3× 16+2)× 63

기하학:(이것은 제조사가 정의한 것입니다)

  • 실린더 - 1020
  • 머리-16
  • 섹터 - 63

답변1

전반적으로 용어가 다소 엉성하여 더 많은 혼란을 야기합니다.

1024비트 주소 지정 가능 숫자(1024 = 2^10)

IBM PC/XT는 하드웨어 레지스터에서 10비트 실린더 번호를 사용하는 Western Digital WD1010 디스크 컨트롤러를 사용했습니다.
첫 번째 실린더의 주소는 0이므로 1024개의 실린더 주소가 있습니다.
"주소 지정 가능한 번호"는 말도 안되는 소리다.

-1 "부트 섹터"(c-0,h-0,s-0)
63비트 주소 지정 가능 숫자(63 = 2^6 - 1)

모든 트랙의 첫 번째 섹터는 주소 1이므로 6비트 섹터 번호는 각 트랙에서 최대 63개 섹터(섹터 번호 1~63)의 주소를 지정할 수 있습니다.
섹터 주소 0이 없습니다. 예약되어 있지 않습니다. 존재하지 않습니다.
이 오프셋을 빼는 것은 산술적으로 필요하며 부트 섹터와는 전혀 관련이 없습니다. 부팅(또는 모든 기능)을 위해 디스크 드라이브의 첫 번째 섹터(또는 모든 섹터)를 사용하는 것은 시작 오프셋을 빼는 데 필요한 것과 관련이 없습니다.

따라서 다음과 같은 이론적 최대 주소를 얻을 수 있습니다.

512(바이트) × 63(섹터) x 256(헤드) × 1024(실린더) = 8064MiB

아니요, 최대 용량입니다.
디스크 주소는 바이트가 아닌 섹터용입니다.

헤드 번호는 246비트 주소 지정이 가능한 번호인 것으로 알고 있습니다.

뭐??? "주소 지정 가능한 번호"???
구동 매개변수 중 하나는 (실린더 내) 헤드 수입니다.
CHS 주소의 숫자 중 하나가 헤드 번호입니다.
246비트???

내가 혼란스러워하는 것은 머리가 로 언급될 때 실제로 머리가 무엇인지입니다 heads-per-track.

Heads-per-trackPC에 사용되는 일반적인 HDD에는 그러한 매개변수가 없기 때문에 사용자가 구성한 것입니다(즉, 해당 숫자는 항상 1입니다).
특정 트랙은 하나의 특정 R/W 헤드에서만 읽고 쓸 수 있습니다.
표면당 하나의 R/W 헤드가 있습니다. (듀얼 포트 드라이브를 사용할 가능성은 없습니다.)
R/W 헤드는 암 끝에 장착됩니다.
모든 R/W 헤드와 암은 액추에이터에 의해 이동/회전되는 어셈블리로 구성됩니다.
(그러나 그런 적도 있었습니다.결정된- 헤드 디스크 드라이브(예: 탐색 시간이 0인 트랙당 하나의 헤드)

내가 아는 바로는 헤드(읽기/쓰기를 수행하는 실제 팔)이고 탈착식 미디어가 아닌 한 각 플래터에는 두 개(상단, 하단)가 있으므로 실제로는 이러한 용어가 이해되지 않습니다. 그 이후로 이를 플래터당 헤드 또는 디스크당 헤드라고 부르게 되었습니다. 실제로는 트랙당 섹터여야 합니다. 그렇죠?

그렇다면 당신은 머리가 무엇인지 혼란스러워하는 것 같습니다.
또한 "플래터"와 "표면"을 혼동하고 있습니다.
플래터의 양면을 사용해야 한다는 요구 사항은 없으므로 플래터를 하나의 단위로 취급하는 것이 아니라 각 표면을 하나의 단위로 처리합니다.
라는 드라이브 매개변수가 있습니다 sectors per track.

이제 heads-per-trackCHS에서 LBA로의 변환을 보면 이 용어가 나타납니다.

이번에도 당신이 꾸며낸 일이 있는 것 같았습니다. 트랙당 헤드 수는 단일성입니다.

하지만 기하학 1020,16,63이 CHS 3,2,1로 어떻게 변환되는지 누군가 나에게 설명해 줄 수 있습니까?

LBA는 섹터 주소입니다.
CHS는 섹터 주소이기도 합니다.
한 주소 스타일을 다른 주소 스타일로 변환하려면 드라이브 구조를 지정해야 합니다.

. number of cylinders  
. number of heads (per cylinder)  
. number of sectors per track

기하학을 주소로 *번역*할 수 없습니다. 너사용주소를 변환하기 위한 기하학입니다. 드라이브 구조가 다음인 경우
CHS 주소는 3,2,1LBA 주소와 동일합니다 .31501020,16,63


수정된 질문에 대한 부록

내 생각에는 실린더가 전체 디스크(다중 플래터)를 통과하므로 이를 디스크당 헤드 또는 표면당 헤드라고 부르는 것이 더 적합할 것 같습니다.

내가 읽은 디스크 드라이브 제조업체의 수많은 기술 문서 중 (단일 포트) 드라이브의 사양 표에는 다음이 나열되어 있습니다.R/W 헤드 수그리고플래터의 수. heads per disk, heads per surface, 의 비율은 한번도 없었습니다 heads per platter.

컨트롤러 펌웨어, 디스크용 장치 드라이버 및 파일 시스템 핸들러를 개발하는 소프트웨어/펌웨어 엔지니어로 일하면서 나는 플래터 수에 대해 걱정하거나 사용할 필요가 없었습니다. 플래터의 수 또는 플래터에 가능한 두 개의 표면이 있다는 것은 다음과 같습니다.기계적 성질이는 CHS 주소 지정을 위한 드라이브 구조와 전혀 관련이 없습니다.

CHS의 C는 실린더 주소를 나타냅니다. 디스크 드라이브는 (전기-기계적으로)구하다R/W 헤드 어셈블리가 올바르게 배치되도록 요청된 실린더 주소/위치로 이동합니다.

CHS의 H는 R/W 헤드 주소를 나타냅니다. 디스크 컨트롤러(전기적으로)선택하다요청된 R/W 헤드(탐색이 완료된 후)를 해당 주소로 검색하여 올바른 트랙에 액세스합니다. 다른 모든 R/W 헤드는 (전기적으로) 비활성화됩니다.

CHS의 S는 섹터 주소를 나타냅니다. 디스크 컨트롤러는 (선택된) R/W 헤드 아래에서 회전하면서 요청된 섹터를 찾을 때까지(예: 섹터의 ID 레코드를 읽고 주소를 수행할 때까지) 각 섹터를 프로그래밍 방식으로 검색합니다(탐색 및 헤드 선택 후). 비교).

또한
차원 분석에 익숙하다면 디스크 드라이브의 헤드 수를 heads per cylinder로 지정하는 것이 heads per drive.

기하학 CHS 번호를 이해하지만 (3,2,1) 튜플 CHS 번호는 어디에서 오는 것입니까?

이는 LBA 주소로의 변환 예에 사용하기 위해 선택한 임의의 CHS 주소일 뿐입니다.

지금
최종 사용자 전문 용어로는 "디스크" == 디스크 드라이브입니다.
전문 HDD 전문 용어로 "디스크" == 디스크 플래터입니다.

답변2

다음은 Python에서 구현된 변환, 역사적 특이점 및 적절한 용어에 대한 편리하고 빠른 요약입니다. 대문자는 기하학을 지정하고, 소문자는 (c,h,s)섹터 주소의 구성 요소를 지정합니다.

기본 (C,H,S)구조는 MBR/BIOS 스타일 부팅 초기 부팅 시 최신 대형 디스크에 일반적으로 사용되는 값을 제공합니다.

def chs(lba,C=1024,H=255,S=63):
  """
  'lba' linearly addresses sector, indexing from zero.
  'C','H','S' specify geometry - fixed for a given disk:
     1 <= C <= 1024 (10 bits)
     1 <= H <= 255  (8 bits) not 256 due to WD1010 quirk
     1 <= S <= 63   (6 Bits) not 64 due to WD1010 quirk
   Returns address as c,h,s tuple:
     0 <= c <= 1023 (10 bits) modulo C
     0 <= h <= 255  (8 bits) modulo H
     1 <= s <= 63   (6 Bits) not 64 due to WD1010 quirk
  """
  if C<1 or H<1 or S<1 or C>1024 or H>255 or S>63:
    raise ValueError, \
      "Invalid (C,H,S) geometry: ({},{},{})". \
        format(C,H,S)
  t,s = divmod(lba,S); s+=1 # tracks, sector offset
  c,h = divmod(t,H)
  if c>=C: raise ValueError, \
    "Unaddressable lba value: {} for ({},{},{}) geometry.". \
      format(lba,C,H,S)
  return (c,h,s)

def lba(c,h,s,C=1024,H=255,S=63):
  """
  'C','H','S' specify geometry as for function 'chs'.
  'c','h','s' address a sector in this geometry.
  """
  if C<1 or H<1 or S<1 or C>1024 or H>255 or S>63:
    raise ValueError, \
      "Invalid (C,H,S) geometry: ({},{},{})". \
         format(C,H,S)
  if c<0 or h<0 or s<1 or c>=C or h>=H or s>S:
    raise ValueError, \
      "Unaddressable (c,h,s) value: ({},{},{}) for ({},{},{}) geometry.". \
         format(c,h,s,C,H,S)
  return (c*H+h)*S+(s-1)

관련 정보