Jumat, 23 Desember 2016

Pengertian Interrupt, Exception, Trap, Fault, IRQ dan Abort

interrupt, traps, fault, exception

Interrupt adalah suatu mekanisme prosesor dimana saat hal tersebut terjadi, prosesor akan menunda proses eksekusi. Setiap interrupt akan memiliki kode instruksi handler yang harus disediakan oleh sistem operasi. Kode instruksi ini bekerja layaknya fungsi subrutin biasa. Ia akan dipanggil sesuai dengan jenis sumber interrupt yang telah dikonfigurasikan oleh sistem operasi.

Pada dasarnya, interrupt sama saja seperti peristiwa pemanggilan fungsi biasa, layaknya saat melompat ke suatu prosedur dari fungsi main().

int main(){
function_to_call()
}

Bedanya, interrupt terjadi secara tak terduga dan tidak dapat dikontrol oleh program. Meskipun demikian, sistem operasi masih dapat mengontrol laju kerja interrupt jika dikehendaki demikian.

Seluruh pekerjaan program pada dasarnya merupakan proses matematis yang diatur jalannya oleh instruksi. Hasil pekerjaan yang diproses oleh program tersimpan dalam register. Oleh karena itu, kita tidak boleh membiarkan isi dari register ini termodifikasi oleh pihak lain, salah satunya adalah interrupt. Interrupt menyebabkan register instruction pointer (IP) atau program counter (PC) berpindah ke lokasi dimana interrupt handler berada. Yang bertugas menyediakan fungsi handler untuk seluruh interrupt adalah sistem operasi.

Seperti program lain, untuk bekerja, interrupt handler tentu membutuhkan register. Kita ingat bahwa konten register ini adalah bagian kerja dari program yang terinterupsi sebelumnya. Apabila termodifikasi sedikit saja, dapat dipastikan hasil kerja program menjadi tidak valid lagi. Jadi, sebuah interrupt handler perlu menyimpan konten seluruh register sebelum melakukan sesuatu, misalnya ke dalam stack.

Sebuah prosedur yang ditulis dengan bahasa pemrograman manapun, memiliki pola kerja yang sama. Jika direpresentasikan dalam bahasa assembly, semua prosedur dipanggil dengan cara yang sama, yaitu dengan instruksi CALL. Saat instruksi ini terjadi, sebenarnya prosesor menaruh nilai alamat Instruction Pointer(IP) ke stack dan melakukan jump(JMP) ke lokasi fungsi. Anda akan tahu tujuannya setelah membaca penjelasan selanjutnya.

Setiap prosedur, bagaimanapun bentuknya juga akan memiliki akhiran instruksi yang sama, yaitu RET. Instruksi RET berguna mengembalikan nilai IP yang baru saja ditaruh oleh pemanggil fungsi melalui instruksi CALL. Dengan cara seperti inilah prosesor bisa tahu dimana ia harus kembali setelah eksekusi sebuah fungsi telah selesai.

C:
MyProc(){
...
return;
}
Caller(){
MyProc();
}

ASM:
MyProc:
...
ret



Caller:
call MyProc

Bagaimana dengan interrupt? Mekanismenya masih sama, kok. Tapi, konten yang berada di dalam stack sedikit lebih banyak. Saat interrupt terjadi, prosesor melompat ke interrupt handler, sambil menaruh 3 buah data konten register yang berbeda ke dalam stack:
EFLAGS
CS
EIP

Lalu, bentuk fungsi handler interrupt tidak lagi menggunakan instruksi RET, ya. Untuk menyelesaikan eksekusi, handler menggunakan instruksi IRET. Instruksi ini akan mengembalikan konten ketiga register di atas ke posisi semula, bersamaan dengan kembali ke lokasi dimana program mulai terinterupsi.
Umumnya, interrupt handler akan menaruh konten general purpose register sebelum mulai bekerja dan mengembalikannya saat telah selesai. Dengan demikian, state kondisi kerja program yang terinterupsi tetap valid.

MyInterruptHandler:
pusha
...
popa
iret


Macam Interrupt
Ada beberapa kelompok besar interrupt yang biasa dikenal. Setiap jenisnya memiliki tingkah laku dan sumber pemicu yang berbeda.

1. Exception, yaitu interrupt yang dihasilkan oleh prosesor ketika terjadi kesalahan pada prosesor, karena eksekusi instruksi yang tidak dibenarkan kegunaannya, atau juga bisa karena prosesor menjalankan instruksi yang memang disediakan untuk menghasilkan exception secara disengaja. Exception itu sendiri dapat dibagi menjadi 3 macam:

  • Trap: Interupsi yang disengaja dengan menjalankan instruksi trap. Biasanya kondisi ini dimanfaatkan oleh sistem operasi untuk tujuan debugging.
  • Fault: Dipicu oleh kesalahan operasi yang dilakukan oleh prosesor. Seringkali interrupt dalam golongan ini muncul akibat eksekusi instruksi yang tidak valid. Dalam kondisi fault, sistem operasi biasanya masih dapat melakukan perbaikan dan melanjutkan eksekusi instruksi selanjutnya. Jika tidak memungkinkan, program yang menimbulkan fault harus diakhiri segera.
  • Abort: Timbul akibat kesalahan fatal prosesor yang sudah tidak dapat ditangani. Bisa disebabkan karena kerusakan, atau karena beberapa kesalahan fault yang seharusnya tidak dibiarkan.


2. Interrupt Request(IRQ), seringkali disebut sebagai hardware interrupt. Munculnya dipicu oleh peripheral device yang terhubung dengan jalur interupsi prosesor. Biasanya IRQ muncul saat hardware membutuhkan penanganan dari prosesor. Misalnya, ketika mouse digerakkan, ia akan mengirimkan interupsi untuk memberitahukan bahwa ada event yang sedang terjadi pada mouse. Dalam handler IRQ, terdapat deretan instruksi untuk melakukan transaksi data dengan hardware penghasil interrupt, melalui port. Setiap hardware yang dapat meghasilkan interupsi akan memiliki jalur interrupt yang berbeda dengan tujuan interupsi beragam. Jika ingin mengetahuinya secara detail, kita perlu membaca dokumen spesifikasi yang terkait dengan hardware tersebut.

3. Software Interrupt, yaitu interrupt yang dihasilkan oleh software. Biasanya digunakan untuk tujuan komunikasi antara user space program dan kernel. Di Intel, software interrupt dapat dihasilkan dengan instruksi INT x, dimana x adalah nomor interrupt handler yang akan dipanggil.
Load disqus comments

0 comments