Ketika disk membaca atau menulis disk terjadi, di mana data pergi?

10

Saya mengerti bahwa ada sesuatu seperti pengontrol disk yang berisi buffer, tetapi bertanya-tanya apakah CPU membaca langsung dari buffer ini, atau apakah data harus terlebih dahulu pergi ke lokasi tertentu dalam memori, dan kemudian membiarkan dirinya untuk dibaca oleh CPU?

Apakah ada yang juga tahu apa yang disebut buffer? Dan bagaimana DMA cocok dengan semua ini?

Kaitlyn Mcmordie
sumber

Jawaban:

20

Untuk disk baca aliran data pada dasarnya:

  • setelah unit baca / tulis berada pada silinder yang diminta, kepala r / w yang diminta dipilih.
  • di setiap sektor, ID sektor dibaca. Jika nomor sektor yang dibaca cocok dengan nomor sektor yang diminta, maka data sektor tersebut dibaca.
  • data sektor dibaca sebagai aliran bit serial, dan dikonversi ke byte.
  • byte dari sektor disimpan dalam buffer sektor (biasanya SRAM di controller); ini penyangga sektor berbeda dari "cache disk".
  • setelah seluruh sektor dibaca, data divalidasi menggunakan ECC, dan mungkin diperbaiki.
  • setelah divalidasi, data sektor ditransfer dari pengontrol ke PC host. Catatan: keberadaan buffer sektor ini tidak dikenal, dan ada informasi yang luas bahwa kecepatan transfer pada antarmuka host (egATA) terikat atau dibatasi oleh laju bit pada kepala R / W. Itu sepenuhnya salah, karena kedua transfer data ini adalah operasi yang independen dan berurutan dan tidak bersamaan.
  • karena PC menerima data dari pengontrol disk melalui antarmuka ATA, PC dapat menggunakan I / O yang diprogram (CPU berulang kali membaca register data port ATA dan menyalin nilai ke memori tujuan) atau DMA (pengontrol DMA adalah setup untuk menyalin N byte dari register data port ATA ke buffer memori tanpa intervensi CPU lebih lanjut).
  • "buffer" memori PC yang menerima data dapat berupa buffer aplikasi (saat menggunakan blok I / O system call ), atau bisa menjadi buffer sistem internal di bawah kendali sistem file, atau bahkan program atau memori data jika data berasal dari swap area (atau file halaman).

Tulis ke disk serupa, kecuali bahwa data ditransfer dari PC ke pengontrol disk, ECC dihitung, sektor yang diminta ditemukan, dan kemudian data ditulis dari buffer sektor ke platter.

Untuk kredit tambahan:

Bacalah tentang transfer " scatter-gathering ", yang menggunakan rantai DMA dan daftar alamat-panjang memori dan panjang buffer. Alih-alih satu buffer memori besar yang bersebelahan, transfer "sebar-kumpul" memungkinkan penggunaan buffer memori yang tidak berdekatan untuk dikumpulkan untuk permintaan I / O disk.

serbuk gergaji
sumber
1
Mungkin sedikit kurang spesifik tentang 'r / w head' karena drive non-mekanis lebih sering digunakan akhir-akhir ini, tetapi ini adalah jawaban yang bagus.
Shinrai
@ Shinrai - Saya hanya memiliki pengalaman pemrograman tangan pertama dengan drive disk lengan-bergerak (dan saya telah menggunakan drive fixed-head). Saya memilih untuk tidak berspekulasi atau mengulangi informasi kedua atau ketiga tentang bagaimana SSD beroperasi.
serbuk kayu
+1 untuk jawaban hebat ini, didokumentasikan dan ditulis dengan baik. Sangat profesional.
climenole
2

Ini masuk ke area memori tertentu yang kernel telah mengalokasikan driver disk. Saya tidak berpikir itu disebutkan secara spesifik. Area memori ini biasanya dikonfigurasikan sebagai buffer cincin . Bergantung pada OS, memori ini dapat disalin untuk kedua kalinya ke dalam ruang pengguna agar aplikasi dapat digunakan.

DMA adalah "akses memori langsung" yang berarti bahwa pengontrol disk drive dapat langsung menulis ke RAM tanpa meminta CPU berulang kali menanyakannya jika lebih banyak data tersedia (dikenal sebagai polling - cara yang dulu dilakukan). Sebagai gantinya, ketika seluruh buffer telah ditransfer, controller kemudian menginterupsi CPU untuk memberi tahu data sekarang tersedia.

Jika Anda ingin tahu tentang tingkat yang lebih rendah, pengemudi membuat panggilan ioctl .

Aaron D. Marasco
sumber
1
Buffer dering biasanya digunakan oleh perangkat jaringan (misalnya pengontrol Ethernet) karena data dapat tiba tanpa diminta (tiba-tiba tanpa permintaan baca yang tertunda). Data dari disk drive / controller selalu menanggapi permintaan yang dibuat oleh tuan rumah. Data diminta, sehingga tidak perlu untuk "buffer cincin" pada driver disk.
serbuk gergaji
OK Saya hanya bekerja dengan DAC di tingkat driver dan mereka menggunakan buffer cincin juga, jadi saya berasumsi.
Aaron D. Marasco