Direct memoryaccess

7

Click here to load reader

Transcript of Direct memoryaccess

Page 1: 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.

Page 2: Direct memoryaccess

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

Page 3: Direct memoryaccess

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

Page 4: Direct memoryaccess

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

Page 5: Direct memoryaccess

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.

Page 6: Direct memoryaccess

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.

Page 7: Direct memoryaccess

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.