ก่อนที่จะได้รับการแนะนำ LBA ทำไม CHS เริ่มต้นที่0,0,1
ไม่0,0,0
?
ก่อนที่จะได้รับการแนะนำ LBA ทำไม CHS เริ่มต้นที่0,0,1
ไม่0,0,0
?
คำตอบ:
น่าเสียดายที่นี่เป็นเพียงวิธีการกำหนดรูปแบบ CHS ซึ่งเป็นที่นิยมในเวลานั้นได้รับการปรับใช้และนำไปใช้งาน สิ่งนี้ถูกนำมาใช้เป็นแบบแผนทางการสำหรับคอมพิวเตอร์ที่เข้ากันได้กับ IBM ในการขัดจังหวะ BIOS ที่ใช้สำหรับการเข้าถึงดิสก์อธิบายว่าทำไมการประชุมนี้จึงถูกนำมาใช้จนถึงทุกวันนี้ จากมาตรฐาน ECMA-107 , ระดับเสียงและโครงสร้างไฟล์ของคาร์ทริดจ์ดิสก์สำหรับการแลกเปลี่ยนข้อมูล (ซึ่งได้กล่าวถึงในข้อกำหนดATA-1ดั้งเดิม):
6.1.3 หมายเลขเซกเตอร์เชิงตรรกะ
แต่ละเซกเตอร์ของไดรฟ์ข้อมูลจะถูกระบุด้วยหมายเลขเซกเตอร์เชิงตรรกะ [... ] หมายเลขเซกเตอร์แบบลอจิคัลจะถูกกำหนดในลำดับจากน้อยไปมากโดยเริ่มต้นที่ 0 โดยเริ่มจากเซกเตอร์ 1, แทร็ก 00, ฝั่ง 0 , ต่อไปยังแทร็ก 00, ฝั่ง 1 (ถ้าบันทึก FDC ทั้งสองข้าง) เพื่อติดตาม 01, ด้าน 0, ฯลฯ
ปัญหานี้ได้รับการแก้ไขในรายละเอียดสำหรับฮาร์ดดิสก์บางส่วนซึ่งจะมีการตั้งข้อสังเกตว่าที่กำหนดตรรกะ CHSแตกต่างกันอยู่จากที่อยู่ CHS ทางกายภาพที่ตั้ง มีการอธิบายเพิ่มเติมในคู่มืออ้างอิงอินเทอร์เฟซ Seagate ATAซึ่งมีคำบรรยายที่น่าสนใจนี้:
5.1 การจัดการบล็อกแบบลอจิคัล
[... ] เซกเตอร์บนไดรฟ์จะถูกแมปเป็นเส้นตรงโดยมี LBA 0 ของทรงกระบอก 0 / หัว 0 / เซกเตอร์ 1
[... ] สำหรับโหมดการแปลทั้งหมด C = 0, H = 0, S = 1 เทียบเท่ากับ LBA = 0 ไม่สามารถคำนวณ CHS ที่เทียบเท่าสำหรับที่อยู่บล็อกแบบลอจิคัลทั้งหมดในโหมดการแปลทั้งหมดเนื่องจากสูตรนี้ใช้งานได้ในทิศทางเดียวเท่านั้น นี่เป็นเพราะที่อยู่ CHS ไม่สามารถเข้าถึง 1/256 ของภาคที่เป็นไปได้ทั้งหมดที่การกำหนดบล็อกทางตรรกะสามารถเข้าถึงได้เนื่องจากไม่มีภาคที่ 0 ใน CHS
ดังนั้นสำหรับการกำหนด CHS แบบลอจิคัลแม้ว่าดัชนีทรงกระบอก / หัวแรกจะเริ่มต้นจากการชดเชยแบบอิง 0 และดัชนีภาคแรกเริ่มจาก1 (เช่นที่อยู่ CHS ขั้นต่ำสุดที่เป็นไปได้คือ 0/0/1) สิ่งนี้ไม่เปลี่ยนแปลงอะไรเลย ที่ตั้งทางกายภาพของภาคนี้ คิดว่าเป็นเซกเตอร์กายภาพแรกบนดิสก์ที่เรียกว่า "เซกเตอร์ 1" ครอบครอง CHS 0/0/1 แท้จริงแล้วองค์ประกอบ "แรก" ในภาษาการเขียนโปรแกรมส่วนใหญ่นั้นใช้แบบ 0 ดังนั้นที่อยู่แบบลอจิคัลของภาคที่ CHS address 0/0/1 คือศูนย์ ( 0x00
)
สิ่งนี้ทำให้มีเหตุผลมากขึ้น (เช่นที่อยู่ตรรกะ "zeroth" เป็นเซกเตอร์กายภาพครั้งแรก) เนื่องจากเราสามารถระบุอุปกรณ์ดิสก์เป็นอุปกรณ์หน่วยความจำอื่น ๆ (เนื่องจากแต่ละภาคมีที่อยู่เชิงเส้นที่ไม่ซ้ำกันเพื่อจับคู่กับ ภาค) ดังนั้นเหตุใดจึงเหมาะสมที่ LBA เริ่มต้นจากศูนย์ ที่จริงถ้าเราแปล CHS address 0/0/1 เป็น LBA LBA ที่ได้จะเป็นผลลัพธ์0x00000000
(นี่คือสาเหตุที่ 1 ถูกลบออกจากดัชนีภาคในการคำนวณ CHS เป็น LBA ส่วนใหญ่และทำไม 1 ถูกเพิ่มลงในดัชนีสำหรับ LBA ถึงการคำนวณ CHS)
zero sector
สำหรับรหัสข้อผิดพลาดและบล็อกที่ไม่ดี ฯลฯ .... เปลี่ยนเป็น CHS และ "แก้ไขบล็อกสถาปัตยกรรม" คุณยังมี การเปลี่ยนแปลงของการเพิ่มตัวควบคุม (เฟิร์มแวร์) ไปยังไดรฟ์และจุดเริ่มต้นของการเชื่อมโยงดิสก์ "แบบลอจิคัล" ... ตอนนี้ตัวควบคุมมองไม่เห็น แต่คุณสามารถสันนิษฐานได้ว่าใช้แบบเดียวกันนี้ ... คำนี้เรียกว่า พื้นที่ " en.wikipedia.org/wiki/Fixed-block_architectureและen.wikipedia.org/wiki/Host_protected_area
1
ฉันยังคงไม่พบข้อมูลใด ๆ ว่าทำไม (ถึงแม้ว่าฉันสงสัยว่ามันอาจมีบางสิ่งที่เกี่ยวข้องกับภาคที่0
ถูกสงวนไว้เป็นค่าสถานะข้อผิดพลาด) ฉันจะแน่ใจว่าได้อัปเดตคุณถ้าฉันเจออะไร
ฉันได้พยายามที่จะติดตามประวัติศาสตร์ของCHSและ "เริ่มต้นด้วย 1" ภาคเลขล้มเหลวซึ่งได้ก่อให้เกิดภาวะแทรกซ้อนหลายสำหรับนักเขียนดิสก์ไดรเวอร์และให้สูงขึ้นอย่างรวดเร็วเพื่อLBA
CHS ย้อนหลังไปถึงวันที่คอมพิวเตอร์ส่วนบุคคลทำงานบนดิสเก็ตต์และเมื่อมีการคิดค้น BIOS นี่คือสิ่งที่Wikipediaพูดว่า:
คำว่า BIOS (ระบบอินพุต / เอาท์พุตพื้นฐาน) ถูกคิดค้นโดย Gary Kildall และปรากฏตัวครั้งแรกในระบบปฏิบัติการ CP / M ในปี 1975 โดยอธิบายถึงส่วนเฉพาะเครื่องของ CP / M ที่โหลดระหว่างเวลาบูตซึ่งเชื่อมต่อโดยตรงกับฮาร์ดแวร์
การวิจัยเกี่ยวกับ CP / M BIOS พบเอกสารที่ เก็บข้อมูล CP / M: การเรียกระบบ BDOSซึ่งหมายเลขภาคเริ่มต้นด้วยศูนย์ สรุปก็คือว่าสคี CHS เร็วที่สุดเท่าที่ใช้จริง zero-based ที่อยู่ภาค
ที่อยู่ภาคเดียวใช้ครั้งแรกกับ IBP / PC แรก เอกสาร INT 13 - Diskette BIOS Servicesกล่าวโดยเฉพาะว่า:
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
ดังนั้นจึงเป็น IBM / PC ที่การใช้ไบออสอย่างไม่เป็นทางการได้แปลงการกำหนดหมายเลขภาคจาก zero-based เป็น one-based
จากวิศวกรทั้งสิบสองคนของ IBM ที่ได้รับมอบหมายให้สร้างคอมพิวเตอร์ส่วนบุคคลของ IBM (รุ่น 5150) David J. Bradley ได้พัฒนาโค้ดสำหรับ BIOS ดังนั้นเขาคือคนที่ตัดสินใจเลือกพารามิเตอร์สำหรับการขัดจังหวะดิสก์ นอกจากนี้เรายังเป็นหนี้ร่วมกันผู้ชายคนนี้กับเมล Hallerman ที่มีชื่อเสียง CTRL+ +ALTDEL
ดังนั้นคำตอบของคำถามที่
ว่าทำไมเซกเตอร์นับเริ่มที่ 1 และไม่ใช่ 0 ใน CHSคือ:
เนื่องจาก David J. Bradley ตั้งโปรแกรม BIOS ในลักษณะนั้น
สำหรับเหตุผลที่เขาทำอย่างนี้นี่เป็นคำตอบที่ดีที่สุดสำหรับตัวเขาเอง ถ้าฉันต้องเดาฉันจะบอกว่าเขาปล่อยเซกเตอร์ศูนย์ไว้เป็นภาคการจัดการกับที่คนขับสามารถตรวจสอบได้ว่าศีรษะนั้นอยู่ในเส้นทางที่ถูกต้อง
ในขณะที่ดิสก์ได้รับการออกแบบทางวิศวกรรมเพื่อที่จะไม่ต้องใช้กลไกดังกล่าวและวิศวกรยังไม่พร้อมที่จะเสียส่วนใดส่วนหนึ่งเนื่องจาก BIOS, เซคเตอร์ศูนย์ไม่เคยมีอยู่ หลังจากนั้นผู้เขียนไดรเวอร์ถูกทิ้งให้อยู่กับความต้องการที่จะลบหนึ่งและเพิ่มไปยังที่อยู่ภาคสำหรับการเรียกดิสก์ BIOS ทั้งหมด
ข้อมูลจำเพาะแรกบนฟลอปปีดิสก์ถูกสร้างขึ้นโดย IBM ด้วยรูปลักษณ์ของ IBM 3740 และไม่ได้กล่าวถึงว่ามีเซกเตอร์สำรองไว้สำหรับระบบ การจองเพียงอย่างเดียวสำหรับระบบคือติดตาม 00 ซึ่งเก็บเฉพาะ "ป้ายชุดข้อมูล" ที่ระบุประเภทของข้อมูลที่เก็บไว้ในแทร็ก 01 ถึง 76 ชัดเจนว่าภาคแรกคือภาคที่ 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 หรือเขตข้อมูลตัวเลขอัตโนมัติในฐานข้อมูลเริ่มต้นที่ 1 และไม่ใช่ 0 และไม่มีใครพูดอะไรเกี่ยวกับเรื่องนี้
David J. Bradley กำหนดเวลา BIOS เป็นอย่างนั้นไหม?
ใช่ แต่เขาไม่ได้อยู่ข้างนอก
ไม่มีเหตุผลทางเทคนิคแน่นอนที่ทำให้ SECTOR 0 ไม่สามารถใช้งานได้เว้นแต่จะถูกจองและซ่อนไว้จากผู้ใช้ด้วยเหตุผลอื่น ในหลักการทุกอย่างชี้ไปที่มันเป็นเรื่องของการนับจำนวนธรรมชาติ
GA21-9152-2 หมายเลขไฟล์ 3740-00,15
IBM 3740 Data Entry System
12
DISK INITIALIZATION
... แต่ละดิสก์มีแทร็กสำรองสองแทร็กเพื่อแทนที่แทร็กที่ผิดปกติใด ๆ นอกจากนี้คุณลักษณะการเตรียมใช้งานยังให้วิธีการเปลี่ยนลำดับของที่อยู่เซ็กเตอร์ในแผ่นดิสเก็ตต์ ปกติลำดับของภาคที่อยู่ในลำดับที่เป็นตัวเลข (1, 2, 3, ... 25,26)
หน้า 24
การติดฉลากข้อมูลบน
แผ่นดิสก์ในระหว่างการเริ่มต้นฉลากชุดข้อมูลสำหรับชุดข้อมูลจะถูกบันทึกด้วยสนามแม่เหล็กบนแทร็กดัชนี (แทร็ก 00) ของดิสเก็ต วัตถุประสงค์หลักของฉลากนี้คือการแสดงตำแหน่งของชุดข้อมูลบนแผ่นดิสเก็ตต์
นี่คือปี 1973 มันบันทึกข้อมูลบนดิสเก็ตต์ 8 "IBM PC 5150 เกิดเมื่อวันที่ 12 สิงหาคม 1981 ... และเราไม่สามารถลืมได้ว่าพวกเขาต้องรักษาความเข้ากันได้กับอุปกรณ์ก่อนหน้านี้
ไม่มีเหตุผลทางเทคนิคอย่างแน่นอน