Direct memoryaccess
Click here to load reader
-
Upload
alvin-setiawan -
Category
Documents
-
view
174 -
download
0
Transcript of Direct memoryaccess
Pujianto
INTERRUPT dan DMA pada Processor Intel
Interrupt
Interupsi adalah upaya untuk mengalihkan perhatian Intel 8088 dari program yg sedang
dikerjakan untuk memberikan pelayanan khusus terlebih dahulu pada yang menginterupsinya.
Contoh : Keyboard menginterupsi kerja 8088 karena ada tuts keyboard yg ditekan. Data
yg dihasilkan oleh tuts tersebut harus diambil sesegera mungkin oleh Intel 8088.
Dilihat dari siapa yg menginterupsi, interupsi dapat dibedakan menjadi 2, yaitu :
1. Software generated : dihasilkan dengan menggunakan instruksi INT
2. Hardware generated : dihasilkan dengan mengaktifkan sinyal Interrupt pada pin 18 di
Intel 8088 (active high)
Kedua jenis interupsi di atas akan menyebabkan Intel 8088 mengerjakan suatu routine
(program kecil) khusus (Interrupt Service Routine).
Software Generated
Dihasilkan oleh instruksi INT yang diikuti nomor interupsinya. Contoh : INT 13 berarti
interupsi nomor 13H.
Tipe interupsi ini ada 2 jenis :
1. Interupsi yg dihasilkan oleh ROMBIOS
(untuk nomor interupsi 0 s.d. nomor interupsi 1FH)
2. Interupsi yg dihasilkan oleh sistem operasi yg digunakan
(untuk nomor interupsi 20H keatas)
Adanya instruksi INT dalam program akan menyebabkan 8088 meninggalkan
program yg sedang dikerjakan, dan mengerjakan routine khusus untuk nomor interupsi
tersebut. Setelah routine tersebut selesai dikerjakan, maka 8088 akan kembali ke program
semula yg tadinya ditinggalkan.
Pujianto
Urutan kerja 8088 saat mengerjakan instruksi INT XX
(nilai XX dapat berharga 00H sampai FFH) :
1. Menyimpan isi register ke Stack
2. Mencari alamat routine XX
3. Lompat ke alamat routine tersebut
4. Mengerjakan routine tersebut
5. Kembali ke program semula dgn cara mengembalikan semua isi register dari Stack
1. Menyimpan isi register ke Stack
Langkah ini ditujukan untuk mengembalikan kembali isi register setelah routine XX
selesai dijalankan. Yang dilakukan :
1. Push Flag,
2. Clear Interrupt Flag,
3. Clear Trap Flag,
4. Push CS,
5. Push IP
2. Mencari alamat routine XX
Sebelum dapat menjalankan routine XX, 8088 harus mencari terlebih dahulu dimana routine
XX tersebut berada.
Untuk mendapatkan alamat routine tsb, 8088 akan mencarinya di Interrupt Vector Table
yg ada di alamat 00000H sampai 003FFH (setiap nomor interupsi membutuhkan 4 byte
alamat yg disimpan oleh Interrupt Vector Table: 2 byte untuk alamat Segment dan 2 byte
untuk alamat Offset)
address content Description 003FF 02 Segment address Interrupt #FF
003FE 46
003FD F0 Offset address
003FC 00
00003 00 Segment address Interrupt #00
00002 C9
00001 0F Offset address
00000 9E
Pujianto
3. Lompat ke alamat routine XX
Melompat ke instruksi awal dari routine XX dgn melakukan lompatan JMP SSSS:OOOO
dimana SSSS adalah alamat Segment dan OOOO adalah alamat Offset.
4. Mengerjakan routine XX
8088 akan mengerjakan semua instruksi yg ada sampai ditemukan instruksi IRET
(Interrupt Return)
5. Kembali ke program semula
Jika instruksi IRET dikerjakan, maka semua isi regiter yg tadi disimpan, akan
dikembalikan. Yang dilakukan :
1. Pop IP,
2. Pop CS,
3. Set Trap Flag,
4. Set Interrupt Flag,
5. Pop Flag
Hardware Generated
Adanya sinyal +5V pada pin 18 pada 8088 akan menyebabkan 8088 meninggalkan program
yg sedang dikerjakan, dan mengerjakan routine khusus untuk nomor interupsi
tersebut. Setelah routine tersebut selesai dikerjakan, maka 8088 akan kembali ke program
semula yg tadinya ditinggalkan.
Urutan kerja 8088 saat mendapatkan sinyal aktif pada pin 18 (INTR) :
1. Menyimpan isi register ke Stack
2. Mengaktifkan sinyal INTA (Interrupt Acknowledged) di pin 24
3. Membaca nomor interupsi di Address Bus (A0 – A7)
4. Mencari alamat routine untuk nomor interupsi tersebut
5. Lompat ke alamat routine tersebut
6. Mengerjakan routine tersebut
7. Kembali ke program semula dgn cara mengembalikan semua isi register dari Stack
Pujianto
1. Menyimpan isi register ke Stack
Langkah ini ditujukan untuk mengembalikan kembali isi register setelah routine selesai
dijalankan.
Yang dilakukan :
1. Push Flag,
2. Clear Interrupt Flag,
3. Clear Trap Flag,
4. Push CS,
5. Push IP
2. Mengaktifkan sinyal INTA
Langkah ini ditujukan agar Interrupt Controller (ex: 8259) memberitahukan 8088
nomor interupsinya
3. Membaca nomor interupsi
Membaca kondisi Address Bus A0 – A7 untuk mengetahui siapa yg menginterupsinya
4. Mencari alamat routine yg sesuai
Sebelum dapat menjalankan routine yg sesuai, 8088 harus mencari terlebih dahulu dimana
routine tersebut berada.
Untuk mendapatkan alamat routine tsb, 8088 akan mencarinya di Interrupt Vector Table yg
sama dgn tabel untuk Software Generated Interrupt.
5. Lompat ke alamat routine tersebut
Melompat ke instruksi awal dari routine dgn melakukan lompatan JMP SSSS:OOOO
dimana SSSS adalah alamat Segment dan OOOO adalah alamat Offset.
6. Mengerjakan routine tersebut
8088 akan mengerjakan semua instruksi yg ada sampai ditemukan instruksi IRET (Interrupt
Return)
7. Kembali ke program semula
Jika instruksi IRET dikerjakan, maka semua isi regiter yg tadi disimpan, akan
Pujianto
dikembalikan. Yang dilakukan :
1. Pop IP,
2. Pop CS,
3. Set Trap Flag,
4. Set Interrupt Flag,
5. Pop Flag
DMA(DIRRECT ACCESS MEMORY)
Seperti yang telah dijelaskan sebelumnya bahwa mekanisme interupsi tidak efisien untuk
melakukan transfer data yang besar. Transfer data dilakukan per word. Pada mekanisme
interupsi, untuk tiap word data yang ditransfer, prosesor tidak akan menunggu data tersedia
pada perangkat yang mengirim data maupun data selesai ditulis oleh perangkat yang
menerima data. Dalam situasi tersebut prosesor akan mengganti proses yang sedang
dieksekusinya (yang melakukan transfer data) dengan proses lain (context switch). Jika
ukuran data yang ditransfer cukup besar, prosesor akan berulang kali melakukan context
switch, padahal context switch akan menimbulkan overhead. Oleh karena itu kelemahan
mekanisme interupsi untuk menangani transfer data yang besar disebabkan oleh context
switch. Untuk menangani kelemahan tersebut, digunakan suatu unit kontrol khusus yang
disediakan untuk mentrasfer data langsung antar perangkat eksternal dan memori utama tanpa
intervensi terus menerus dari prosesor. Unit kontrol khusus tersebut adalah DMA.
Sistem modern dapat mengurangi beban CPU untuk melakukan operasi M/K, yaitu dengan
menggunakan pengendali DMA. Dengan demikian CPU dapat melakukan tugas lain
sementara operasi M/K dilakukan. Setiap pengendali peralatan dapat saja memiliki perangkat
keras DMA tersendiri. Alternatif lain adalah dengan memiliki sebuah pengendali DMA pada
motherboard yang mengatur transfer ke berbagai peralatan.
Untuk memulai transfer data secara DMA, driver peralatan akan menulis blok perintah DMA
memori yang menunjuk sumber data, tujuan, dan jumlah byte yang akan ditransfer. CPU
kemudian akan mengirimkan alamat blok perintah ini pada pengendali DMA. pengendali
DMA akan memproses informasi ini untuk kemudian mengoperasikan bus memori.
Transfer sebanyak 1 byte/word per satuan waktu oleh pengendali DMA disebut sebagai cycle
stealing karena pengendali menggunakan bus cycle milik CPU. Dengan cycle stealing
penggunaan bus oleh CPU akan tertunda beberapa waktu karena bus digunakan untuk proses
DMA.
Tiga langkah dalam transfer DMA:
1. prosesor menyiapkan DMA transfer dengan menyediakan data-data dari perangkat,
operasi yang akan ditampilkan, alamat memori yang menjadi sumber dan tujuan data,
dan banyaknya byte yang ditransfer.
Pujianto
2. Pengendali DMA memulai operasi (menyiapkan bus, menyediakan alamat,menulis
dan membaca data) samapai seluruh blok sudah ditransfer.
Pengendali DMA menginterupsi prosesor, dimana selanjutnya akan ditentukan tindakan
berikutnya.
TRANSFER DMA
- Untuk memulai sebuah transfer DMA, host akan menuliskan sebuah DMA command block
yang berisi pointer yang menunjuk ke sumber transfer, pointer yang menunjuk ke tujuan/
destinasi transfer, dan jumlah byte yang ditransfer, ke memori. CPU kemudian menuliskan
alamat command block ini ke DMA controller, sehingga DMA controller dapat kemudian
mengoperasikan bus memori secara langsung dengan menempatkan alamat-alamat pada bus
tersebut untuk melakukan transfer tanpa bantuan CPU. Tiga langkah dalam transfer DMA:
- Prosesor menyiapkan DMA transfer dengan menyedia kan data-data dari device, operasi
yang akan ditampilkan, alamat memori yang menjadi sumber dan tujuan data, dan banyaknya
byte yang di transfer.
- DMA controller memulai operasi (menyiapkan bus, menyediakan alamat, menulis dan
membaca data), sampai seluruh blok sudah di transfer.
- DMA controller meng-interupsi prosesor, dimana selanjutnya akan ditentukan tindakan
berikutnya.
METODE DMA
- Pada dasarnya, DMA mempunyai dua metode yang berbeda dalam mentransfer data.
Metode yang pertama adalah metode yang sangat baku dan simple disebut HALT, atau Burst
Mode DMA, karena DMA controller memegang kontrol dari sistem bus dan mentransfer
semua blok data ke atau dari memori pada single burst. Selagi transfer masih dalam progres,
sistem mikroprosessor di-set idle, tidak melakukan instruksi operasi untuk menjaga internal
register. Tipe operasi DMA seperti ini ada pada kebanyakan komputer.
n Metode yang kedua, mengikut-sertakan DMA controller untuk memegang kontrol dari
sistem bus untuk jangka waktu yang lebih pendek pada periode dimana mikroprosessor sibuk
dengan operasi internal dan tidak membutuhkan akses ke sistem bus. Metode DMA ini
disebut cycle stealing mode. Cycle stealing DMA lebih kompleks untuk diimplementasikan
dibandingkan HALT DMA, karena DMA controller harus mempunyai kepintaran untuk
merasakan waktu pada saat sistem bus terbuka.
HANDSHAKING DMA
- Proses handshaking antara DMA controller dan device controller dilakukan melalui
sepasang kabel yang disebut DMA-request dan DMA-acknowledge. Device controller
mengirimkan sinyal melalui DMA-request ketika akan mentransfer data sebanyak satu word.
Hal ini kemudian akan mengakibatkan DMA controller memasukkan alamat-alamat yang
dinginkan ke kabel alamat memori, dan mengirimkan sinyal melalui kabel DMA-
acknowledge. Setelah sinyal melalui kabel DMA-acknowledge diterima, device controller
mengirimkan data yang dimaksud dan mematikan sinyal pada DMA-request.
Pujianto
-Hal ini berlangsung berulang-ulang sehingga disebut handshaking. Pada saat DMA
controller mengambil alih memori, CPU sementara tidak dapat mengakses memori
(dihalangi), walau pun masih dapat mengaksees data pada cache primer dan sekunder. Hal ini
disebut cycle stealing, yang walau pun memperlambat komputasi CPU, tidak menurunkan
kinerja karena memindahkan pekerjaan data transfer ke DMA controller meningkatkan
performa sistem secara keseluruhan.
Cara-cara Implementasi DMA
- Dalam pelaksanaannya, beberapa komputer menggunakan memori fisik untuk proses DMA
, sedangkan jenis komputer lain menggunakan alamat virtual dengan melalui tahap
“penerjemahan” dari alamat memori virtual menjadi alamat memori fisik, hal ini disebut
direct virtual-memory address atau DVMA.
- Keuntungan dari DVMA adalah dapat mendukung transfer antara dua memory mapped
device tanpa intervensi CPU.