Tại sao địa chỉ số ngành trong CHS bắt đầu ở khu vực 1 mà không phải là 0?


13

Trước khi LBA được giới thiệu, tại sao CHS bắt đầu 0,0,1và không 0,0,0?


1
"Tại sao sector count bắt đầu từ 1 ..." - Trên thực tế bạn đang đề cập đến lĩnh vực số , không phải là lĩnh vực đếm . Đó là hai tham số riêng biệt và khác nhau được sử dụng trong một yêu cầu đĩa. "Chỉ mục ngành" cũng là danh nghĩa kém cho số ngành, vì có một thực thể riêng biệt được gọi là chỉ mục trong các ổ đĩa.
mùn cưa

Câu trả lời:


8

Thật không may, đây chỉ là cách chương trình xử lý địa chỉ CHS, phổ biến vào thời điểm đó, được triển khai và áp dụng vào sử dụng. Điều này đã được thông qua như là quy ước chính thức cho các máy tính tương thích IBM trong các ngắt BIOS được sử dụng để truy cập đĩa, giải thích lý do tại sao quy ước này được sử dụng cho đến ngày nay. Từ tiêu chuẩn ECMA-107 , cấu trúc khối lượng và tệp của hộp mực đĩa để trao đổi thông tin (điều này cũng được đề cập trong thông số kỹ thuật ATA-1 ban đầu ):

6.1.3 Số ngành logic

Mỗi khu vực trên một khối lượng sẽ được xác định bởi một số khu vực hợp lý. [...] Số ngành logic sẽ được chỉ định theo thứ tự tăng dần, bắt đầu bằng 0, bắt đầu từ khu vực 1, theo dõi 00, bên 0 , tiếp tục theo dõi 00, bên 1 (nếu FDC có thể ghi được ở cả hai bên) và sau đó để theo dõi 01, bên 0, v.v.

Vấn đề này được giải quyết trong các thông số kỹ thuật cho một số đĩa cứng , trong đó lưu ý rằng một địa chỉ CHS logic đã cho khác với vị trí địa chỉ CHS vật lý . Điều này được thảo luận thêm trong Hướng dẫn tham khảo giao diện Seagate ATA , trong đó có tường thuật thú vị này:

5.1 Địa chỉ khối logic

[...] Các khu vực trên ổ đĩa được giả định là được ánh xạ tuyến tính, với LBA 0 của hình trụ 0 / đầu 0 / khu vực 1.

[...] Đối với tất cả các chế độ dịch, C = 0, H = 0, S = 1 tương đương với LBA = 0. Không thể tính một CHS tương đương cho tất cả các địa chỉ khối logic trong tất cả các chế độ dịch vì công thức này chỉ hoạt động theo một hướng. Điều này là do địa chỉ CHS không thể truy cập 1/256 của tất cả các lĩnh vực có thể mà địa chỉ khối logic có thể truy cập, vì không có khu vực 0 trong CHS.

Như vậy cho CHS địa chỉ logic, mặc dù cylinder đầu tiên / chỉ số khởi đầu từ một 0-dựa bù đắp, và là người đầu tiên khu vực bắt đầu chỉ số từ 1 (ví dụ như địa chỉ tối thiểu CHS thể là 0/0/1), điều này không thay đổi bất cứ điều gì về các vật lý vị trí của lĩnh vực này. Hãy nghĩ về nó như là khu vực vật lý đầu tiên trên đĩa được gọi là "khu vực 1", chiếm CHS 0/0/1. Thật vậy, phần tử "đầu tiên" trong hầu hết các ngôn ngữ lập trình là dựa trên 0, vì vậy địa chỉ logic của khu vực tại địa chỉ CHS 0/0/1 là zero ( 0x00).

Điều này có ý nghĩa logic hơn (cụ thể là địa chỉ lôgic "zeroth" là khu vực vật lý đầu tiên ), vì chúng ta có thể giải quyết thiết bị đĩa như bất kỳ thiết bị bộ nhớ nào khác (vì mỗi khu vực có một địa chỉ tuyến tính duy nhất để ánh xạ nó thành vật lý ngành), do đó, tại sao nó có ý nghĩa cho LBA bắt đầu từ số không. Thật vậy, nếu chúng tôi dịch địa chỉ CHS 0/0/1 sang LBA , LBA kết quả sẽ là 0x00000000(đây là lý do tại sao 1 bị trừ khỏi chỉ số ngành trong hầu hết các tính toán CHS sang LBA và tại sao 1 được thêm vào chỉ mục cho LBA để tính toán CHS).


Tôi đã tìm ra câu trả lời cho câu hỏi này rồi, nhưng tôi đoán người mà tôi đã để lại bình luận hiển thị câu trả lời đã xóa nó ... dù sao lý do tại sao tôi hỏi câu hỏi này là do thực tế tất cả mọi người và mọi thứ tôi đọc đều đăng chính xác của bạn từ cho hầu hết các phần. Câu trả lời này "đó chỉ là cách họ tạo ra nó ..." thực sự làm tôi khó chịu vì mọi người không chỉ xây dựng một cái gì đó và không sử dụng nó chỉ vì họ không muốn sử dụng nó ... logic đó không tạo ra ở tất cả ...
Jordan Davis

1
Đi qua lịch sử của CHR / CHS / LBA, bạn thấy rằng trước CHR có độ dài thay đổi khi sử dụng MBBCCHHR đã sử dụng zero sectormã lỗi và các khối xấu, v.v .... chuyển sang CHS và "kiến trúc khối cố định" bạn cũng đã có quá trình chuyển đổi thêm bộ điều khiển (phần sụn) vào ổ đĩa và bắt đầu các liên kết đĩa "logic" ... bộ điều khiển bây giờ là vô hình nhưng bạn có thể giả sử sử dụng nó theo cùng một cách ... thuật ngữ hiện được gọi là "Máy chủ được bảo vệ Khu vực " en.wikipedia.org/wiki/Fixed-block_arch architectureen.wikipedia.org/wiki/host_protected_area
Jordan Davis

@JordanDavis trong hầu hết các trường hợp, khu vực được bảo vệ máy chủ nằm ở cuối đĩa, không bắt đầu. Thật vậy, trong khi danh pháp cho khu vực đầu tiên được trả về là giá trị 1, tôi vẫn không tìm thấy bất kỳ thông tin nào về lý do (mặc dù tôi nghi ngờ nó có thể có liên quan đến khu vực 0được bảo lưu như một cờ lỗi). Tôi chắc chắn sẽ cập nhật cho bạn nếu tôi gặp bất cứ điều gì.
Đột phá

Liên kết Wikipedia cho tổng quan về phần FBA, danh sách là bản ghi zeroth là ECC nhưng nghe có vẻ hay, tôi sẽ làm tương tự nếu tình cờ gặp phải.
Jordan Davis

@JordanDavis Tôi đã thêm một tiền thưởng cho câu hỏi này, vì tôi thực sự muốn nghe một số ý kiến ​​đóng góp từ những người khác - đặc biệt là về khía cạnh lý do .. Hãy giữ câu hỏi mở / không trả lời trong thời gian này để đưa ra một câu hỏi cơ hội cho câu trả lời khác.
Đột phá

8

Tôi đã cố gắng theo dõi lịch sử của CHS và fiasco đánh số ngành "bắt đầu bằng 1", điều này đã gây ra nhiều phức tạp cho các nhà văn trình điều khiển đĩa và đã nhanh chóng gia tăng LBA .

CHS bắt đầu từ thời máy tính cá nhân chạy trên đĩa và khi BIOS được phát minh. Đây là những gì Wikipedia nói:

Thuật ngữ BIOS (Hệ thống đầu vào / đầu ra cơ bản) được phát minh bởi Gary Kildall và lần đầu tiên xuất hiện trong hệ điều hành CP / M vào năm 1975, mô tả phần CP / M dành riêng cho máy được tải trong thời gian khởi động giao tiếp trực tiếp với phần cứng.

Một nghiên cứu về BIOS CP / M đã tìm thấy kho lưu trữ thông tin CP / M tài liệu : các cuộc gọi hệ thống BDOS , trong đó số ngành bắt đầu bằng 0. Kết luận là: lược đồ CHS sớm nhất thực sự sử dụng các địa chỉ cung cấp dựa trên zero .

Địa chỉ khu vực một dựa trên lần đầu tiên được giới thiệu với IBP / PC đầu tiên. Tài liệu INT 13 - Dịch vụ BIOS đĩa mềm nói cụ thể:

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

Vì vậy, chính IBM / PC đã thực hiện BIOS một cách thực tế đã chuyển đổi đánh số ngành từ 0 thành dựa trên một.

Trong số mười hai kỹ sư của IBM được giao nhiệm vụ tạo Máy tính cá nhân IBM (kiểu 5150), David J. Bradley đã phát triển mã cho BIOS của mình. Vì vậy, anh ấy là người, trong số tất cả các chi tiết khác, đã quyết định các tham số cho các ngắt đĩa. Chúng tôi cũng nợ anh chàng này cùng với Mel Hallerman nổi tiếng CTRL+ ALT+ DEL.

Vì vậy, câu trả lời cho câu hỏi Tại sao số đếm khu vực bắt đầu từ 1 chứ không phải 0 trong CHS là:
Bởi vì David J. Bradley đã lập trình BIOS theo cách đó .

Về lý do tại sao anh ta làm theo cách này, điều này được trả lời tốt nhất bởi chính mình. Nếu tôi phải đoán, tôi sẽ nói rằng anh ta rời khỏi khu vực số 0 như một khu vực địa chỉ mà theo đó người lái xe có thể xác minh rằng đầu đang đi đúng hướng.

Vì các đĩa thực sự được thiết kế để không yêu cầu cơ chế như vậy và các kỹ sư không sẵn sàng lãng phí một khu vực vì BIOS, ngành số 0 không bao giờ tồn tại. Sau đó, các trình soạn thảo trình điều khiển không còn cần phải trừ - một và thêm một vào địa chỉ sector cho tất cả các cuộc gọi đĩa BIOS.


"Tôi sẽ nói rằng anh ấy rời khỏi khu vực số 0 như một khu vực giải quyết ..." - Dự đoán phi lý. Mỗi khu vực có một Hồ sơ nhận dạng bao gồm địa chỉ trụ / đầu / khu vực. Bộ điều khiển đĩa không phải đợi Index xuất hiện để xác thực rằng tìm kiếm đã hoàn thành trên hình trụ chính xác; khu vực tiếp theo quay dưới đầu được đọc để xác minh.
mùn cưa

"CH = số xi lanh (0-1023 dec.)" - BIOS PC gốc của IBM sử dụng CH cho số "theo dõi". CH là thanh ghi 8 bit, vì vậy giá trị tối đa chỉ là 255.
mùn cưa

"Tôi đã cố gắng theo dõi lịch sử của CHS ... và đã tăng nhanh LBA" - Để rõ ràng, tất cả các cuộc thảo luận về "LBA" này chỉ liên quan đến giao diện đĩa PC, đặc biệt là thông số kỹ thuật ATAPI. Nếu không, CHS và LBA có thể cùng tồn tại. Vì tôi đã viết một vài hệ thống tập tin sử dụng LBA trong nội bộ, nhưng đã chuyển đổi địa chỉ thành CHS để thực hiện I / O đĩa thực trên giao diện của bộ điều khiển. "lược đồ CHS sớm nhất thực sự đã sử dụng các địa chỉ khu vực dựa trên không." - Đúng, nhưng điều đó đã xảy ra trước CP / M.
mùn cưa

@sawdust: Tất cả những gì tôi đã làm là trích dẫn các tài liệu của IBM, thậm chí có thể có trước việc gán các thanh ghi cho giao diện BIOS PC. Rõ ràng rằng Bradley đã bị nhầm lẫn hoặc đánh giá sai khi đặt sector 0 làm địa chỉ dành riêng, nhưng chúng tôi không thể chắc chắn điều đó vì điều đó không bao giờ xảy ra. Có thể là anh ta không biết rằng phần địa chỉ của khu vực cũng chứa số theo dõi. Hoặc có thể khu vực dự phòng này là một tài sản của các đĩa được chuyển sang giao diện BIOS chung của Bradley. Chúng tôi chỉ biết rằng BIOS IBM / PC chịu trách nhiệm cho sự thay đổi này trong CHS.
harrymc

Như mọi khi trong những vấn đề này, Danh sách ngắt của Ralph Brown cung cấp thông tin vô giá. Mặc dù đúng là những gì @sawdust đã viết về CH là một thanh ghi tám bit, nhưng đó không phải là cách CX được sử dụng. Thay vào đó, CX được nhồi nhét cả số xi lanh số ngành (nhưng phần mở rộng này dường như chỉ áp dụng cho đĩa cứng, không phải đĩa mềm; đối với đĩa mềm, CL giữ số ngành và CH giữ số xi lanh). Ví dụ, so sánh giao diện đã chỉ định cho Int 13 / AH = 02h, BIOS - DISK - READ SECTOR (S) INTO MEMOR .
một CVn

1

Đặc tả đầu tiên trên các đĩa mềm được IBM tạo ra với sự xuất hiện của IBM 3740 và không đề cập đến việc có các khu vực dành riêng cho hệ thống. Bảo lưu duy nhất cho hệ thống là track 00, chỉ lưu trữ "Nhãn tập dữ liệu" xác định loại thông tin được lưu trữ trong các rãnh từ 01 đến 76. Nó xác định rõ rằng khu vực đầu tiên là SECTOR 1. Đây không phải là sự trùng hợp ngẫu nhiên mà là vấn đề số tự nhiên so với việc đánh số máy tính.

Chúng ta có thể quan sát thấy rằng khi một con người bắt đầu đếm bất cứ thứ gì, nó không bắt đầu bằng 0 mà là một. Ví dụ, hãy tưởng tượng rằng có 135 học sinh trong một lớp học. Đếm số sẽ là một cái gì đó như thế: Một, hai, ba ... một trăm ba mươi bốn, một trăm ba mươi lăm.

Đại diện số của nó sẽ là như vậy: 1, 2, 3, ... 134, 135 Cho đến nay chúng ta đồng ý, phải không?

Bây giờ, hãy đặt các chữ số không được biểu thị bằng 0. Nó sẽ trông như thế này: 001, 002, 003, ..., 015, 016, ..., 099, 100, ..., 133, 134, 135

Đây là những gì xảy ra với CHS : 0,0,1 - 0,0,2 - 0,0,3 ...

Điều quan trọng là các hàng trong trang tính Excel hoặc các trường số tự động trong cơ sở dữ liệu bắt đầu bằng 1 chứ không phải 0 và không ai nói gì về điều này.

David J. Bradley đã lên lịch cho BIOS theo cách đó?

Phải, nhưng anh không đứng ngoài cuộc.

Chắc chắn không có lý do kỹ thuật tại sao SECTOR 0 không thể được sử dụng trừ khi nó được bảo lưu và ẩn khỏi người dùng vì những lý do khác. Về nguyên tắc mọi thứ đều chỉ ra nó là vấn đề đánh số tự nhiên.

GA21-9152-2 Tệp số 3740-00,15
Hệ thống nhập dữ liệu IBM 3740

trang 12 KHỞI TẠO
DISK
... Mỗi đĩa chứa hai rãnh dự phòng để thay thế bất kỳ rãnh bất thường nào. Ngoài ra, tính năng khởi tạo cung cấp một phương tiện để thay đổi chuỗi địa chỉ khu vực trên đĩa. Thông thường, chuỗi các ngành theo thứ tự số (1, 2, 3, ... 25,26)
.

trang 24
DỮ LIỆU DỮ LIỆU TRÊN DISKETTE
Trong quá trình khởi tạo, nhãn tập dữ liệu cho một tập dữ liệu được ghi từ tính trên rãnh ghi (rãnh 00) của đĩa. Mục đích chính của nhãn này là hiển thị vị trí của tập dữ liệu trên đĩa

Đó là vào năm 1973. Nó đã ghi lại dữ liệu trên đĩa 8 ". IBM PC 5150 ra đời vào ngày 12 tháng 8 năm 1981 ... và chúng tôi không thể quên rằng họ phải duy trì khả năng tương thích với các thiết bị trước đó.

Chắc chắn không có lý do kỹ thuật.


Nó dành riêng cho trình điều khiển - Giao diện phần mềm I / O, ngay cả trong ổ SSD hoặc flash hiện đại có không gian dành riêng cho các hoạt động I / O để đọc / ghi / sao chép / định dạng, v.v.
Jordan Davis

Hãy xem cái này
yass

Có, nhưng không phải SECTOR 0 mà là CYLINDER 0. Từ thông số kỹ thuật đầu tiên (IBM 3740) xi lanh 0 được gọi là "xi lanh Index" và lưu trữ nhiều dữ liệu được chỉ định trong "INDEX CYLINDER LAYOUT". Trên các đĩa hiện đại, hình trụ này thường được gán là "CYLINDER SỐ -1", có "-1" và chỉ có thể truy cập bởi bộ điều khiển. Không có gì để giải thích tại sao sector 0 không được sử dụng và mặc dù chúng ta có thể thấy nó trong một số hệ điều hành như CP / M, nó là ảo vì phần cứng vẫn được sản xuất theo IBM 3740. Nói cách khác, sector đầu tiên là NGÀNH 1. Tại sao? "SỐ
LƯỢNG
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.