top of page

Aplikasi Antarmuka I/O, Antarmuka Subsistem Kernel, Operasi Perangkat Keras

  • Writer: Achmad Syarief Hidayatullah Amiruddin
    Achmad Syarief Hidayatullah Amiruddin
  • May 2, 2019
  • 12 min read

Aplikasi Antarmuka I/O


Bagian ini akan membahas bagaimana teknik dan struktur antarmuka yang memungkinkan I/O diperlakukan secara seragam. Salah satu contohnya adalah ketika suatu aplikasi ingin membuka data yang ada dalam suatu disk tanpa mengetahui jenis disk apa yang akan diaksesnya. Untuk mempermudah pengaksesan, sistem operasi melakukan standarisasi pengaksesan pada perangkat I/O. Pendekatan inilah yang dinamakan aplikasi antarmuka I/O.

Seperti layaknya permasalahan dari software-engineering yang rumit lainnya, aplikasi antarmuka I/O melibatkan abstraksi, enkapsulasi, dan software layering. Abstraksi dilakukan dengan membagi-bagi detail perangkat-perangkat I/O ke dalam kelas-kelas yang lebih umum. Dengan adanya kelas-kelas yang umum ini, maka akan lebih mudah bagi fungsi-fungsi standar (antarmuka) untuk mengaksesnya. Selanjutnya, keberadaan device driver pada masing-masing peralatan I/O akan berfungsi meng-enkapsulasi perbedaan-perbedaan yang ada dari setiap anggota kelas-kelas yang umum tadi.

Tujuan dari adanya lapisan device driver ini adalah untuk menyembunyikan perbedaan-perbedaan yang ada pada pengendali perangkat dari subsistem I/O yang terdapat dalam kernel. Dengan demikian, subsistem I/O dapat bersifat mandiri dari perangkat keras. Hal ini sangat menguntungkan dari segi pengembangan perangkat keras, karena tidak perlu menunggu vendor sistem operasi untuk mengeluarkan support code untuk perangkat-perangkat keras baru yang akan dikeluarkan oleh para vendor perangkat keras tersebut.


Struktur Kernel

Sayangnya untuk manufaktur perangkat keras, masing-masing sistem operasi memiliki standarnya sendiri untuk device driver antarmukanya. Karakteristik dari perangkat-perangkat tersebut sangat bervariasi, beberapa yang dapat membedakannya adalah dari segi:

  1. Character-stream atau block: Sebuah stream karakter memindahkan per satu bytes, sedangkan blok memindahkan sekumpulan bytes dalam 1 unit.

  2. Sequential atau Random-access: Sebuah perangkat yang sekuensial memindahkan data dalam susunan yang sudah pasti seperti yang ditentukan oleh perangkat, sedangkan pengguna akses random dapat meminta perangkat untuk mencari ke seluruh lokasi penyimpanan data yang tersedia.

  3. Synchronous atau asynchronous: perangkat yang synchronous menampilkan data-data transfer dengan waktu reaksi yang dapat diduga, sedangkan perangkat yang asynchronous menampilkan waktu reaksi yang tidak dapat diduga.

  4. Sharable atau dedicated: perangkat yang dapat dibagi dapat digunakan secara bersamaan oleh beberapa prosesor atau thread, sedangkan perangkat yang dedicatedtidak dapat.

  5. Speed of operation: Rentangan kecepatan perangkat dari beberapa bytes per detik sampai beberapa gigabytes per detik.

  6. Read-write, read only, atau write only: Beberapa perangkat memungkinkan baik input-output dua arah, tapi beberapa lainnya hanya menunjang data satu arah.

Pada umumnya sistem operasi juga memiliki sebuah "escape" atau "pintu belakang" yang secara terbuka mengirim perintah yang arbitrary dari sebuah aplikasi ke device driver. Dalam UNIX, ada ioctl() yang memungkinkan aplikasi mengakses seluruh fungsi yang tersedia di device driver tanpa perlu membuat sebuah sistem call yang baru.

ioctl() ini mempunyai tiga argumen, yang pertama adalah sebuah pendeskripsi berkas yang menghubungkan aplikasi ke driver dengan menunjuk perangkat keras yang diatur oleh driver tersebut. Kedua, adalah sebuah integer yang memilih satu perintah yang terimplementasi di dalam driver. Ketiga, sebuah pointer ke struktur data arbitrary di memori, yang memungkinkan aplikasi dan driver berkomunikasi dengan data dan mengendalikan informasi data.

Peralatan Blok dan Karakter


Peralatan blok diharapkan dapat memenuhi kebutuhan akses pada berbagai macam disk drive dan juga peralatan blok lainnya, memenuhi/mengerti perintah baca, tulis dan juga perintah pencarian data pada peralatan yang memiliki sifat random-access.

Keyboard adalah salah satu contoh alat yang dapat mengakses stream-karakter. System call dasar dari antarmuka ini dapat membuat sebuah aplikasi mengerti tentang bagaimana cara untuk mengambil dan menuliskan sebuah karakter. Kemudian pada pengembangan lanjutannya, kita dapat membuat library yang dapat mengakses data/pesan baris demi baris.

Peralatan Jaringan


Karena adanya perbedaan dalam kinerja dan pengalamatan dari jaringan I/O, maka biasanya sistem operasi memiliki antarmuka I/O yang berbeda dari baca, tulis dan pencarian pada disk. Salah satu yang banyak digunakan pada sistem operasi adalah socket interface.

Socket berfungsi untuk menghubungkan komputer ke jaringan. System call pada socket interface dapat memudahkan suatu aplikasi untuk membuat local socket, dan menghubungkannya ke remote socket. Dengan menghubungkan komputer ke socket, maka komunikasi antar komputer dapat dilakukan.


Jam dan Timer


Adanya jam dan timer pada perangkat keras komputer, setidaknya memiliki tiga fungsi, memberi informasi waktu saat ini, memberi informasi lamanya waktu sebuah proses, sebagai trigger untuk suatu operasi pada suatu waktu. Fungsi-fungsi ini sering digunakan oleh sistem operasi. Sayangnya, system call untuk pemanggilan fungsi ini tidak distandarisasi antar sistem operasi.

Perangkat keras yang mengukur waktu dan melakukan operasi trigger dinamakan programmable interval timer. Dia dapat diatur untuk menunggu waktu tertentu dan kemudian melakukan interupsi. Contoh penerapannya ada pada scheduler, dimana dia akan melakukan interupsi yang akan memberhentikan suatu proses pada akhir dari bagian waktunya.

Sistem operasi dapat mendukung lebih dari banyak timer request daripada banyaknya jumlah timer hardware. Dengan kondisi seperti ini, maka kernel atau device driver mengatur daftar dari interupsi dengan urutan yang pertama kali datang akan dilayani terlebih dahulu.


Blocking dan Nonblocking I/O


Ketika suatu aplikasi menggunakan sebuah blocking system call, eksekusi aplikasi itu akan dihentikan sementara lalu dipindahkan ke wait queue. Setelah system call tersebut selesai, aplikasi tersebut dikembalikan ke run queue, sehingga pengeksekusiannya akan dilanjutkan. Physical action dari peralatan I/O biasanya bersifat asynchronous. Akan tetapi, banyak sistem operasi yang bersifat blocking, hal ini terjadi karena blocking application lebih mudah dimengerti dari pada nonblocking application.


Kernel I/O Subsystem


Kernel menyediakan banyak layanan yang berhubungan dengan I/O. Pada bagian ini, kita akan mendeskripsikan beberapa layanan yang disediakan oleh subsistem kernel I/O, dan kita akan membahas bagaimana caranya membuat infrastruktur perangkat keras dan device driver. Layanan-layanan yang akan kita bahas adalah penjadualan I/O, buffering, caching, spooling, reservasi perangkat, error handling.


Penjadualan I/O


Menjadual sekumpulan permintaan I/O sama dengan menentukan urutan yang sesuai untuk mengeksekusi permintaan tersebut. Penjadualan dapat meningkatkan performa sistem secara keseluruhan, dapat membagi perangkat secara adil di antara proses-proses, dan dapat mengurangi waktu tunggu rata-rata untuk menyelesaikan operasi I/O.

Berikut adalah contoh sederhana untuk menggambarkan definisi di atas. Jika sebuah arm disk terletak di dekat permulaan disk, dan ada tiga aplikasi yang memblokir panggilan untuk membaca disk tersebut. Aplikasi pertama meminta sebuah blok dekat akhir disk, aplikasi kedua meminta blok yang dekat dengan awal, dan aplikasi tiga meminta bagian tengah dari disk. Sistem operasi dapat mengurangi jarak yang harus ditempuh oleh arm disk dengan melayani aplikasi tersebut dengan urutan 2, 3, 1. Pengaturan urutan pekerjaan kembali seperti ini merupakan inti dari penjadualan I/O.

Pengembang sistem operasi mengimplementasikan penjadualan dengan mengatur antrian permintaan untuk tiap perangkat. Ketika sebuah aplikasi meminta sebuah blocking sistem I/O, permintaan tersebut dimasukkan ke dalam antrian untuk perangkat tersebut. Scheduler I/O mengurutkan kembali antrian untuk meningkatkan efisiensi dari sistem dan waktu respon rata-rata yang harus dialami oleh aplikasi. Sistem operasi juga mencoba untuk bertindak secara adil agar tidak ada aplikasi yang menerima layanan yang lebih sedikit, atau dapat memberikan prioritas layanan untuk permintaan penting yang ditunda. Contohnya, pemintaan dari sub sistem mungkin akan mendapatkan prioritas lebih tinggi daripada permintaan dari aplikasi. Beberapa algoritma penjadualan untuk I/O disk akan dijelaskan pada bagian Penjadualan Disk.

Salah satu cara untuk meningkatkan efisiensi I/O sub sistem dari sebuah komputer adalah dengan mengatur operasi I/O tersebut. Cara lain adalah dengan menggunakan tempat penyimpanan pada memori utama atau pada disk, melalui teknik yang disebut buffering, caching, dan spooling.


Buffering


Buffer adalah area memori yang menyimpan data ketika mereka sedang dipindahkan antara dua perangkat atau antara perangkat dan aplikasi.

Tiga alasan melakukan buffering:

  1. Mengatasi perbedaan kecepatan antara produsen dengan konsumen dari sebuah stream data. Contoh, sebuah berkas sedang diterima melalui modem dan akan disimpan di hard disk. Kecepatan modem tersebut ribuan kali lebih lambat daripada hard disk, sehingga buffer dibuat di dalam memori utama untuk mengumpulkan jumlah byte yang diterima dari modem. Ketika keseluruhan data di buffer sudah sampai, buffer tersebut dapat ditulis ke disk dengan operasi tunggal. Karena penulisan disk tidak terjadi dengan seketika dan modem masih memerlukan tempat untuk menyimpan data yang berdatangan, maka dua buah buffer digunakan untuk melakukan operasi ini. Setelah modem memenuhi buffer pertama, akan terjadi permintaan untuk menulis di disk. Modem kemudian mulai memenuhi buffer kedua sementara buffer pertama dipakai untuk penulisan ke disk. Seiring modem sudah memenuhi buffer kedua, penulisan ke disk dari buffer pertama seharusnya sudah selesai, jadi modem akan berganti kembali memenuhi buffer pertama sedangkan buffer kedua dipakai untuk menulis. Metode double buffering ini membuat pasangan ganda antara produsen dan konsumen sekaligus mengurangi kebutuhan waktu diantara mereka.

  2. Untuk menyesuaikan perangkat-perangkat yang mempunyai perbedaan dalam ukuran transfer data. Hal ini sangat umum terjadi pada jaringan komputer, dimana buffer dipakai secara luas untuk fragmentasi dan pengaturan kembali pesan-pesan yang diterima. Pada bagian pengirim, sebuah pesan yang besar akan dipecah ke dalam paket-paket kecil. Paket-paket tersebut dikirim melalui jaringan, dan penerima akan meletakkan mereka di dalam buffer untuk disusun kembali.

  3. Untuk mendukung copy semantics untuk aplikasi I/O. Sebuah contoh akan menjelaskan apa arti dari copy semantics. Jika ada sebuah aplikasi yang mempunyai buffer data yang ingin dituliskan ke disk, aplikasi tersebut akan memanggil sistem penulisan, menyediakan pointer ke buffer, dan sebuah integer untuk menunjukkan ukuran bytes yang ingin ditulis. Setelah pemanggilan tersebut, apakah yang akan terjadi jika aplikasi tersebut merubah isi dari buffer?

Dengan copy semantics, versi data yang ingin ditulis sama dengan versi data waktu aplikasi ini memanggil sistem untuk menulis, tidak tergantung dengan perubahan yang terjadi pada buffer. Sebuah cara sederhana untuk sistem operasi untuk menjamin copy semantics adalah membiarkan sistem penulisan untuk menyalin data aplikasi ke dalam buffer kernel sebelum mengembalikan kontrol kepada aplikasi. Jadi penulisan ke disk dilakukan pada buffer kernel, sehingga perubahan yang terjadi pada buffer aplikasi tidak akan membawa dampak apa-apa. Menyalin data antara buffer kernel data aplikasi merupakan sesuatu yang umum pada sistem operasi, kecuali overhead yang terjadi karena operasi clean semantics. Kita dapat memperoleh efek yang sama yang lebih efisien dengan memanfaatkan pemetaan virtual-memori dan proteksi copy-on-wire dengan lebih pintar.


Caching


Sebuah cache adalah daerah memori yang cepat yang berisikan data kopian. Akses ke sebuah kopian yang di-cached lebih efisien daripada akses ke data asli. Sebagai contoh, instruksi-instruksi dari proses yang sedang dijalankan disimpan ke dalam disk, dan ter-cached di dalam memori fisik, dan kemudian dikopi lagi ke dalam cache secondary and primary dari CPU. Perbedaan antara sebuah buffer dan cache adalah buffer dapat menyimpan satu-satunya informasi data sedangkan sebuah cache secara definisi hanya menyimpan sebuah data dari sebuah tempat untuk dapat diakses lebih cepat.

Caching dan buffering adalah dua fungsi yang berbeda, tetapi terkadang sebuah daerah memori dapat digunakan untuk keduanya. sebagai contoh, untuk menghemat copy semantics dan membuat penjadualan I/O menjadi efisien, sistem operasi menggunakan buffer pada memori utama untuk menyimpan data.

Buffer ini juga digunakan sebagai cache, untuk meningkatkan efisiensi IO untuk berkas yang digunakan secara bersama-sama oleh beberapa aplikasi, atau yang sedang dibaca dan ditulis secara berulang-ulang.

Ketika kernel menerima sebuah permintaan berkas I/O, kernel tersebut mengakses buffer cache untuk melihat apakah daerah memori tersebut sudah tersedia dalam memori utama. Jika sudah tersedia, sebuah physical disk I/O dapat dihindari atau bahkan tidak dipakai. Penulisan disk juga terakumulasi ke dalam buffer cache selama beberapa detik, jadi transfer yang besar akan dikumpulkan untuk mengefisiensikan jadual penulisan. Cara ini akan menunda penulisan untuk meningkatkan efisiensi I/O akan dibahas pada bagian Remote File Access.


Spooling dan Reservasi Perangkat


Spooling

Spooling adalah proses yang sangat berguna saat berurusan dengan perangkat I/O dalam sistem multiprogram. Sebuah spool adalah sebuah buffer yang menyimpan keluaran untuk sebuah perangkat yang tidak dapat menerima interleaved data streams. Salah satu perangkat spool yang paling umum adalah printer.

Printer hanya dapat melayani satu pekerjaan pada waktu tertentu, namun beberapa aplikasi dapat meminta printer untuk mencetak. Spooling memungkinkan keluaran mereka tercetak satu per satu, tidak tercampur. Untuk mencetak sebuah berkas, pertama-tama sebuah proses mengeneralisasi berkas secara keseluruhan untuk di cetak dan ditempatkan pada spooling directory. Sistem operasi akan menyelesaikan masalah ini dengan meng-intercept semua keluaran kepada printer. Tiap keluaran aplikasi sudah di-spooled ke disk berkas yang berbeda. Ketika sebuah aplikasi selesai mencetak, sistem spooling akan melanjutkan ke antrian berikutnya.

Di dalam beberapa sistem operasi, spooling ditangani oleh sebuah sistem proses daemon. Pada sistem operasi yang lain, sistem ini ditangani oleh in-kernel thread. Pada kedua penanganan tersebut, sistem operasi menyediakan antarmuka kontrol yang membuat users and sistem administrator dapat menampilkan antrian tersebut, untuk mengenyahkan antrian-antrian yang tidak diinginkan sebelum mulai dicetak.

Contoh lain adalah penggunaan spooling pada transfer berkas melalui jaringan yang biasanya menggunakan daemon jaringan. Untuk mengirim berkas ke suatu tempat, user menempatkan berkas tersebut dalam spooling directory jaringan. Selanjutnya, daemon jaringan akan mengambilnya dan mentransmisikannya. Salah satu bentuk nyata penggunaan spooling jaringan adalah sistim email via Internet. Keseluruhan sistem untuk mail ini berlangsung di luar sistem operasi.

Beberapa perangkat, seperti drive tape dan printer, tidak dapat me-multiplex permintaan I/O dari beberapa aplikasi. Selain dengan spooling, dapat juga diatasi dengan cara lain, yaitu dengan membagi koordinasi untuk multiple concurrent ini. Beberapa sistem operasi menyediakan dukungan untuk akses perangkat secara eksklusif, dengan mengalokasikan proses ke device idle dan membuang perangkat yang sudah tidak diperlukan lagi. Sistem operasi lainnya memaksakan limit suatu berkas untuk menangani perangkat ini. Banyak sistem operasi menyediakan fungsi yang membuat proses untuk menangani koordinat exclusive akses diantara mereka sendiri.


Error Handling


Sebuah sistem operasi yang menggunakan protected memory dapat menjaga banyak kemungkinan error akibat perangkat keras mau pun aplikasi. Perangkat dan transfer I/O dapat gagal dalam banyak cara, dapat karena alasan transient, seperti overloaded pada jaringan, maupun alasan permanen yang seperti kerusakan yang terjadi pada disk controller. Sistem operasi seringkali dapat mengkompensasikan untuk kesalahan transient. Seperti, sebuah kesalahan baca pada disk akan mengakibatkan pembacaan ulang kembali dan sebuah kesalahan pengiriman pada jaringan akan mengakibatkan pengiriman ulang apabila protokolnya diketahui. Akan tetapi untuk kesalahan permanen, sistem operasi pada umumnya tidak akan dapat mengembalikan situasi seperti semula.

Sebuah ketentuan umum, yaitu sebuah sistem I/O akan mengembalikan satu bit informasi tentang status panggilan tersebut, yang akan menandakan apakah proses tersebut berhasil atau gagal. Sistem operasi pada UNIX menggunakan integer tambahan yang dinamakan ERRNO untuk mengembalikan kode kesalahan sekitar 1 dari 100 nilai yang mengindikasikan sebab dari kesalahan tersebut. Sebaliknya, beberapa perangkat keras dapat menyediakan informasi kesalahan yang detail, walau pun banyak sistem operasi yang tidak mendukung fasilitas ini.

Sebagai contoh, kesalahan pada perangkat SCSI dilaporkan oleh protokol SCSI dalam bentuk sense key yang mengindentifikasi kesalahan yang umum seperti error pada perangkat keras atau permintaan yang ilegal; sebuah additional sense code yang mengkategorikan kesalahan yang muncul, seperti kesalahan parameter atau kesalahan self-test; dan sebuah additional sense code qualifier yang memberitahukan kesalahan secara lebih mendalam dan mendetil, seperti parameter yang error.


Struktur Data Kernel


Kernel membutuhkan informasi keadaan tentang penggunakan komponen I/O. Kernel menggunakan banyak struktur yang mirip untuk melacak koneksi jaringan, komunikasi perangkat karakter, dan aktivitas I/O lainnya.

UNIX menyediakan akses sistem berkas untuk beberapa entiti, seperti berkas pengguna, raw devices, dan alamat tempat proses. Walau pun tiap entiti ini didukung sebuah operasi baca, semantiknya berbeda untuk tiap entiti. Seperti untuk membaca berkas pengguna, kernel perlu memeriksa buffer cache sebelum memutuskan apakah akan melaksanakan I/O disk. Untuk membaca sebuah raw disk, kernel perlu untuk memastikan bahwa ukuran permintaan adalah kelipatan dari ukuran sektor disk, dan masih terdapat di dalam batas sektor. Untuk memproses citra, cukup perlu untuk mengkopi data ke dalam memori. UNIX mengkapsulasikan perbedaan-perbedaan ini di dalam struktur yang seragam dengan menggunakan teknik object oriented.

Beberapa sistem operasi bahkan menggunakan metode object oriented secara lebih ekstensif. Sebagai contoh, Windows NT menggunakan implementasi message-passing untuk I/O. Sebuah permintaan I/O akan dikonversikan ke sebuah pesan yang dikirim melalui kernel kepada I/O manager dan kemudian ke device driver, yang masing-masing dapat mengubah isi pesan. Untuk output, isi message adalah data yang akan ditulis. Untuk input, message berisikan buffer untuk menerima data. Pendekatan message-passing ini dapat menambah overhead, dengan perbandingan dengan teknik prosedural yang membagi struktur data, tetapi akan mennyederhanakan struktur dan design dari sistem I/O tersebut dan menambah fleksibilitas.

Kesimpulannya, subsistem I/O mengkoordinasi kumpulan-kumpulan service yang banyak sekali, yang tersedia dari aplikasi maupun bagian lain dari kernel. Subsistem I/O mengawasi:

  1. Managemen nama untuk berkas dan perangkat.

  2. Kontrol akses untuk berkas dan perangkat.

  3. Kontrol operasi, contoh: model yang tidak dapat dikenali.

  4. Alokasi tempat sistem berkas.

  5. Alokasi perangkat.

  6. Buffering, caching, spooling.

  7. Penjadualan I/O

  8. Mengawasi status perangkat, error handling, dan kesalahan dalam recovery.

  9. Konfigurasi dan utilisasi driver device.


Penanganan Permintaan I/O


Di bagian sebelumnya, kita mendeskripsikan handshaking antara device driver dan pengendali perangkat, tapi kita tidak menjelaskan bagaimana Sistem Operasi menyambungkan permintaan aplikasi untuk menyiapkan jaringan menuju sektor disk yang spesifik.

Sistem Operasi yang modern mendapatkan fleksibilitas yang signifikan dari tahapan-tahapan tabel lookup di jalur diantara permintaan dan pengendali perangkat physical. Kita dapat mengenalkan perangkat dan driver baru ke komputer tanpa harus meng-compile ulang kernelnya. Sebagai fakta, ada beberapa sistem operasi yang mampu untuk me-load device drivers yang diinginkan. Pada waktu boot, sistem mula-mula meminta bus perangkat keras untuk menentukan perangkat apa yang ada, kemudian sistem me-load ke dalam driver yang sesuai; baik sesegera mungkin, mau pun ketika diperlukan oleh sebuah permintaan I/O.

Sistem V UNIX mempunyai mekanisme yang menarik, yang disebut streams, yang membolehkan aplikasi untuk men-assemble pipeline dari kode driver secara dinamis. Sebuah stream adalah sebuah koneksi full duplex antara sebuah device driver dan sebuah proses user-level. Stream terdiri atas sebuah stream head yang merupakan antarmuka dengan user process, sebuah driver end yang mengontrol perangkat, dan nol atau lebih stream modules di antara mereka. Modules dapat didorong ke stream untuk menambah fungsionalitas di sebuah layered fashion. Sebagai gambaran sederhana, sebuah proses dapat membuka sebuah alat port serial melalui sebuah stream, dan dapat mendorong ke sebuah modul untuk memegang edit input. Stream dapat digunakan untuk interproses dan komunikasi jaringan. Faktanya, di Sistem V, mekanisme soket diimplementasikan dengan stream.

Berikut dideskripsikan sebuah lifecycle yang tipikal dari sebuah permintaan pembacaan blok:

  1. Sebuah proses mengeluarkan sebuah blocking read system call ke sebuah berkas deskriptor dari berkas yang telah dibuka sebelumnya.

  2. Kode system-call di kernel mengecek parameter untuk kebenaran. Dalam kasus input, jika data telah siap di buffer cache, data akan dikembalikan ke proses dan permintaan I/O diselesaikan.

  3. Jika data tidak berada dalam buffer cache, sebuah physical I/O akan bekerja, sehingga proses akan dikeluarkan dari antrian jalan (run queue) dan diletakkan di antrian tunggu (wait queue) untuk alat, dan permintaan I/O pun dijadualkan. Pada akhirnya, subsistem I/O mengirimkan permintaan ke device driver. Bergantung pada sistem operasi, permintaan dikirimkan melalui call subrutin atau melalui pesan in-kernel.

  4. Device driver mengalokasikan ruang buffer pada kernel untuk menerima data, dan menjadualkan I/O. Pada akhirnya, driver mengirim perintah ke pengendali perangkat dengan menulis ke register device control.

  5. Pengendali perangkat mengoperasikan perangkat keras perangkat untuk melakukan transfer data.

  6. Driver dapat menerima status dan data, atau dapat menyiapkan transfer DMA ke memori kernel. Kita mengasumsikan bahwa transfer diatur oleh sebuah DMA controller, yang menggunakan interupsi ketika transfer selesai.

  7. Interrupt handler yang sesuai menerima interupsi melalui tabel vektor-interupsi, menyimpan sejumlah data yang dibutuhkan, menandai device driver, dan kembali dari interupsi.

  8. Device driver menerima tanda, menganalisa permintaan I/O mana yang telah diselesaikan, menganalisa status permintaan, dan menandai subsistem I/O kernel yang permintaannya telah terselesaikan.

  9. Kernel mentransfer data atau mengembalikan kode ke ruang alamat dari proses permintaan, dan memindahkan proses dari antrian tunggu kembali ke antrian siap.

  10. Proses tidak diblok ketika dipindahkan ke antrian siap. Ketika penjadual (scheduler) mengembalikan proses ke CPU, proses meneruskan eksekusi pada penyelesaian dari system call.

Sumber : http://opensource.telkomspeedy.com/repo/abba/v06/Kuliah/SistemOperasi/2004/51/produk/SistemOperasi/c72.html

 
 
 

Commentaires


Post: Blog2_Post

©2019 by Amad's Blog. Proudly created with Wix.com

bottom of page