Mengapa pengalamatan nomor sektor dalam CHS dimulai pada sektor 1 dan bukan 0?

13

Sebelum LBA diperkenalkan, mengapa CHS mulai 0,0,1dan tidak 0,0,0?

Jordan Davis
sumber
1
"Mengapa hitungan sektor mulai dari 1 ..." - Sebenarnya Anda mengacu pada sektor nomor , bukan sektor count . Itu adalah dua parameter berbeda dan berbeda yang digunakan dalam permintaan disk. "Indeks Sektor" juga merupakan nomenklatur yang buruk untuk nomor sektor, karena ada entitas berbeda yang disebut indeks dalam disk drive.
serbuk kayu

Jawaban:

8

Sayangnya, ini adalah bagaimana skema pengalamatan CHS, yang populer saat itu, diimplementasikan dan diadopsi untuk digunakan. Ini diadopsi sebagai konvensi resmi untuk komputer yang kompatibel dengan IBM dalam interupsi BIOS yang digunakan untuk akses disk, menjelaskan mengapa konvensi ini digunakan hingga hari ini. Dari Standar ECMA-107 , Volume dan Struktur File Kartrid Disk untuk Pertukaran Informasi (ini juga disebutkan dalam spesifikasi ATA-1 asli ):

6.1.3 Nomor Sektor Logis

Setiap sektor pada volume harus diidentifikasi dengan Nomor Sektor Logis. [...] Nomor-nomor Sektor Logis harus ditetapkan dalam urutan menaik, dimulai dengan 0, dimulai pada sektor 1, trek 00, sisi 0 , berlanjut ke trek 00, sisi 1 (jika FDC dapat direkam di kedua sisi) dan kemudian untuk melacak 01, sisi 0, dll.

Masalah ini dibahas dalam spesifikasi untuk beberapa hard disk , di mana dicatat bahwa alamat CHS logis yang diberikan berbeda dari lokasi alamat CHS fisik . Ini dibahas lebih lanjut dalam Seagate ATA Interface Reference Manual , yang berisi narasi menarik ini:

5.1 Pengalamatan blok logis

[...] sektor-sektor pada drive diasumsikan dipetakan secara linear, dengan LBA 0 dari silinder 0 / head 0 / sektor 1.

[...] Untuk semua mode terjemahan, C = 0, H = 0, S = 1 setara dengan LBA = 0. Tidak mungkin untuk menghitung CHS yang setara untuk semua alamat blok logis dalam semua mode terjemahan karena rumus ini hanya bekerja dalam satu arah. Ini karena pengalamatan CHS tidak dapat mengakses 1/ 256 dari semua sektor yang mungkin dapat diakses pengalamatan blok logis, karena tidak ada sektor 0 di CHS.

Jadi untuk pengalamatan CHS logis, meskipun indeks silinder / kepala pertama dimulai dari offset berbasis 0, dan indeks sektor pertama dimulai dari 1 (mis. Alamat CHS minimum yang mungkin adalah 0/0/1), ini tidak mengubah apa pun tentang yang fisik lokasi sektor ini. Anggap saja sebagai sektor fisik pertama pada disk yang disebut "sektor 1", menempati CHS 0/0/1. Memang, elemen "pertama" dalam sebagian besar bahasa pemrograman berbasis 0, jadi alamat logis sektor pada alamat CHS 0/0/1 adalah nol ( 0x00).

Ini jauh lebih masuk akal secara logis (yaitu, alamat logis "nol" menjadi sektor fisik pertama ), karena kita dapat mengatasi perangkat disk seperti perangkat memori lainnya (karena setiap sektor memiliki alamat linier unik untuk memetakannya ke fisik. sektor), jadi mengapa masuk akal bagi LBA untuk memulai dari nol. Memang, jika kita menerjemahkan alamat CHS 0/0/1 ke LBA , LBA yang dihasilkan akan menjadi 0x00000000(inilah sebabnya 1 dikurangi dari indeks sektor dalam sebagian besar perhitungan CHS ke LBA, dan mengapa 1 ditambahkan ke indeks untuk LBA untuk perhitungan CHS).

Penerobosan
sumber
Saya sudah menemukan jawaban untuk pertanyaan ini, tetapi saya kira orang yang saya tinggalkan di komentar saya menampilkan jawaban yang dihapus itu ... lagipula alasan mengapa saya mengajukan pertanyaan ini adalah karena semua orang dan semua yang saya baca mengeposkan pada dasarnya Anda persis seperti Anda kata-kata untuk sebagian besar. Jawaban "ini hanya seperti yang mereka buat ..." benar-benar membuatku jengkel karena orang-orang tidak hanya membangun sesuatu dan tidak menggunakannya hanya karena mereka tidak ingin menggunakannya ... logika itu tidak berlaku karena sama sekali ...
Jordan Davis
1
Menelusuri sejarah CHR / CHS / LBA Anda menemukan bahwa sebelum CHR yang panjang variabel menggunakan MBBCCHHR menggunakan zero sectorkode kesalahan, dan blok buruk, dll .... transisi ke CHS dan "fixed-block-architecture" Anda juga memiliki transisi menambahkan pengontrol (firmware) ke drive dan dimulainya asosiasi disk "logis" ... pengontrol sekarang tidak terlihat tetapi Anda dapat menganggapnya menggunakannya dengan cara yang sama ... istilah tersebut sekarang disebut "Host Protected Area " en.wikipedia.org/wiki/Fixed-block_architecture dan en.wikipedia.org/wiki/Host_protected_area
Jordan Davis
@JordanDavis dalam kebanyakan kasus, area yang dilindungi tuan rumah adalah di akhir disk, tidak dimulai. Memang, sementara nomenklatur untuk sektor pertama dikembalikan sebagai nilainya 1, saya masih belum menemukan informasi mengapa (walaupun saya menduga itu mungkin ada hubungannya dengan sektor 0yang dicadangkan sebagai bendera kesalahan). Saya pasti akan memperbarui Anda jika saya menemukan sesuatu.
Terobosan
Tautan Wikipedia untuk ikhtisar bagian FBA, daftar menjadi catatan nol sebagai ECC tapi itu kedengarannya bagus, saya akan melakukan hal yang sama jika keduanya ditemukan.
Jordan Davis
@JordanDavis Saya telah menambahkan hadiah untuk pertanyaan ini, karena saya benar-benar ingin mendengar beberapa masukan dari orang lain - terutama dalam hal aspek mengapa .. Jangan ragu untuk menjaga pertanyaan tetap terbuka / tidak dijawab untuk sementara waktu untuk memberikan kesempatan untuk jawaban lain.
Terobosan
8

Saya telah mencoba untuk melacak sejarah CHS dan kegagalan penomoran sektor "dimulai dengan 1", yang telah menyebabkan banyak komplikasi bagi penulis disk-driver dan memberikan kenaikan yang cepat ke LBA .

Tanggal CHS kembali ke hari-hari ketika komputer pribadi berjalan pada disket dan ketika BIOS ditemukan. Inilah yang dikatakan Wikipedia :

Istilah BIOS (Basic Input / Output System) ditemukan oleh Gary Kildall dan pertama kali muncul di sistem operasi CP / M pada tahun 1975, menggambarkan bagian mesin khusus dari CP / M yang dimuat selama waktu boot yang berinteraksi langsung dengan perangkat keras.

Penelitian terhadap CP / M BIOS telah menemukan arsip informasi CP / M dokumen : Panggilan sistem BDOS , di mana angka-angka sektor dimulai dengan nol. Kesimpulannya adalah: Skema CHS awal sebenarnya menggunakan alamat sektor berbasis nol .

Alamat sektor berbasis satu pertama kali diperkenalkan dengan IBP / PC pertama. Dokumen INT 13 - Layanan Disket BIOS secara khusus mengatakan:

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

Jadi IBM / PClah yang secara de facto mengimplementasikan BIOS telah mengubah penomoran sektor dari berbasis nol menjadi berbasis satu.

Dari dua belas insinyur IBM yang ditugaskan untuk membuat IBM Personal Computer (model 5150), David J. Bradley mengembangkan kode untuk BIOS-nya. Jadi dialah yang, di antara semua detail lainnya, memutuskan parameter untuk gangguan disk. Kami juga berutang kepada orang ini bersama-sama dengan Mel Hallerman terkenal CTRL+ ALT+ DEL.

Jadi jawaban untuk pertanyaan Mengapa penghitungan sektor dimulai dari 1 dan bukan 0 di CHS adalah:
Karena David J. Bradley memprogram BIOS dengan cara itu .

Mengenai mengapa dia melakukannya dengan cara ini, ini paling baik dijawab sendiri. Jika saya harus menebak, saya akan mengatakan bahwa ia meninggalkan sektor nol sebagai sektor pengalamatan di mana pengemudi dapat memverifikasi bahwa kepala berada di jalur yang benar.

Karena disk sebenarnya direkayasa sehingga tidak memerlukan mekanisme seperti itu, dan para insinyur tidak siap untuk menyia-nyiakan satu sektor karena BIOS, sektor nol tidak pernah muncul. Setelah itu, driver-penulis ditinggalkan dengan kebutuhan untuk mengurangi-satu dan menambahkan-satu ke alamat sektor untuk semua panggilan disk BIOS.

harrymc
sumber
"Saya akan mengatakan bahwa dia meninggalkan sektor nol sebagai sektor pengalamatan ..." - Tebakan tidak logis. Setiap sektor memiliki Catatan Identifikasi yang mencakup alamat silinder / kepala / sektor. Pengontrol disk tidak harus menunggu Indeks muncul untuk memvalidasi bahwa pencarian selesai pada silinder yang benar; sektor berikutnya yang berputar di bawah kepala dibaca untuk verifikasi.
serbuk kayu
"CH = nomor silinder (0-1023 des.)" - IBM PC BIOS asli menggunakan CH untuk nomor "track". CH adalah register 8-bit, jadi nilai maksimumnya hanya 255.
serbuk kayu
"Saya telah mencoba melacak sejarah CHS ... dan memberikan peningkatan yang cepat ke LBA" - Untuk menjadi jelas, semua diskusi tentang "LBA" ini hanya berkaitan dengan antarmuka disk PC, terutama spesifikasi ATAPI. Kalau tidak, CHS dan LBA dapat hidup berdampingan. EG Saya telah menulis beberapa sistem file yang menggunakan LBA secara internal, tetapi mengubah pengalamatan menjadi CHS untuk melakukan disk I / O aktual per antarmuka pengontrol. "Skema CHS awal sebenarnya menggunakan alamat sektor berbasis nol." - Benar, tapi itu terjadi jauh sebelum CP / M.
serbuk kayu
@sawdust: Yang saya lakukan hanyalah mengutip dokumen IBM, yang mungkin bahkan lebih cepat dari penugasan register untuk antarmuka PC BIOS. Jelas bahwa Bradley keliru atau salah arah dengan menetapkan sektor 0 sebagai alamat yang dicadangkan, tetapi kami tidak dapat memastikan untuk apa, karena itu tidak pernah terjadi. Mungkin dia tidak sadar bahwa bagian alamat sektor juga berisi nomor trek. Atau mungkin sektor cadangan ini adalah properti disket yang dibawa ke antarmuka BIOS umum Bradley. Kami hanya tahu bahwa IBM / PC BIOS bertanggung jawab atas perubahan CHS ini.
harrymc
Seperti biasa dalam masalah ini, Daftar Interrupt Ralph Brown memberikan informasi yang sangat berharga. Walaupun benar apa yang ditulis oleh @sawdust tentang CH menjadi register delapan-bit, bukan itu yang digunakan CX. Sebaliknya, CX sedikit diisi dengan nomor silinder dan nomor sektor (tetapi ekstensi ini tampaknya hanya berlaku untuk hard disk, bukan disket; untuk disket, CL memegang nomor sektor dan CH memegang nomor silinder). Bandingkan misalnya antarmuka yang ditentukan untuk Int 13 / AH = 02h, BIOS - DISK - READ SECTOR (S) menjadi parameter input MEMORY .
CVn
1

Spesifikasi pertama pada floppy disk dibuat oleh IBM dengan penampilan IBM 3740 dan tidak menyebutkan bahwa ada sektor yang dicadangkan untuk sistem. Satu-satunya reservasi untuk sistem adalah trek 00, yang hanya menyimpan "Label Set Data" yang mengidentifikasi jenis informasi yang disimpan dalam trek 01 hingga 76. Ini jelas mendefinisikan bahwa sektor pertama adalah SEKTOR 1. Ini bukan kebetulan tetapi soal penomoran alami terhadap penomoran komputer.

Kita dapat mengamati bahwa ketika manusia mulai menghitung sesuatu, itu tidak dimulai dengan nol tetapi satu. Misalnya, bayangkan ada 135 siswa di kelas. Menghitung angkanya akan seperti itu: Satu, dua, tiga ... seratus tiga puluh empat, seratus tiga puluh lima.

Representasi numeriknya adalah sebagai berikut: 1, 2, 3, ... 134, 135 Sejauh ini kita sepakat, bukan?

Sekarang mari kita letakkan digit yang tidak terwakili dengan menjadi 0. Akan terlihat seperti ini: 001, 002, 003, ..., 015, 016, ..., 099, 100, ..., 133, 134, 135

Inilah yang terjadi dengan CHS : 0,0,1 - 0,0,2 - 0,0,3 ...

Penting bahwa baris dalam lembar Excel atau bidang angka-otomatis dalam database dimulai dengan 1 dan bukan 0 dan tidak ada yang mengatakan apa pun tentang ini.

Apakah David J. Bradley menjadwalkan BIOS seperti itu?

Ya, tapi dia tidak di luar.

Jelas tidak ada alasan teknis mengapa SEKTOR 0 tidak dapat digunakan kecuali itu dicadangkan dan disembunyikan dari pengguna karena alasan lain. Pada prinsipnya segala sesuatu yang mengarah padanya adalah masalah penomoran alami.

GA21-9152-2 File No. 3740-00,15
IBM 3740 Sistem Entri Data

halaman 12
INISIIALISASI DISK
... Setiap disk berisi dua trek cadangan untuk mengganti semua trek yang tidak beraturan. Selain itu, fitur inisialisasi menyediakan cara untuk mengubah urutan alamat sektor pada disket. Biasanya, urutan sektor dalam urutan numerik (1, 2, 3, ... 25,26)
.

halaman 24
DATA LABELING PADA DISKETTE
Selama inisialisasi, label set data untuk set data secara magnetis direkam pada track indeks (track 00) dari disket. Tujuan utama label ini adalah untuk menunjukkan lokasi set data pada disket

Ini pada tahun 1973. Ini mencatat data pada disket 8 ". IBM PC 5150 lahir pada 12 Agustus 1981 ... dan kita tidak bisa lupa bahwa mereka harus menjaga kompatibilitas dengan perangkat sebelumnya.

Jelas tidak ada alasan teknis.

APO69
sumber
Ini disediakan untuk driver - antarmuka I / O firmware, bahkan di disk atau flash SSD modern telah menyediakan ruang untuk operasi I / O untuk membaca / menulis / menyalin / memformat dll.
Jordan Davis
Lihatlah ini
yass
Ya, tetapi tidak SEKTOR 0 tetapi CYLINDER 0. Dari spesifikasi pertama (IBM 3740) silinder 0 disebut "silinder Indeks" dan menyimpan beberapa data yang ditentukan dalam "LAYOUT INDEX CYLINDER". Pada cakram modern, silinder ini biasanya ditetapkan sebagai "CYLINDER NUMBER -1", ya "-1", dan hanya dapat diakses oleh pengontrol. Tidak ada yang menjelaskan mengapa sektor 0 belum digunakan dan meskipun kita dapat melihatnya di beberapa sistem operasi seperti CP / M, ini virtual karena perangkat keras masih diproduksi sesuai dengan IBM 3740. Dengan kata lain, sektor pertama adalah SEKTOR 1. Mengapa? "NOMOR NATURAL"
APO69