Sistem Manajemen Input Output Devices

Posted by : On 8:09 PM
Sistem Manajemen Input Outpot Devices
Manajemen Input Output yang dibahas kali ini bukanlah Manajemen yang seringkali dibahas pada jurusan Ekonomi , tetapi lebih pada pengaturan pada Input ataupun Output pada komputer tersebut. Oleh karena itu , kali ini kami akan membahas mengenai Manajemen Input Output Komputer.
  • Salah satu fungsi utama sistem Operasi adalah mengatur Operasi Input/Output beserta perangkatnya.
  • Sistem Operasi harus dapat memberikan perintah ke perangkat-perangkat tersebut,menangkap interupsi , dan menangani error / kesalahan yang terjadi.
  • Selain itu sistem Operasi juga menyediakan fasilitas antarmuka (interface) antara perangkat-perangkat tersebut dengan keseluruhan sistem yang ada.

A.      Klasifikasi Perangkat I/O

Pengelolaan perangkat I/O merupakan aspek perancangan sistem operasi yang terluas karena beragamnya peralatan dan begitu banyaknya aplikasi dari peralatanperalatan itu. Manajemen I/O mempunyai fungsi, di antaranya:
·         Mengirim perintah ke perangkat I/O agar menyediakan layanan.
·         Menangani interupsi peralatan I/O
·         Menangani kesalahan pada peralatan I/O
·         Memberi interface ke pemakai.
Berdasarkan sasaran komunikasi, klasifikasi perangkat I/O dibagi menjadi:
  • Peralatan yang terbaca oleh manusia (Human Readable Machine) :Yaitu, peralatan yang cocok untuk komunikasi dengan user. Contohnya, Video Display Terminal (VDT) yang terdiri dari layar, keyboard, dan mouse.
  • Peralatan yang terbaca oleh mesin (Machine Readable Machine): Yaitu peralatan yang cocok untuk komunikasi dengan peralatan elektronik. Contohnya disk dan tape, sensor, controller.
  • Komunikasi: Yaitu, peralatan yang cocok untuk komunikasi dengan peralatan-peralatan jarak jauh. Contohnya modem. Terdapat perbedaan-perbedaan besar antarkelas peralatan tersebut. Bahkan untuk satu kelas saja terdapat berbedaan sangat besar.

Perbedaan-perbedaan pokok antara lain mengenai:
·         Data rate
·         Aplikasi
·         Kompleksitas pengendalian
·         Unit yang ditransfer
·         Representasi data
·         Kondisi-kondisi kesalahan

Keberagaman yang sangat besar pada peralatan I/O membuat pendekatan seragam dan konsisten terhadap I/O baik dari pandangan sistem operasi maupun proses sangat sulit diperoleh. Klasifikasi lain yang dapat dilakukan terhadap peralatan I/O adalah berdasarkan unit transfer yang dilakukan perangkat I/O, yaitu sbb:
·         Perangkat berorientasi blok (block-oriented devices)
Peralatan mentransfer dari dan ke peralatan dengan satuan transfer adalah satu blok (sekumpulan karakter) yant telah ditentukan.
·         Perangkat berorientasi aliran karakter (character-oriented devices)
Peralatan mentransfer dari dan ke peralatan berupa aliran karakter.

B.       Teknik Pengoperasian Perangkat I/O.

Teknik Pengoperasian Perangkat I/O meliputi:
a.       Perangkat I/O terprogram (programmed I/O)
Merupakan perangkat I/O komputer yang dikontrol oleh program. Contohnya, perintah mesin in, out, move. Perangkat I/O terprogram tidak sesuai, untuk pengalihan data dengan kecepatan tinggi karena dua alasan yaitu:
·         Memerlukan overhead (ongkos) yang tinggi, karena beberapa perintah program harus dieksekusi untuk setiap kata data yang dialihkan antara peralatan eksternal dengan memori utama.
·         Banyak peralatan periferal kecepatan tinggi memiliki mode operasi sinkron, yaitu pengalihan data dikontrol oleh clock frekuensi tetap, tidak tergantung CPU.
b.      Perangkat berkendalikan interupsi (Interrupt I/O)
Interupsi lebih dari sebuah mekanisme sederhana untuk mengkoordinasi pengalihan I/O. Konsep interupsi berguna di dalam sistem operasi dan pada banyak aplikasi kontrol di mana pemrosesan rutin tertentu harus diatur dengan seksama, relatif peristiwa-peristiwa eksternal.
Interupsi merupakan bagian penting dari sistem arsitektur komputer. Setiap sistem komputer memiliki mekanisme yang berbeda. Interupsi bisa terjadi apabila perangkat keras (hardware) atau perangkat lunak (software) minta "dilayani" oleh prosesor. Apabila terjadi interupsi maka prosesor menghentikan proses yang sedang dikerjakannya, kemudian beralih mengerjakan service routine untuk melayani interupsi tersebut. Setelah selesai mengerjakan service routine maka prosesor kembali melanjutkan proses yang tertunda.
Untuk memulai operasi I/O, CPU me-load register yang bersesuaian ke device controller. Sebaliknya device controller memeriksa isi register untuk kemudian menentukan operasi apa yang harus dilakukan. Pada saat operasi I/O dijalankan ada dua kemungkinan, yaitu synchronous I/O dan asynchronous I/O.
Pada synchronous I/O, kendali dikembalikan ke proses pengguna setelah proses I/O selesai dikerjakan. Sedangkan pada asynchronous I/O, kendali dikembalikan ke proses pengguna tanpa menunggu proses I/O selesai. Sehingga proses I/O dan proses pengguna dapat dijalankan secara bersamaan.
c.       DMA (Direct Memory Address)
Direct Memory Access (DMA) adalah suatu metoda penanganan I/O dimana device controller langsung berhubungan dengan memori tanpa campur tangan CPU. Setelah men-set buffers, pointers, dan counters untuk perangkat I/O, device controller mentransfer blok data langsung ke penyimpanan tanpa campur tangan CPU. DMA digunakan untuk perangkat I/O dengan kecepatan tinggi. Hanya terdapat satu interupsi setiap blok, berbeda dengan perangkat yang mempunyai kecepatan rendah dimana interupsi terjadi untuk setiap byte (word).
Ø  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.
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.
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
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.
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. Seluruh proses DMA dikendalikan oleh sebuah controller bernama DMA Controller (DMAC). DMA Controller mengirimkan atau menerima signal dari memori dan I/O device. Prosesor hanya mengirimkan alamat awal data, tujuan data, panjang data ke DMA Controller. Interrupt pada prosesor hanya terjadi saat proses transfer selesai. Hak terhadap penggunaan bus memory yang diperlukan DMA controller didapatkan dengan bantuan bus arbiter yang dalam PC sekarang berupa chipset Northbridge.

C.       Prinsip-Prinsip Perangkat I/O

Terdapat dua sasaran perancangan perangkat I/O, yaitu:
a.         Efisiensi
Merupakan aspek penting karena operasi I/O karena sering menjadi operasi yang menimbulkan bottleneck pada sistem komputer/komputasi.
b.         Generalitas (Device-independence)
Selain berkaitan dengan simplisitas dan bebas dari kesalahan diharapkan juga menangani semua gerak peralatan secara beragam. Pernyataan ini diterapkan dari cara proses-proses memandang peralatan I/O dan cara sistem operasi mengelola peralatan-peralatan dan operasi-operasi I/O. Perangkat lunak diorganisasikan sebagai satu barisan lapisan. Lapisan-lapisan lebih bawah berurusan menyembunyikan kepelikan-kepelikan perangkatkeras. Untuk untuk lapisan-lapisan lebih atas berurusan memberikan interface yang bagus, bersih, nyaman dan seragam ke pemakai. Masalah-masalah penting yang terdapat dan harus diselesaikan pada perancangan manajemen I/O adalah:
·           Penamaan yang seragam (uniform naming) Nama berkas atau peralatan adalah string atau integer, tidak tergantung pada peralatan sama sekali.
·           Penanganan kesalahan (error handling) Umumnya penanganan kesalahan ditangani sedekat mungkin dengan perangkat keras.
·       Transfer sinkron vs asinkron Kebanyakan fisik I/O adalah asinkron. Pemroses mulai transfer dan mengabaikannya untuk melakukan kerja lain sampai interupsi tiba. Programprogram pemakai sangat lebih mudah ditulis jika operasi-operasi I/O berorientasi blok. Setelah perintah read, program kemudian secara otomatis ditunda sampai data tersedia di buffer.
·           Shareable vs dedicated Beberapa peralatan dapat dipakai bersama seperti disk, tapi ada juga peralatan yang harus hanya satu pemakai yang dibolehkan memakainya pada satu saat. Contohnya peralata yang harus dedicated misalnya printer.

D.      Hirarki Pengelolaan Perangkat I/O

1.         Interrupt Handler
Interupsi adalah suatu peristiwa yang menyebabkan eksekusi satu program ditundan dan program lain yang dieksekusi. Interrupt adalah sinyal dari peralatan luar dau permintaan dari program untuk melaksanakan suatu tugas khusus. Jika interrupt terjadi, maka program dihentikan dahulu untuk menjalankan rutin interrupt. Ketika program yang sedang berjalan tadi dihentikan, prosesor menyimpan nilai register yang berisi alamat program ke stack, dan mulei menjalankan rutin interrupt.
a.    Mekanisme Dasar Interupsi
Ketika CPU mendeteksi bahwa sebuah controller telah mengirimkan sebuah sinyal ke interrupt request line (membangkitkan sebuah interupsi), CPU kemudian menjawab interupsi tersebut (juga disebut menangkap interupsi) dengan menyimpan beberapa informasi mengenai state terkini CPU--contohnyanilai instruksi pointer, dan memanggil interrupt handler agar handler tersebut dapat melayani controller atau alat yang mengirim interupsi tersebut.
b.   Fitur Tambahan pada Komputer Modern
Pada arsitektur komputer modern, tiga fitur disediakan oleh CPU dan interrupt controller (pada perangkat keras) untuk dapat menangani interrupsi dengan lebih bagus. Fitur-fitur ini antara lain adalah kemampuan menghambat sebuah proses interrupt handling selama prosesi berada dalam critical state, efisiensi penanganan interupsi sehingga tidak perlu dilakukan polling untuk mencari device yang mengirimkan interupsi, dan fitur yang ketiga adalah adanya sebuah konsep multilevel interupsi sedemikian rupa sehingga terdapat prioritas dalam penanganan interupsi (diimplementasikan dengan interrupt priority level system).
c.    Jenis-Jenis Interupsi
Dilihat dari cara kerja prosesor, tidak semua interupsi itu sama pentingnya bagi proses yang sedang dilaksanakan oleh kerja prosesor tsb. Kalau sampai interupsi yang kurang penting ikut menginterupsi kerja prosesor, maka pelaksanaan proses itu akan menjadi lama. Karena itu biasanya SO membagi interupsi ke dalam dua jenis, yaitu:
·           Software, yaitu interrupt yang disebabkan oleh software, sering disebut dengan system call.
·           Hardware, Terjadi karena adanya akse pada perangkat keras, seperti penekanan tombol keyboard atau menggerakkan mouse.
d.   Interrupt Request Line
Pada peranti keras CPU terdapat kabel yang disebut interrupt request line, kebanyakan CPU memiliki dua macam interrupt request line, yaitu nonmaskable interrupt dan maskable interrupt. Maskable interrupt dapat dimatikan/ dihentikan oleh CPU sebelum pengeksekusian deretan critical instruction (critical instruction sequence) yang tidak boleh diinterupsi. Biasanya, interrupt jenis ini digunakan oleh device controller untuk meminta pelayanan CPU.
e.    Interrupt Vector dan Interrupt Chaining
Sebuah mekanisme interupsi akan menerima alamat interrupt handling routine yang spesifik dari sebuah set, pada kebanyakan arsitektur komputer yang ada sekarang ini, alamat ini biasanya berupa sekumpulan bilangan yang menyatakan offset pada sebuah tabel (biasa disebut interrupt vector). Tabel ini menyimpan alamat-alamat interrupt handler spesifik di dalam memori. Keuntungan dari pemakaian vektor adalah untuk mengurangi kebutuhan akan sebuah interrupt handler yang harus mencari semua kemungkinan sumber interupsi untuk menemukan pengirim interupsi.
Akan tetapi, interrupt vector memiliki hambatan karena pada kenyataannya, komputer yang ada memiliki device (dan interrupt handler) yang lebih banyak dibandingkan dengan jumlah alamat pada interrupt vector. Karena itulah, digunakanlah teknik interrupt chaining dimana setiap elemen dari interrupt vector menunjuk/ merujuk pada elemen pertama dari sebuah daftar interrupt handler. Dengan teknik ini, overhead yang dihasilkan oleh besarnya ukuran tabel dan inefisiensi dari penggunaan sebuah interrupt handler (fitur pada CPU yang telah disebutkan sebelumnya) dapat dikurangi, sehingga keduanya menjadi kurang lebih seimbang.
f.    Penyebab Interupsi
Interupsi dapat disebabkan berbagai hal, antara lain exception, page fault, interupsi yang dikirimkan oleh device controllers, dan system call Exception adalah suatu kondisi dimana terjadi sesuatu/ dari sebuah operasi didapat hasil tertentu yang dianggap khusus sehingga harus mendapat perhatian lebih, contoh nya pembagian dengan 0 (nol), pengaksesan alamat memori yang restricted atau bahkan tidak valid, dan lain-lain. System call adalah sebuah fungsi pada aplikasi (perangkat lunak) yang dapat mengeksekusikan instruksi khusus berupa software interrupt atau trap.
g.   Kegunaan interupsi
§   Pemulihan kesalahan
Komputer menggunakan bermacam-macam teknik untuk memastikan bahwa semua komponen perangkat keras beroperasi semestinya. Jika kesalahan terjadi, perangkat keras kontrol mendeteksi kesalahan dan memberi tahu CPU dengan mengajukan interupsi.
§   Debuggin
Penggunaan penting lain dari interupsi adalah sebagai penolong dalam debugging program. Debugging  merupakan sebuah metode yang dilakukan oleh para pemrogram untuk mencari dan mengurangi bug , atau kerusakan di dalam sebuah perangkat keras  sehingga perangkat tersebut bekerja sesuai dengan harapan.
§   Komunikasi Antarprogram
Perintah interupsi perangkat lunak digunakan oleh sistem operasi untuk berkomunikasi dengan dan mengontrol eksekusi program lain.
2.         Device Driver
Setiap device driver menangani satu tipe peralatan. Device driver bertugas menerima permintaan abstrak perangkat lunak device independent di atasnya dan melakukan layanan sesuai permintaan itu.
Mekanisme kerja device driver
·           Menerjemahkan perintah-perintah abstrak menjadi perintah-perintah konkret.
·           Begitu telah dapat ditentukan perintah-perintah yang harus diberikan ke pengendali, device driver mulai menulis ke register-register pengendali peralatan.
·           Setelah operasi selesai dilakukan peralatan, device driver memeriksa kesalahan-kesalahan yang terjadi.
·           Jika semua berjalan baik, device driver melewatkan data ke perangkat lunak device independent.
·           Device melaporkan informasi status sebagai pelaporan kesalahan ke pemanggil.
3.         Perangkat Lunak Sistem Operasi Device Independent
Fungsi utama perangkat lunak tingkat ini adalah membentuk fungsi-fungsi I/O yang berlaku untuk semua peralatan dan memberi interface seragam ke perangkat lunak tingkat pemakai.
Fungsi-fungsi yang biasa dilakukan antara lain:
·         Interface seragam untuk seluruh driver-driver
·         Penamaan peralatan
·         Proteksi peralatan
·         Memberi ukuran blok peralatan agar bersifat device independent
·         Melakukan buffering
·         Alokasi penyimpanan pada block devices
·         Alokasi pelepasan dedicated devices
·         Pelaporan kesalahan
Proteksi I/O
Pengguna bisa mengacaukan sistem operasi dengan melakukan instruksi I/O ilegal (mengakses lokasi memori untuk sistem operasi atau melepaskan diri dari prosesor). Untuk mencegahnya kita menganggap semua instruksi I/O sebagai priviledge instruction sehingga mereka tidak bisa mengerjakan instruksi I/O secara langsung ke memori tapi harus lewat sistem operasi terlebih dahulu. Proteksi I/O dikatakan selesai jika pengguna dapat dipastikan tidak akan menyentuh mode monitor. Jika hal ini terjadi proteksi I/O dapat dikompromikan.
4.         Interface Aplikasi I/O
Ketika suatu aplikasi ingin membuka data yang ada dalam suatu disk, sebenarnya aplikasi tersebut harus dapat membedakan jenis disk apa yang akan diaksesnya. Untuk mempermudah pengaksesan, sistem operasi melakukan standarisasi cara pengaksesan pada peralatan I/O. Pendekatan inilah yang dinamakan interface aplikasi I/O.
Interface aplikasi I/O melibatkan abstraksi, enkapsulasi, dan software layering. Abstraksi dilakukan dengan membagi-bagi detail peralatan-peralatan I/O ke dalam kelas-kelas yang lebih umum. Dengan adanya kelas-kelas yang umum ini, maka akan lebih mudah untuk membuat fungsi-fungsi standar (interface) untuk mengaksesnya. Lalu kemudian adanya device driver pada masing-masing peralatan I/O, berfungsi untuk enkapsulasi perbedaan-perbedaan yang ada dari masing-masing anggota kelas-kelas yang umum tadi. Device driver mengenkapsulasi tiap -tiap peralatan I/O ke dalam masing-masing 1 kelas yang umum tadi (interface standar). Tujuan dari adanya lapisan device driver ini adalah untuk menyembunyikan perbedaan-perbedaan yang ada pada device controller dari subsistem I/O pada kernel.
Karena hal ini, subsistem I/O dapat bersifat independen dari hardware. Karena subsistem I/O independen dari hardware maka hal ini akan sangat menguntungkan dari segi pengembangan hardware. Tidak perlu menunggu vendor sistem operasi untuk mengeluarkan support code untuk hardware-hardware baru yang akan dikeluarkan oleh vendor hardware.
a.       Peralatan Block dan Karakter
Peralatan block diharapkan dapat memenuhi kebutuhan akses pada berbagai macam disk drive dan juga peralatan block lainnya. Block device diharapkan dapat 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 interface 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 per-baris.
b.      Peralatan Jaringan
Karena adanya perbedaan dalam kinerja dan pengalamatan dari jaringan I/O, maka biasanya sistem operasi memiliki interface I/O yang berbeda dari baca, tulis dan pencarian pada disk. Salah satu yang banyak digunakan pada sistem operasi adalah interface socket.
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.
c.        Jam dan Timer
Adanya jam dan timer pada hardware 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 di-standarisasi antar sistem operasi Hardware yang mengukur waktu dan melakukan operasi trigger dinamakan programmable interval timer. Dia dapat di set 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 hardware timer. Dengan kondisi seperti ini, maka kernel atau device driver mengatur list dari interupsi dengan urutan yang duluan datang yang duluan dilayani.
d.      Blocking dan Nonblocking I/O
Ketika suatu aplikasi menggunakan sebuah blocking system call, eksekusi aplikasi itu akan diberhentikan untuk sementara. aplikasi tersebut akan dipindahkan ke wait queue. Dan setelah system call tersebut selesai, aplikasi tersebut dikembalikan ke run queue, sehingga pengeksekusian aplikasi tersebut 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.
5.      Kernel I/O Subsystem
Kernel menyediakan banyak service yang berhubungan dengan I/O. Pada bagian ini, kita akan mendeskripsikan beberapa service yang disediakan oleh kernel I/O subsystem, dan kita akan membahas bagaimana caranya membuat infrastruktur hardware dan device-driver. Service yang akan kita bahasadalah I/O scheduling, buffering, caching, spooling, reservasi device, error handling.
a.       Scheduling
Untuk menjadualkan sebuah set permintaan I/O, kita harus menetukan urutan yang bagus untuk mengeksekusi permintaan tersebut. Scheduling dapat meningkatkan kemampuan sistem secara keseluruhan, dapat membagi device secara rata di antara proses-proses, dan dapat mengurangi waktu tunggu rata-rata untuk menyelesaikan I/O. Ini 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 untuk disk tersebut. Aplikasi 1 meminta sebuah blok dekat akhir disk, aplikasi 2 meminta blok yang dekat dengan awal, dan aplikasi 3 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 dengan cara ini merupakan inti dari I/O scheduling. Sistem operasi mengembangkan implementasi scheduling dengan menetapkan antrian permintaan untuk tiap device. Ketika sebuah aplikasi meminta sebuah blocking sistem I/O, permintaan tersebut dimasukkan ke dalam antrian untuk device tersebut. Scheduler I/O mengatur urutan antrian untuk meningkatkan efisiensi dari sistem dan waktu respon rata-rata yang harus dialami oleh aplikasi. Sistem operasi juga mencoba untuk bertindak secara adil, seperti tidak ada aplikasi yang menerima service yang buruk, atau dapat seperti memberi prioritas service untuk permintaan penting yang ditunda. Contohnya, pemintaan dari subsistem mungkin akan mendapatkan prioritas lebih tinggi daripada permintaan dari aplikasi. Beberapa algoritma scheduling untuk disk I/O akan dijelaskan ada bagian Disk Scheduling.
Satu cara untuk meningkatkan efisiensi I/O subsistem dari sebuah komputer adalah dengan mengatur operasi I/O. Cara lain adalah dengan menggunakan tempat penyimpanan pada memori utama atau pada disk, melalui teknik yang disebut buffering, caching, dan spooling.
b.      Buffering
Buffer adalah area memori yang menyimpan data ketika mereka sedang dipindahkan antara dua device atau antara device dan aplikasi. Buffering dilakukan untuk tiga buah alasan. Alasan pertama adalah untuk men-cope dengan kesalahan yang terjadi karena perbedaan kecepatan antara produsen dengan konsumen dari sebuah stream data. Sebagai contoh, sebuah file sedang diterima melalui modem dan ditujukan ke media penyimpanan di hard disk. Kecepatan modem tersebut kira-kira hanyalah 1/1000 daripada hard disk. Jadi 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 instan dan modem masih memerlukan tempat untuk menyimpan data yang berdatangan, maka dipakai 2 buah buffer. Setelah modem memenuhi buffer pertama, akan terjadi request untuk menulis di disk. Modem kemudian mulai memenuhi buffer kedua sementara buffer pertama dipakai untuk penulisan ke disk. Pada saat modem sudah memenuhi buffer kedua, penulisan ke disk dari buffer pertama seharusnya sudah selesai, jadi modem akan berganti kembali memenuhi buffer pertama dan buffer kedua dipakai untuk menulis. Metode double buffering ini membuat pasangan ganda antara produsen dan konsumen sekaligus mengurangi kebutuhan waktu di antara mereka.
Alasan kedua dari buffering adalah untuk menyesuaikan device-device 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 paket-paket kecil. Paket-paket tersebut dikirim melalui jaringan, dan penerima akan meletakkan mereka di dalam buffer untuk disusun kembali.
Alasan ketiga untuk buffering adalah 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, keutuhan data yang ingin ditulis sama dengan 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 mengkopi 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. Mengcopy data antara buffer kernel data aplikasi merupakan sesuatu yang umum pada sistem operasi, kecuali overhead yang terjadi karena operasi ini karena clean semantics. Kita dapat memperoleh efek yang sama yang lebih efisien dengan memanfaatkan virtual-memori mapping dan proteksi copy-on-wire dengan pintar.
c.       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 physical, dan kemudian dicopy lagi ke dalam cache secondary and primary dari CPU. Perbedaan antara sebuah buffer dan ache adalah buffer dapat menyimpan satu-satunya informasi datanya 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 scheduling I/O menjadi efisien, sistem operasi menggunakan buffer pada memori utama untuk menyimpan data.
Buffer ini juga digunakan sebagai cache, untuk meningkatkan efisiensi I/O untuk file yang digunakan secara bersama-sama oleh beberapa aplikasi, atau yang sedang dibaca dan ditulis secara berulang-ulang.
Ketika kernel menerima sebuah permintaan file I/O, kernel tersebut mengakses buffer cacheuntuk melihat apakah daerah memori tersebut sudah tersedia dalam memori utama. Jika iya, sebuah physical disk I/O dapat dihindari atau tidak dipakai. penulisan disk juga terakumulasi ke dalam buffer cache selama beberapa detik, jadi transfer yang besar akan dikumpulkan untuk mengefisiensikan schedule penulisan. Cara ini akan menunda penulisan untuk meningkatkan efisiensi I/O akan dibahas pada bagian Remote File Access.
d.      Spooling dan Reservasi Device
Sebuah spool adalah sebuah buffer yang menyimpan output untuk sebuah device, seperti printer, yang tidak dapat menerima interleaved data streams. Walau pun printer hanya dapat melayani satu pekerjaan pada waktu yang sama, beberapa aplikasi dapat meminta printer untuk mencetak, tanpa harus mendapatkan hasil output mereka tercetak secara bercampur. Sistem operasi akan menyelesaikan masalah ini dengan meng-intercept semua output kepada printer. Tiap output aplikasi sudah di-spooled ke disk file yang berbeda. Ketika sebuah aplikasi selesai mengeprint, 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 kasus, sistem operasi menyediakan interfacekontrol yang membuat users and system administrator dapat menampilkan antrian tersebut, untuk mengenyahkan antrian-antrian yang tidak diinginkan sebelum mulai di-print.
Untuk beberapa device, seperti drive tapedan printer tidak dapat me-multiplex permintaan I/O dari beberapa aplikasi. Spooling merupakan salah satu cara untuk mengatasi masalah ini. Cara lain adalah dengan membagi koordinasi untuk multiple concurrent ini. Beberapa sistem operasi menyediakan dukungan untuk akses device secara eksklusif, dengan mengalokasikan proses ke device idle dan membuang device yang sudah tidak diperlukan lagi. Sistem operasi lainnya memaksakan limit suatu file untuk menangani device ini. Banyak sistem operasi menyediakan fungsi yang membuat proses untuk menangani koordinat exclusive akses diantara mereka sendiri.
e.       Error Handling
Sebuah sistem operasi yang menggunakan protected memory dapat menjaga banyak kemungkinan error akibat hardware mau pun aplikasi. Devices dan transfer I/O dapat gagal dalam banyak cara, bisa karena alasan transient, seperti overloaded pada network, mau pun 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 network akan mengakibatkan pengiriman ulang apabila protokolnya diketahui. Akan tetapi untuk kesalahan permanent, sistem operasi pada umumnya tidak akan bisa 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. Akan tetapi, beberapa perangkat keras dapat menyediakan informasi kesalahan yang detail, walau pun banyak sistem operasi yang tidak mendukung fasilitas ini.
f.       Kernel Data Structure
Kernel membutuhkan informasi state tentang penggunakan komponen I/O. Kernel menggunakan banyak struktur yang mirip untuk melacak koneksi jaringan, komunikasi karakter-device, dan aktivitas I/O lainnya.
UNIX menyediakan akses sistem file untuk beberapa entiti, seperti file user, raw devices, dan alamat tempat proses. Walau pun tiap entiti ini didukung sebuah operasi baca, semantics-nya berbeda untuk tiap entiti. Seperti untuk membaca file user, 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 uniform dengan menggunakan teknik object oriented.
Beberapa sistem operasi bahkan menggunakan metode object oriented secara lebih extensif. 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 bisa 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 men-share struktur data, tetapi akan mensederhanakan 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 mau pun bagian lain dari kernel. Subsistem I/O mengawasi:
Ø  Manajemen nama untuk file dan device.
Ø  Kontrol akses untuk file dan device.
Ø  Kontrol operasi, contoh: model yang tidak dapat dikenali.
Ø  Alokasi tempat sistem file.\
Ø  Alokasi device.
Ø  Buffering, caching, spooling.
Ø  I/O scheduling
Ø  Mengawasi status device, error handling, dan kesalahan dalam recovery.
Ø  Konfigurasi dan utilisasi driver device.
6.      Penanganan Permintaan I/O
Di bagian sebelumnya, kita mendeskripsikan handshaking antara device driver dan device controller, 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 physical device controller. Kita dapat mengenalkan device 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 piranti keras untuk menentukan device apa yang ada, kemudian sistem me-load ke dalam driver yang sesuai; baik sesegera mungkin, mau pun ketika diperlukan oleh sebuah permintaan I/O.
UNIX Sistem V 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 device, dan nol atau lebih stream modules diantara 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. Sebuah proses mengeluarkan sebuah blocking read system call ke sebuah file deskriptor dari berkas yang telah dibuka sebelumnya. 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. 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 dijadwalkan. Pada akhirnya, subsistem I/O mengirimkan permintaan ke device driver. Bergantung pada sistem operasi, permintaan dikirimkan melalui call subrutin atau melalui pesan in-kernel.
Device driver mengalokasikan ruang buffer pada kernel untuk menerima data, dan menjadwalkan I/O. Pada akhirnya, driver mengirim perintah ke device controller dengan menulis ke register device control. Device controller mengoperasikan piranti keras device untuk melakukan transfer data. Driver dapat menerima status dan data, atau dapat menyiapkan transfer DMA ke memori kernel. Kita mengasumsikan bahwa transfer diatur oleh sebuah DMA controller, yang meggunakan interupsi ketika transfer selesai.
Interrupt handler yang sesuai menerima interupsi melalui tabel vektor-interupsi, menyimpan sejumlah data yang dibutuhkan, menandai device driver, dan kembali dari interupsi. 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. Kernel mentransfer data atau mengembalikan kode ke ruang alamat dari proses permintaan, dan memindahkan proses dari antrian tunggu kembali ke antrian siap. Proses tidak diblok ketika dipindahkan ke antrian siap. Ketika penjadwal (scheduler) mengembalikan proses ke CPU, proses meneruskan eksekusi pada penyelesaian dari system call.
7.      Kinerja I/O
a.    Pengaruh I/O pada Kinerja
I/O sangat berpengaruh pada kinerja sebuah sistem komputer. Hal ini dikarenakan I/O sangat menyita CPU dalam pengeksekusian device driver dan penjadwalan proses, demikian sehingga alih konteks yang dihasilkan membebani CPU dan cache perangkat keras. Selain itu, I/O juga memenuhi bus memori saat mengkopi data antara controller dan physical memory, serta antara buffer pada kernel dan application space data. Karena besarnya pengaruh I/O pada kinerja komputer inilah bidang pengembangan arsitektur komputer sangat memperhatikan masalah-masalah yang telah disebutkan diatas.
b.      Cara Meningkatkan Efisiensi I/O
Ø  Menurunkan jumlah alih konteks.
Ø  Mengurangi jumlah pengkopian data ke memori ketika sedang dikirimkan antara device dan aplikasi.
Ø  Mengurangi frekuensi interupsi, dengan menggunakan ukuran transfer yang besar, smart controller, dan polling.
Ø  Meningkatkan concurrency dengan controller atau channel yang mendukung DMA.
Ø  Memindahkan kegiatan processing ke perangkat keras, sehingga operasi kepada device controller dapat berlangsung bersamaan dengan CPU.
Ø  Menyeimbangkan antara kinerja CPU, memory subsystem, bus, dan I/O.
c.       Implementasi Fungsi I/O
Pada dasarnya kita mengimplementasikan algoritma I/O pada level aplikasi. Hal ini dikarenakan kode aplikasi sangat fleksible, dan bugs aplikasi tidak mudah menyebabkan sebuah sistem crash. Lebih lanjut, dengan mengembangkan kode pada level aplikasi, kita akan menghindari kebutuhan untuk reboot atau reload device driver setiap kali kita mengubah kode. Implementasi pada level aplikasi juga bisa sangat tidak efisien. Tetapi, karena overhead dari alih konteks dan karena aplikasi tidak bisa mengambil keuntungan dari struktur data kernel internal dan fungsionalitas dari kernel (misalnya, efisiensi dari kernel messaging, threading dan locking.
Pada saat algoritma pada level aplikasi telah membuktikan keuntungannya, kita mungkin akan mengimplementasikannya di kernel. Langkah ini bisa meningkatkan kinerja tetapi perkembangannya dari kerja jadi lebih menantang, karena besarnya kernel dari sistem operasi, dan kompleksnya sistem sebuah perangkat lunak. Lebih lanjut , kita harus men-debug keseluruhan dari implementasi in-kernel untuk menghindari korupsi sebuah data dan sistem crash.
Kita mungkin akan mendapatkan kinerja yang optimal dengan menggunakan implementasi yang special pada perangkat keras, selain dari device atau controller. Kerugian dari implementasi perangkat keras termasuk kesukaran dan biaya yang ditanggung dalam membuat kemajuan yang lebih baik dalam mengurangi bugs, perkembangan waktu yang maju dan fleksibilitas yang meningkat. Contohnya, RAID controller pada perangkat keras mungkin tidak akan menyediakan sebuah efek pada kernel untuk mempengaruhi urutan atau lokasi dari individual block reads dan write, meski pun kernel tersebut mempunyai informasi yang spesial mengenai workload yang dapat mengaktifkan kernel untuk meningkatkan kinerja dari I/O.

Silahkan berikan komentar Anda jika ada hal yang kurang dipahami dengan topik yang telah Anda baca. Biasakan berkomentar dengan:
1. Berkomentar Dengan Sopan dan menggunakan bahasa yang mudah dipahami.
2. Tidak Memasukkan Link Aktif Dalam Form Komentar.
3. Berkomentar Sesuai Artikel/Postingan.
4. Berilah Informasi, Jika ada script/link yang Sudah tidak berfungsi/mati.
5. komentar Jorok/Kasar/SARA/PORNO/saya anggap sebagai SPAM.

Back to Top