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!