Dari Bagian 5.1.4 Akses Memori Langsung dalam Sistem Operasi Modern oleh Andrew S. Tanenbaum, Herbert Bos, 2014 ,
Untuk menyederhanakan penjelasan, kami mengasumsikan bahwa CPU mengakses semua perangkat dan memori melalui bus sistem tunggal yang menghubungkan CPU, memori, dan perangkat I / O, seperti yang ditunjukkan pada Gambar 5-4.
Untuk menjelaskan cara kerja DMA, mari kita lihat dulu bagaimana pembacaan disk terjadi ketika DMA tidak digunakan.
- Pertama pengontrol disk membaca blok (satu atau lebih sektor) dari drive secara serial, sedikit demi sedikit, sampai seluruh blok ada di buffer internal pengontrol.
- Selanjutnya, itu menghitung checksum untuk memverifikasi bahwa tidak ada kesalahan baca telah terjadi. Kemudian controller menyebabkan interupsi. Ketika sistem operasi mulai berjalan, ia dapat membaca blok disk dari buffer pengontrol satu byte atau satu kata setiap saat dengan menjalankan loop, dengan setiap iterasi yang membaca satu byte atau kata dari perangkat pengontrol mendaftar dan menyimpannya dalam memori utama.
T: pada langkah kedua,
bukankah data ditransfer " dari buffer controller " ke memori utama? Mengapa dikatakan " dari buffer controller " dan " dari register perangkat controller "?
pada langkah kedua, dapatkah pengontrol mentransfer data dari buffernya ke memori utama, tanpa mengganggu cpu, dan tanpa melibatkan OS lagi?
Ketika DMA digunakan, prosedurnya berbeda.
- Pertama-tama CPU memprogram pengontrol DMA dengan mengatur registernya sehingga ia tahu apa yang harus ditransfer ke mana (langkah 1 pada Gambar 5-4).
Ini juga mengeluarkan perintah ke pengontrol disk yang memerintahkannya untuk membaca data dari disk ke buffer internal dan memverifikasi checksum. - Ketika data yang valid ada di buffer pengontrol disk, DMA dapat dimulai. Pengontrol DMA memulai transfer dengan mengeluarkan permintaan baca melalui bus ke pengontrol disk (langkah 2). Permintaan baca ini terlihat seperti permintaan baca lainnya, dan pengontrol disk tidak tahu (atau peduli) apakah itu berasal dari CPU atau dari pengontrol DMA. Biasanya, alamat memori untuk menulis berada pada baris alamat bus, jadi ketika pengontrol disk mengambil kata berikutnya dari buffer internal, ia tahu di mana harus menulisnya. Tulis ke memori adalah siklus bus standar lain (langkah 3).
- Saat penulisan selesai, pengontrol disk mengirimkan sinyal pengakuan ke pengontrol DMA, juga melewati bus (langkah 4). Pengontrol DMA kemudian menambah alamat memori untuk digunakan dan mengurangi jumlah byte. Jika jumlah byte masih lebih besar dari 0, langkah 2 hingga 4 diulangi hingga hitungannya mencapai 0.
- Pada saat itu, pengontrol DMA mengganggu CPU untuk memberi tahu bahwa transfer telah selesai. Ketika sistem operasi dimulai, ia tidak harus menyalin blok disk ke memori; sudah ada di sana.
T: pada langkah kedua, pengontrol DMA meminta pengontrol disk untuk mentransfer data dari buffer pengontrol disk ke memori utama. Pada langkah pertama, CPU mengeluarkan perintah ke pengontrol disk yang memerintahkannya untuk membaca data dari disk ke buffer internal. Pada saat yang sama, dapatkah CPU juga memberi tahu pengontrol disk untuk mentransfer data dari buffer pengontrol disk ke memori utama, ketika pengontrol disk selesai mentransfer data dari disk ke buffer pengontrol disk, sehingga tidak perlu untuk Pengontrol DMA untuk memberi tahu pengontrol disk untuk mentransfer data dari buffer pengontrol disk ke memori utama? (Saya tidak mengerti mengapa kita membutuhkan pengontrol DMA untuk transfer data antara disk dan memori utama, jadi tebak bahwa saya melewatkan sesuatu yang penting untuk memahami kutipan).
- Pertama-tama CPU memprogram pengontrol DMA dengan mengatur registernya sehingga ia tahu apa yang harus ditransfer ke mana (langkah 1 pada Gambar 5-4).
Pengontrol perangkat perangkat mengontrol perangkat dan melakukan operasi pada perangkat. Perangkat apa yang dikendalikan oleh pengendali DMA dan menjalankan operasi?
Terima kasih!
Jawaban:
Q1
Pada langkah pertama, kita TIDAK menggunakan DMA, sehingga konten pengontrol disk dibaca sepotong demi sepotong oleh prosesor. Prosesor tentu saja (dengan asumsi data benar-benar akan digunakan untuk sesuatu, dan tidak hanya dibuang) menyimpannya dalam memori sistem.
Buffer dalam hal ini adalah sepotong memori pada hard-disk (pengontrol) itu sendiri, dan perangkat pengontrol mendaftarkan register kontrol dari hard-disk (pengontrol) itu sendiri.
Tidak melibatkan OS (atau perangkat lunak lain) akan memerlukan semacam operasi DMA, dan bagian teks yang Anda diskusikan di bagian pertanyaan ini BUKAN menggunakan DMA. Jadi, tidak, itu tidak akan terjadi dalam kasus ini.
Q2
Jadi, inti dari pengontrol DMA adalah untuk "melakukan tugas yang membosankan untuk menyimpan barang-barang dari buffer internal perangkat ke dalam memori utama". CPU akan bekerja dengan pengontrol DMA dan perangkat disk. Jika disk bisa melakukan ini sendiri, tidak perlu controller DMA.
Dan memang, dalam sistem modern, kemampuan DMA biasanya dibangun ke dalam pengontrol cakram keras itu sendiri, dalam arti pengontrol memiliki kemampuan "bus mastering", yang berarti bahwa pengontrol itu sendiri adalah pengontrol DMA untuk perangkat. Namun, untuk melihatnya sebagai dua perangkat terpisah membuat keseluruhan konsep DMA sedikit kurang sulit untuk dipahami.
Q3 (jenis)
Jika Anda menganggap hard disk sebagai tumpukan batu bata yang baru saja dikirim ke lokasi pembangunan, dan prosesornya adalah tukang batu yang meletakkan batu bata untuk membangun rumah. Pengendali DMA adalah pekerja yang membawa batu bata dari tumpukan batu bata ke tempat mereka diperlukan untuk tukang batu, yang berarti bahwa tukang batu dapat berkonsentrasi pada melakukan pekerjaan yang sebenarnya dari meletakkan batu bata (yang merupakan pekerjaan terampil, jika Anda pernah mencobanya diri Anda sendiri), dan pekerjaan sederhana "mengambil dan membawa" dapat dilakukan oleh pekerja yang kurang terampil.
Bukti anekdotal: Ketika saya pertama kali belajar tentang transfer DMA dari disk ke memori sekitar tahun 1997 atau lebih ketika pengendali IDE mulai menggunakan DMA, dan Anda perlu mendapatkan driver "motherboard IDE controller" untuk memungkinkan IDE melakukan DMA, dan pada saat itu , membaca dari hard-disk akan memakan waktu sekitar 6-10% dari waktu CPU, di mana DMA dalam pengaturan yang sama akan menggunakan sekitar 1% dari waktu CPU. Sebelum waktu itu, hanya sistem mewah dengan pengontrol disk SCSI yang akan menggunakan DMA.
sumber
Ini bukan jawaban; itu adalah permintaan untuk klarifikasi yang terlalu panjang untuk dimuat di komentar.
Sebelum ada yang bisa menjawab pertanyaan ini, kita harus menjelaskan dengan jelas arsitektur sistem komputer yang sedang dibahas. Yaitu:
Apa sajakah sistem bus yang terlibat dalam uraian ini?
Apakah disk IO melewati bus memori juga?
Apakah pengontrol disk melihat bus memori sebagai ...
Jadi ... apa yang menurut disk controller bus "sebenarnya"?
Dalam kebanyakan sistem komputer, ada semacam IO yang disebut "Port I / O".
Dalam sistem yang lebih maju (baik, sejak dua dekade lalu), ada jenis sistem bus yang lebih baru. Misalnya, ISA, PCI, AGP, PCMCIA ... SCSI, ATA, SAS, SATA, FC-AL ...
Sekarang, dengan begitu banyak ketidakpastian yang muncul tentang "sistem komputer yang sedang dibahas", Anda dapat memahami mengapa Anda tidak akan mendapatkan jawaban yang jelas untuk pertanyaan Anda.
Ya, saya tahu itu berasal dari buku pelajaran. Anda punya salinannya. Bukan saya. (Tidak di rumah - ada satu di kantor.) Oleh karena itu, jika Anda butuh jawaban, Anda perlu menunjukkan beberapa diagram dan menjelaskan seperti apa sistem bus komputer Anda.
Pada intinya, meskipun:
DMA adalah perangkat yang dapat diprogram. Artinya, CPU memiliki tanggung jawab penuh untuk memberi tahu DMA apa yang harus dilakukan. Tentu saja, selama slot waktu di mana DMA mengambil alih sistem, CPU akan bekerja sama dengan membiarkan DMA menjalankan pertunjukan.
Di bawah kendali CPU (dan OS yang menjalankannya), DMA memiliki kemampuan untuk mengambil alih kendali untuk satu atau lebih bus (jamak) untuk memfasilitasi transfer data dari pengontrol disk ke memori utama.
Selama jangka waktu di mana DMA mengambil alih bus (jamak), DMA akan mengeluarkan perintah di atas bus itu - yaitu menggantikan controller yang biasa, yaitu DMA berpura-pura sedang melakukan pekerjaan CPU.
Jika transfer data melibatkan dua bus yang berbeda, DMA mungkin harus melakukan ini ke bus yang berbeda.
Agar dapat memindahkan sejumlah byte (kata, dll), DMA berisi penghitung lingkaran untuk melacak jumlah data yang tersisa untuk disalin.
Untuk dapat menulis ke memori utama, DMA berisi register alamat memori, yang dapat diprogram oleh CPU, sehingga CPU dapat memberi tahu DMA ke mana harus menulis data.
Bergantung pada desain bus sistem, DMA mungkin atau mungkin tidak harus berurusan dengan detail mengerikan dari siklus waktu DRAM.
Sekali waktu, beberapa saat setelah DMA ditemukan, beberapa perangkat periferal mulai mengemas DMA ke pengendali mereka - ini disebut Bus Mastering . Namun, apakah DMA duduk pada paket CPU, motherboard, atau kartu I / O, itu harus pada akhirnya berada di bawah kendali (pemrograman) CPU, karena mereka entah bagaimana harus menegosiasikan akses ke bus sistem (jamak), dan memori utama.
Sistem komputer modern memiliki subsistem khusus yang disebut DRAM Controller. Jika ada, hampir pasti bahwa DRAM Controller ini juga akan memenuhi fungsi DMA, yaitu, sepertinya itu adalah "byte copying loop" yang dapat diprogram, dan semua kompleksitas yang disebutkan di atas tersembunyi di dalam silikon DRAM. Pengendali.
Jika Anda merasa sangat membingungkan - saya juga bingung - Anda perlu diagram. Banyak diagram. Diagram sistem. Diagram bus. Diagram waktu. Diagram transisi negara. dll.
sumber